時計は色々作ってきた。小型のOLED表示のものなどはコンパクトで良いのだが、歳を取ると何とも見にくい。
書斎の壁掛けの時計が壊れたのを機に、壁掛けLED時計を作ってみた。
大型の表示器を使った時計は以前から検討はしていたが、ドットマトリクスは消費電力が多そうだし、大型の7セグメントLEDは、あるものの産業用途のものが殆どで、コスト的に手が出なかった。
しかし、7セグなら3Dプリンターで作ることができそうだと思いついた。
ただし、I/Oのピン数が沢山要る。そこで、表示と時計機能を別々のCPUに分けることにした。
CPU間はI2C通信で行い、
①マスター側はESP-WROOM2を使用し、計時とNTPでの補正を行い、結果をI2CでスレーブCPUに伝える。
②スレーブ側はArdino Pro/Miniとし、I2Cで得られた情報を表示することに徹する。
と言う構成にすることにした。
マスターCPU基板。
フリー版のEAGLEでは、今回の時計フルサイズの基板は設計できない。なので、マスターとスレーブを別の基板に分けた。
7セグ表示器も個々に接続端子を出したので、左右に分離して作成することした。
マスターとスレーブの基板を接続したところ
I2Cには温・湿度センサーもぶら下がっている。
マスターCPUは常に時刻と温度、湿度のデータをスレーブ送っている(通信の応答やハンドシェークは無く、垂れ流し…)
表示器も横幅が大きすぎるので全桁をまとめて印刷できない。
今後の別の用途も考慮して、一桁ずつ印刷、後で接着した。
アクリル接着剤がPLAにも有効なので、印刷物やアクリル板を組み合わせる構造が作りやすい。
◎Wi-Fi接続:
①起動後2秒経った時に、GPIO0を読んで、LOWならサーバーモードで起動する。
HIGH(NO-Jumper)ならクライアントモードで起動する。
②サーバーモード
A/Pが未設定の時はサーバーを起動する。
②-1 端末で本機のアクセスポイントに接続する。
サーバーモード時のSSIDは「ESP+Macアドレス」、WEPキーは「password」
②-2 端末のブラウザで本機のサーバーにアクセスする。(URLは、192.168.4.1)
②-3 上のWEBサイトからインターネット接続に使用するA/PのSSIDとWEPキー(パスワード)を入力する
②-4 本機は、指定された情報をSPIFFS(ESP内蔵フラッシュメモリ)内の"/wifi_settings.txt"に保存する。
③クライアントモード
通常動作はクライアントモードを使用する。
③-1 クライアントモードで起動した時、本機はSPIFFSから上の情報を読み出し、Wi-FiのA/Pに接続する。
◎時計:
①ESP内蔵のRTCを使用する。
①-1 ディープスリープから起動した時に、現在時刻をRTCメモリーに書き込む
①-2 スリープ時間もRTCメモリーに書き込む
②スリープ時間をRTCから読み出した時刻に加算して、現在時刻を得る。
③ディープスリープが規定回数に達したら、Wi-Fiに接続し、NFTPから時刻を得、RTCにセットする。
◎I2C通信
スレーブ側に時刻・温度・湿度の情報をLEDに表示する
◎表示:
①タイマ割り込みで、4桁の7セグメントを順次表示する。
7セグメントLEDはカソードコモン
秒コロンは、アナログ出力で1秒おきに点滅させる。
②表示の点灯と消灯
表示を行う時点で、PIRセンサの状態を見て、人がいない場合は、表示を行わない。
③モード切替
モード切替スイッチの状態によって、「時刻表示」または「温・湿度表示」を切り替える。
◎I2C通信
マスター側から送られた時刻・温度・湿度の情報をLEDに表示する