2023年3月31日金曜日

LCD 1602あるいは2004で大きいフォントの時計を作ってみる

買ったまま放置状態の電子工作用の部品を活用するべく、ここ最近は時計ばかり作っているのだが、また懲りずに時計を作成した。
今回使用したのは1602とか2004と呼ばれるキャラクター液晶ディスプレイで、それぞれ横16桁×縦2桁、横20桁×縦4桁の文字が表示可能なディスプレイとなっている。
これらの液晶ディスプレイには予め文字や記号等がプリセットされているのだが、大きいフォントなどというものは存在しないので、自ら適当なキャラクターブロックを作成して、それらを組み合わせて文字を表現するしかない。 作業的にはドットマトリックスLEDで文字を書く作業に似ているかもしれない。

さて、外字登録部分にキャラクターブロックをぶち込んで、それらを組み合わせればそこそこ綺麗なフォントが表示できるんじゃないかと思って、とりあえず1602用に0~9までの数字のフォントのブロックを作りプログラムを書いたのだが、何をどうやっても最後の8ブロック分?しか文字が表示されない。
で、調べてみると1602や2004で外字を登録できるエリアは8ブロック分しか無いらしい。
だから世に出回ってる1602や2004の大きいフォントの時計はあんなにカクカクしたフォントなのかと理解できた次第。
そんなわけで、先人に倣って何とか8キャラクター追加するだけで大きいフォントを作ってみる。 といっても、インターネット上に出回っている作例のフォントデータを再利用させてもらうだけで、オリジナルの要素はほぼ無い。
各フォントブロックの作成は「LCD Custom Character Generator」というサイトで作成した。又、絵柄の確認は「ミニドット絵メーカー3」というサイトを利用させて頂いた。

最初に作ったのはLCD2004でeps8266とのデータのやり取りはI2Cで行っている。

ESP8266とLCDの間のケーブルが4本だけで済むので非常に楽だからだ。 この作品に関しては、インターネットに公開されていたプログラムをほぼそのまま使わせてもらった。 温度や湿度の表示は必要なかったので、その部分のキャラクタースクロール処理等は停止させている。 日付や曜日に関しては日本人に馴染みのある表記に変更した。
ソースはこちらに置いておく。必要ないコードも混ざっているが、とりあえず動けば良いという事で…

次にLCD1602とesp8266で作成。

こちらも2004と同様にI2Cでの接続となっている。 フォントブロックのパターンはインターネット上にあったものを参考にさせてもらった。組み合わせに関しては、自分が見やすいように適当に改変している。 曜日は表示させるだけの余裕がなかった。
この時計のソースはこちらに置いておく。

いずれもNTPから時刻を取得して、時刻補正しているだけで、7セグLED時計の時と同じくRTCは利用していないので、無線LANが通じない場所では利用できない。 まぁ、月差が分単位で発生するぐらい無線LANが止まるような環境で使う事は無いので、気にしない事にする。
あと、今回は複数のSSIDを設定し電波の強い方を使うようにしてみた。

 

 

 

0 件のコメント:

コメントを投稿