ESP32を使ってオシロの画面にアナログ時計を表示
1月2日の記事にオシロの画面に 2021 正月 と表示させるプログラムを掲載しました。その記事の最後に、ESP32はこういうことをするのに向いているので、アナログ時計を表示させることが出来るのでは?ということを書きました。
これを実際にやってみようと思ったのですが、同じことを既に誰かがやっているかも知れません。ということで、ネットを検索してみました。調べてみると国内には見つからなかったのですが、YouTubeを検索するとESP32でオシロにアナログ時計を書かせている動画がいくつか出て来ました。これなら自分で作らないでも良いので楽ちん、ということで試してみました。
◆参考にしたサイト
YouTubeから辿ってたどり着いた、hackster.io の下記の記事を参考にしました。
Extremely Simple Oscilloscope Clock with ESP32
この記事に掲載されているファイルの ESP32_OscilloscopeClock_v1.0.rar を解凍して出て来るプログラムを実行することで、めでたく時計が表示されました。何も修正しなくても一発で時計が表示されたのはちょっと驚きでした。
◆カストマイズ
そんなことで、やりたかったことが簡単に出来てしまったので拍子抜けなのですが、プログラムの中身を見てみました。
NTPサーバーから時刻を取得することも出来るようになっていますが、時刻合わせは起動時の1回だけ。その後はソフトウエアタイマーの値を使って1秒をカウントしていました。あと、デバッグ用にEXCELに時計の座標データーを流す機能が付いていましたが、とりあえずこの機能は不要です。
NTPサーバーから時刻を取得するのはESP32らしくて良いのですが、時計として使う、というか人に見せるには手動で時刻合を合わせる機能が欲しいところです。あと、EXCEL用にデーターを吐く機能はいらない、というかコードが見辛くなるので削除したくなりました。
ということでプログラムを手直ししました。
ここまで文字ばかり続いたので、先にカストマイズ後の画面を入れておきます。

以下、この画面を表示する仕掛けの説明です。
◆プログラムコード (program code)
・20210117_ESP32OsilloClockRp_v200.ino 拡張子を .txt から .ino に変更してください (change extension .txt to .ino)
・DataTable_RP.h 拡張子を .txt から .h に変更し、上記のプログラムと同じフォルダーに置いてください。 (change extension .txt to .h. save at the same folder as .ino)
Arduino IDEの画面は以下のようになるはずです。

プログラムの変更点としては、押しボタンによる時刻合わせ機能を付けました。時刻合わせモードに入ると秒針を0秒の位置に移動します。その状態でボタン操作で分針が移動し、長押しすると高速移動します。ゼロ秒のタイミングでモードスイッチを戻すことで時計と同期します。また、秒針のデザインを少し変えています。
◆回路図 (クリックで別窓に拡大表示)

時刻合わせのために、モード切り替えスイッチと針の正逆の回転スイッチを追加しています。
◆ハード外観


◆時計の描画波形

オシロの普通のモード(時間軸モード)で見るとこういう波形になっていて、約8.5ms周期で繰り返しています。ます。これをX-Yモードで表示することでアナログ時計になります。
◆動画
◆まとめ
すばらしい記事を公開してくださった maurohh さん、Mauro Pintus さんに感謝します。
スイッチで簡単に時刻合わせが出来るので、イベント会場など WiFiが無い場所でも使えて便利だと思います。
このプログラムではオリジナルの通りに時間をソフトでカウント(millisの値で同期)しています。しかしどうせやるならタイマー割り込みで時刻同期するようにしたいところです。実はちょっとやって見たのですが、マルチタスクで動いているのでセマフォを使った排他制御が必要になってちょっと厄介でした。そんなことで、そこは別の記事で取り上げてみたいと思います。
【2022/4/12追記】
このプログラムのオリジナルのコードは下記で開発されたものです。
http://www.dutchtronix.com/ScopeClock.htm
これYoutubの動画のコメントでやんわりと指摘されたので追記しておきます。
hackster.io の記事を見てこれを作り出典も明記していますが、さらに元があったということでした。
【2023/2/24追記】
描画の向きを指定出来るようにしました。
プログラム:20230224_ESP32OsilloClockRp_v250 .ino
150,151行にある下記のコメントを外すとその軸を描画する向きが反転します。
// x = 256 - x; // X軸を反転させたい場合はコメントアウトを外す(2023/02/24追加)
// y = 256 - y; // Y軸を反転させたい場合はコメントアウトを外す( )
・関連ツイッター
以前ブログに書いたオシロの画面にアナログ時計を表示するプログラム。オシロによっては反転して表示されるようなので、描画方向をコメントアウトで指定出来るように修正した。https://t.co/REaKe6WQVk
— ラジオペンチ (@radiopench1) February 24, 2023
動画は4種類の表示例 pic.twitter.com/pyEOdJOBjw
- 関連記事
-
- ESP32のタイマー割り込みの精度、応答時間
- ESP32のタイマー割り込みプログラム
- ESP32を使ってオシロの画面にアナログ時計を表示
- ESP32を使ったオシロは開発中止
- ESP32のアナログ入力回路の改良、AC入力とまとめ