時計は色々作ってきた。小型のOLED表示のものなどはコンパクトで良いのだが、歳を取ると何とも見にくい。書斎の壁掛けの時計が壊れたのを機に、壁掛けLED時計を作ってみた。大型の表示器を使った時計は以前から検討はしていたが、ドットマトリクスは消費電力が多そうだし、大型の7セグメントLEDは、あるものの産業用途のものが殆どで、コスト的に手が出なかった。7セグなら3Dプリンターで作ることができそうだと思いついた。I/Oのピン数が沢山要る。そこで、表示と時計機能を別々のCPUに分けることにした。CPU間はI2C通信で行い、1マスター側はESP-WROOM2を使用し、計時とNTPでの補正を行い、結果をI2CでスレーブCPUに伝える。Pro/Miniとし、I2Cで得られた情報を表示することに徹する。言う構成にすることにした。フリー版のEAGLEでは、今回の時計フルサイズの基板は設計できない。マスターとスレーブを別の基板に分けた。7セグ表示器も個々に接続端子を出したので、左右に分離して作成することした。マスターCPU基板の部品面。表示器を接続するコネクタしか付いていない。Pro/Miniを搭載。基板は、7セグLEDのためのパスラインが殆どだ。各セグメントの限流抵抗が見える。表示のパスを渡るので、ディスクリート抵抗を使い、ラインをまたいで信号を取り出している。3ピンのコネクタは、PIR接続用。マスターとスレーブの基板を接続したところI2Cには温・湿度センサーもぶら下がっている。マスターCPUは常に時刻と温度、湿度のデータをスレーブ送っている(通信の応答やハンドシェークは無く、垂れ流し...)ケースに収めたところ。ケースは3Dプリンタで印刷したが、大きい面積を印刷するのは得意では無いので、広い面はアクリル板を張っている。ケースに収めた後の正面。LEDを乳白のアクリルに当てて散乱させ、セグメントの形を投影している。写真を取り忘れて、納めてしまったので、PCBのパターン図を掲載しておいた。7セグメント表示器も3Dプリンタで印刷して作った。いう用途には3Dプリンタは誠に便利だ。表示器も横幅が大きすぎるので全桁をまとめて印刷できない。今後の別の用途も考慮して、一桁ずつ印刷、後で接着した。アクリル接着剤がPLAにも有効なので、印刷物やアクリル板を組み合わせる構造が作りやすい。表示器にLED基板を実装したところ。7セグのバスラインを通すために、コネクタは縦に取り付けた。表示の一桁分スリットから基板上のチップLEDが見える。このままでは、ポイントが光るだけだが、乳白のアクリルに投影するとちゃんと7セグに見えるのだ。表示の動作確認をしているところ写真はアクリルでは無いが、白紙に投影しても同じ事。数字の表示を確認することができた。マスターCPU◎Wi-Fi接続:1起動後2秒経った時に、GPIO0を読んで、LOWならサーバーモードで起動する。HIGH(NO-Jumper)ならクライアントモードで起動する。2サーバーモードA/Pが未設定の時はサーバーを起動する。端末で本機のアクセスポイントに接続する。端末のブラウザで本機のサーバーにアクセスする。本機は、指定された情報をSPIFFS(ESP内蔵フラッシュメモリ)内の"/wifi_settings.txt"に保存する。3クライアントモード通常動作はクライアントモードを使用する。クライアントモードで起動した時、本機はSPIFFSから上の情報を読み出し、Wi-FiのA/Pに接続する。◎時計:1ESP内蔵のRTCを使用する。スリープ時間もRTCメモリーに書き込む2スリープ時間をRTCから読み出した時刻に加算して、現在時刻を得る。3ディープスリープが規定回数に達したら、Wi-Fiに接続し、NFTPから時刻を得、RTCにセットする。◎I2C通信スレーブ側に時刻・温度・湿度の情報をLEDに表示するスレーブCPU◎表示:1タイマ割り込みで、4桁の7セグメントを順次表示する。7セグメントLEDはカソードコモン秒コロンは、アナログ出力で1秒おきに点滅させる。表示を行う時点で、PIRセンサの状態を見て、人がいない場合は、表示を行わない。3モード切替モード切替スイッチの状態によって、「時刻表示」または「温・湿度表示」を切り替える。◎I2C通信マスター側から送られた時刻・温度・湿度の情報をLEDに表示する参考までにハードウェア・ソフトウェアの情報を。これらは僕の覚えであり、正確に改版を反映していない可能性があります。この通り作って動かないからと、怒らないで欲しい。Techno-Square。