ESP32 (M5Stick-C) で電波時計を合わせよう

ふと気がついたら自宅の電波時計がかなり進んでいました。そこで、ESP32 (M5Stick-C)を使って擬似的に微弱なJJYの標準電波を発信するデバイスを作りました。

M5StickC


基本的には下記のコードをベースにしたものですが、ESP32のArduinoライブラリはNTP同期機能を含んでいるので、より簡単になっています。

neocat.hatenablog.com


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と電波時計を密着させれば受信できてしまいました…。バッテリーでも動作するし、なんともお手軽。

f:id:NeoCat:20200724072513j:plain


M5Stick-C自体にも日時を表示しています。これだけですでにNTP時計になっていますが,まあ。。