先日は、ハードウェアの作成と目覚まし時計への組み込みを行いました。
今回はプログラムを作って、時計を完成させます。
スマホからWiFiの設定を行う
NTPから正確な時刻を取得する
マイコンにはESP32を使っているので、無線LANに接続することができます。ネットワークにつながっていれば、NTPサーバから時刻を取得して、正確な時計を表示することができます。
基本的には、以前作ったニキシー管時計と同じようなプログラムです。
このプログラムを流用することで、常に正確な時刻が表示されるプログラムが大方できました。
どうやってアクセスポイントに接続させるか
無線LANに接続するためには、アクセスポイントの SSIDと、パスワードが必要です。前回のニキシー管時計は、家で使うこと前提に、SSIDとパスワードは変更しないと仮定して、プログラムにSSIDとパスワードを直接記述していました。
しかしこの場合、この時計を誰かに渡した時に、その渡した方の家にあるアクセスポイントに接続させることができません。
誰でも使えるように、後からSSIDとパスワードを設定できる仕組みが必要になってきます。
スマホから設定できるようにする WiFiManager
そこで、見つけてきたのがWiFiManagerというライブラリです。
このライブラリは、ESP32にサーバーを構築し、スマホからそのweb画面にアクセスしてSSIDとパスワードが設定できるようになります。
使い方は超簡単です。
#include "WiFiManager.h" void setup() { ... WiFiManager wm; wm.autoConnect("NixieClock", "password"); ...
基本的にはこれだけ。
このプログラムによって、ESP32が"NixieClock"という名前のアクセスポイントになります。
スマホでそのアクセスポイントに接続すると、ログインのページが表示されます。
「アクセスポイント設定」をクリックすると、設定ページが表示されます。
このページで、ESP32から接続するアクセスポイントをクリックし、そのパスワードを設定すれば、これ以降はそのアクセスポイントにつながるようになります。
上記のページは日本語になっていますが、元々のは英語表示となっています。わかりやすいよう、ライブラリに入っている「strings_en.h」のファイルの適切な場所を日本語に書き換えて、日本語表示にしました。
プログラムを作る
以前作ったプログラムと、先ほどのWiFiManagerのプログラムを混ぜ混ぜしてプログラムを書いていきました。
ソースを載せると見にくくなってしまうので、プログラムのzipファイルをここに置いておきます。
アクセスポイントに接続を試みている時の状態
電源投入後、アクセスポイントに接続しようとします。この時は、数字がランダムに表示されるようにしました。
この時、WiFiManagerも起動しており、アクセスポイントの設定が済んでいない場合は、スマホからアクセスポイントの設定が可能です。
接続できなかったら
10分経っても、アクセスポイントに接続できなかったら、諦めて0000を点滅するようにしました。
長時間に渡ってWiFiManagerが起動していると、知らない人からもアクセスされる可能性があるので、0000点滅になったら、WiFi Managerは停止し、スマホからアクセスできないようになっています。
アクセスポイントに接続できたら
無事アクセスポイントに接続できたらば、NTPから時刻を取得し表示します。
時刻の表示と共に、ニキシー管に内蔵されている「.」を利用して、振り子のような表現も追加しました。上のGIFアニメでは、カクカクした動きですが、実際はPWMで調光した滑らかな振り子の動きが表現できています。
2020.4.18 動画を追加しました
追加終わり
スマホから設定できるNTP時計が完成しました
目覚まし時計の姿をしているけど、ベルが鳴らない、ニキシー管置き時計が完成しました。
今回はIN-14という、直立するタイプのニキシー管を使いました。このようなニキシー管の方が、真空管ぽくてかっこいいですね。2020.7.5 追加 つづきはこちら
追加終わり
コメント