ふと気がついたら自宅の電波時計がかなり進んでいました。そこで、ESP32 (M5Stick-C)を使って擬似的に微弱なJJYの標準電波を発信するデバイスを作りました。
基本的には下記のコードをベースにしたものですが、ESP32のArduinoライブラリはNTP同期機能を含んでいるので、より簡単になっています。
Arduino IDEでESP32を使用するためのセットアップ手順は、下記サイトなどを参考にしてください。
esp32_setup – スイッチサイエンス
さて、JJYは40kHzまたは60kHzの信号ですが、これはLEDCをGPIOにアタッチし、 ledcWriteTone() で出力できます。
#define GPIO_PIN 10 /* JJY擬似信号を出力するピン. 10は内蔵の赤色LED */ #define LEDC_BASE_FREQ 60000.0 /* JJY擬似信号の周波数 */ #define LEDC_CHANNEL_0 0 // 出力ON pinMode(GPIO_PIN, OUTPUT); ledcAttachPin(GPIO_PIN, LEDC_CHANNEL_0); ledcWriteTone(LEDC_CHANNEL_0, LEDC_BASE_FREQ); // 出力OFF ledcDetachPin(GPIO_PIN); pinMode(GPIO_PIN, INPUT); /* ハイインピーダンスにする場合 */
簡単ですね。あとは、JJYの信号パターンに従って、ON/OFFさせればOK。
完成版のコードは本記事の末尾にあります。
ハードウェアとしては上記記事のArduino同様、指定したピンに適当な電線をつなぎ、適当な抵抗と、おまけに出力が分かりやすいようLEDでもつければ完成です。
が、私の電波時計の場合、なんと内蔵LEDを点滅させるだけでも、M5Stick-Cと電波時計を密着させれば受信できてしまいました…。バッテリーでも動作するし、なんともお手軽。
M5Stick-C自体にも日時を表示しています。これだけですでにNTP時計になっていますが,まあ。。