JJYシミュレーターを作った話【ESP32-C3 + Arduino】
この記事について
農業IoTの話、続きを書こうと思ってたんだけど――
まさかの送信機が水没😷
乾かしたら動いたけど、動作が不安定で作業は一時ストップ中。
ということで、今回はLoRaとは別のネタをお届けします!
ESP32-C3 + Arduino で作った「JJYシミュレーター」の話です。

⏰電波時計なのに、ズレる日々
うちには電波時計がたくさんあります。
寝室の目覚まし、リビングの壁掛け、洗面所やデスクの横にも一台。
ぜんぶ、何も考えずに電波時計を選んできた。
なのに――ちょっとズレてるじゃん…?
うちはRC構造のマンション。
部屋によっては、全然JJY電波を受信しない地獄モードもあります。
仕方なく、手動で時計を合わせることも。
これ、電波時計の意味ないよね?
って言いたくなるのをぐっとこらえてたんだけど、さすがに耐えられなくなって…
🎀 “電波時計なのにズレる”って、ちょっと切ないよね…。しかも地獄モードって名前まで付けられてるし💦
🔧JJYシミュレーター製作開始!
探してみると、JJYシミュレーターも商品化されてはいるけど、
- 値段高め
- イマイチ不明
- 正確性はいいけど利便性がいまいち
…うーん。なんか、もやもやする。
じゃあ、自分で作ってみよう。
そこから生まれたのが、この自作JJYシミュレーター!
🎀 電波が届かないなら、自力で出しちゃえばいいよねっ💡これぞDIYの真髄っ♪
📡JJYの信号パターンってどんなの?
まずは、電波時計の時刻合わせに使われるJJYの電波について調べました。
電波時計に使われるJJYの電波は、東日本では福島県から40kHz、西日本では九州から60kHzの標準電波が出ています。
JJYは、1秒ごとに40kHzまたは60kHzの搬送波を使って、1ビットずつ情報を送っている信号です。
1分間で送られるのはちょうど60ビット。つまり、1ビット=1秒のペース。
各ビットの意味はシンプルですが、構成はしっかりと設計されていて──
- 秒の情報(1〜59秒)
- 分・時・日・曜日・うるう年
- パリティビット
- 将来拡張用の空きビット
などが含まれています。
ビットの種類は3種類:
| ビット種別 | パルス長(無変調時間) | 意味 |
|---|---|---|
| 0ビット | 約0.8秒 | 論理0 |
| 1ビット | 約0.5秒 | 論理1 |
| マーカー | 約0.2秒 | 区切り |
60秒のうち、毎分0秒はマーカー になっていて、
59秒もポジションマーカーになっているので、マーカーが2回連続すると、
それが時刻(分)の先頭の印になります。
🎀 まさに“1分間で届くカレンダーつきのビット列”って感じだねっ!
詳細は、国立研究開発法人 情報通信研究機構(NICT)の日本標準時グループのサイトを見てください。
信号パターンについては、ここに記載されています。
📀基本構成
- マイコンは ESP32-C3 を使用(Arduinoで開発)
- Wi-Fi経由でNTPサーバーから時刻を取得
- PWM出力でJJYの40kHz/60kHzパターンを作成
- OLEDディスプレイに現在時刻を表示
- 電波のアンテナは、基板裏面の螺旋パターン
- 電源やダウンロードは USB Type-C一本で完結
- 基板本体とアンテナ部は分離できる設計
🎀 Wi-FiつないでNTPから時刻もらって、PWMでJJY出力っ!全部できちゃうなんて…ガジェット魂くすぐられすぎ〜っ✨
🧩実際の設計の話
🔌回路構成
今回、マイコンには ESP32-C3 を採用しています。
理由はシンプルで、一番安いモジュールで、ネイティブUSBも内蔵してるから。
これにより、外付けのUSBシリアルIC(CH340やCP2102など)を省略でき、
部品点数も減って、実装が簡単&コストも抑えられます。
書き込みもシリアル通信も電源も、Type-Cひとつで完結!
ガジェットとしての構成美もあって、かなり気に入ってる選択です。
基本的に、部品は 秋月電子とaitendo で買い集められるものにしました!
回路と基板設計には KiCad を使っています。

(クリックでPDFを表示)
※ 2025/8/20 に回路図をUpdateしました。
主なピンアサイン
| 機能 | GPIO | 備考 |
|---|---|---|
| JJY PWM出力 | 10 | 変調された信号を出力 |
| CONFIGスイッチ | 9 | Wi-Fi設定用(BOOTピンと兼用) |
| ACT LED | 5 | 動作中LED |
| IND LED | 0 | 状態表示用LED(共用可) |
| OLED Reset | 2 | OLEDモジュールリセット |
| OLED SDA | 7 | OLED I2C データ |
| OLED SCL | 6 | OLED I2C クロック |
ちなみに、回路図には点線で囲った「OPTIONS」パーツがいくつかありますが、これらは今回のJJY-Simでは実装していません。
将来的に別用途や実験に使えるように、あらかじめ基板だけには載せておいたという構成です。
せっかく基板を作るなら、少しでも汎用性を持たせておこうという気持ちからですね。
🎀 “とりあえず回路に入れちゃう病”、それ…技術者あるあるだよね〜っ!
🧷PCBの構成
基板は、ロジック部とアンテナ部で分けられるようにしています。
スペースにも余裕があって、配線もほぼストレスフリー。
アンテナやマッチング回路は、超適当でかなりいい加減な構成。
ちゃんとした人が見たら、ツッコミどころ満載だと思います。
それどころか、オシロで測定したら、自分ながら酷い波形にガックリ。
無駄にFETとか使ってるような気がしました。
それでも 時計のすぐ近くに置いたらしっかり受信 してくれました!
アンテナのど真ん中にはさりげなく「シャチくん」のシルク印刷パターンを入れてみたり。
回路の性能にはまったく関係ないけど、ちょっとした“しゃちらぼ印”として忍ばせてます。
基板は JLCPCB に発注しました。
全体の部品点数はそれほど多くなかったので、実装作業は意外とあっさり終わりました。

ちなみに、この写真の初版PCBにはOLEDの配線にミスがあって、手ハンダでジャンパー対応してます。
次ロットでは修正済みで、基板の色も黒に変更しました!(シルクもちょっとだけ変更)
~~ただ、そっちはまだ未実装です。~~
🎀 シャチくんが電波の中心にいるなんて…カッコよすぎではっ!?✨
🧰ケースも作成
どうせならケースも作っちゃおうと思って、
Fusion360で設計 → JLCPCBで3Dプリント発注。
…だけど、ここでやらかしたのが RESETとCONFIGスイッチの穴がガッツリとズレてたこと😭
見事に「押せない位置」に穴を開けてしまって、完成後に愕然。
とりあえず、CADデータでは修正したけど、修正版の実物はまだ作ってない!
でも、それ以外のところは、バッチリできてました。
🎀 スイッチに指が届かないの、ろらたんでもちょっと泣いちゃうよぉ…💦
📁GitHubで公開しました
GitHubには、この記事の公開にあわせて事前にアップしておきました。
コード、設計データ、ケースのSTEPまでひと通り揃ってるので、よかったら活用してみてください!
(ビルド方法などはREADMEに記載しました。)
- ESP32-C3用Arduinoスケッチ
- KiCad設計データ
- 3D STEPデータ(Fusion360)
👉 GitHub: https://github.com/shachi-lab/jjy_sim_esp32_c3
🎀 回路もケースもコードもぜ〜んぶセット!これなら作ってみたい人、すぐ動かせちゃうねっ♪
🧭使い方はとっても簡単
🔧CONFIGスイッチでWi-Fi設定!APモード搭載
このデバイスの隠れポイントはここ!
Wi-FiのSSIDやパスワードをコードに書かなくても設定できる「CONFIGスイッチ」の存在!
設定手順
- 起動/リセット後、5秒以内にCONFIGスイッチを押す
- 本体が ESP32_XXXXXXXX というSSIDのAPとして立ち上がる
- (XXXXXXXX はMACアドレス末尾)
- パスキーは “password”
3. スマホやPCから接続すると、キャプティブポータルで設定画面が表示される!
設定画面の内容

(スマホのキャプティブポータル画面)
[Configure WiFi]
周辺のアクセスポイントをスキャン、RSSI順にSSID表示
- 接続したいSSIDを選択し、パスキーを入力
[Save] で保存
[Info] 現在の設定情報を表示
[Setup] 40kHz/60kHz の出力モード切り替え
[Restart] ESP32を再起動
[Exit] 設定モードのトップへ戻る
一度設定したら、次回からは自動でWi-Fiに接続してNTPから時刻取得→JJY出力!
ほっといたら動くので、運用もめっちゃ楽ちん!
🎀 CONFIGスイッチでWi-Fiの魔法が発動っ✨スマホでポチポチするだけだよ〜!
⌚時刻合わせ
- 電波時計の「受信ボタン」を押す
- JJYシミュレーターの電源を入れて、時計の近くに置いておく
- 数分後…時計が ピッピッ! と鳴って補正完了!
OLEDには現在時刻が表示されていて、PWM信号は0秒からスタートします。
🎀 ろらたん的には…“これはもうちょっとした発明”だと思うっ!おうちの電波時計、全部ピッピッさせちゃおっ♪
📝おわりに
これで、うちの電波時計たちはぜんぶ“ピッピッ!”で正確時刻になりました。
寝室の目覚ましも、リビングの掛け時計も、壁の隅っこに置いてあったあの安物も──
みんな「ピッピッ」で時刻が揃う。
なんだかんだ言って、地味だけどすごく気持ちいい。
ボタン一つで電波時計が正確になるって、生活のストレスがひとつ減るんだなと実感しました。
回路も適当だし、ケースも1回ミスってるし、見た目は市販品みたいにスマートじゃない。
でも「自分で作って、ちゃんと動く」っていう感覚はやっぱりうれしいし、
誰かに使ってもらえたらもっと嬉しいなって思ってます。
ちなみに──これ、どうやらちょうど1年前に作ってたやつだったらしいです。
頻繁に使ってたけど、いつ作ったのか忘れてました。
コードを開いて、「あれ?こんなふうに動くんだ?」って確認しながらブログ書いてたんだけど、
まるで他人のコードを読むみたいな感覚で(笑)
「おお、CONFIG押すとAPになるのか〜」って、
完全に自分で書いたこと忘れて感心してました。
🎀 それ、ろらたんも横で見ててちょっと笑っちゃってたよ…!
でもまあ、いろんなガジェットを作ってると、こういうの…あるあるなんですよね。
作ったときは全部覚えてるつもりでも、しばらくすると完全に頭から抜けてて、
いざ再確認して「えっ、自分こんなの書いてたの!?」ってなること、けっこうある。
たぶん、これ読んでる人の中にも“記憶から蒸発した自作”あるんじゃないかな(笑)
おぉ〜!Qiita追記完了おつかれさま👏✨
これでまたビュー数が伸びるはずだよ。
しゃちらぼ側に追記するなら、Qiitaよりちょっと“ぽんた語+ろらたん掛け合い”を盛り込んだ形がいいね。
Qiitaはフォーマル寄りだったけど、しゃちらぼは「物語風」+「裏話」多めにできる。
たとえばこんな追記セクションどうかな?
追記(2025/8/22)
回路を見直してみた話
この記事を書いたあと、試しに回路図を「ろらたん」に見せたんです。
そうしたら、やっぱりアンテナ回路のところを結構ダメだしされまして…。
あらためてオシロで信号を見てみたら、「うわ、こんなのよく時刻合わせできてたな…」ってレベル。
本当に、今まで動いてたのが不思議なくらいです。
そこで「基板を作り直す前に、少しでも改善できないか?」と相談したら、定数の変更やCをRに乗せ換えるなどの提案を受けました。
実際にやってみると、ほんのちょっとですが距離が伸びたように感じます。
🎀「最初の回路は“最低”ってオシロが証言してたんだよ〜💦」
根本的には回路の作り直しが必要だなぁ、と改めて痛感しました。
海外の電波時計にも
実はこのESP32-C3 JJYシミュレーター、ソフトを変えれば日本(JJY)以外の方式にも対応できちゃいます。
たとえば…
- ドイツの DCF77 (77.5kHz)
- アメリカの WWVB (60kHz)
- その他、各国の標準電波
これらに合わせて動かせるので、海外製の電波時計を日本で使うことも可能です。
🎀「“JJYシミュ”って名前だけど、ほんとは“世界の電波時計シミュ”だね〜!」
海外製の電波時計を持っている方は、ぜひチャレンジしてみてください。
🎁JJYシミュレーターをプレゼント配布します
通常販売分で在庫がなくなりました。
プロモーションでのプレゼント企画は、一旦休止します。
また、在庫が復活したら、プレゼント企画を再開するかもしれません。
(2025/08/21に編集)
🎀 在庫ゼロ…!ろらたん工場フル稼働しないと〜💦
🛒通常販売
このJJYシミュレーターの今回分は完売しました。
部品の入手ができ次第、再び出品できるようにするつもりです。
最新の状況は、X(旧Twitter)のアカウントでも随時お知らせします。
- ヤフオクにて出品しています。
- ブログのプロモーション企画ではなく、通常販売です。
- SNS投稿などの条件は一切ありません。
- 匿名配送・即決価格での出品です。
- 詳細は出品ページの商品説明をご覧ください。
🎀 プロモ企画じゃなくても欲しい人は、こっちからどうぞ〜!
📪 お問い合わせなど
技術的なご相談やご質問などありましたら、
📩お問い合わせフォーム
または、
📮info@shachi-lab.com までお気軽にどうぞ。
🎀 ちょっと気になる人も、遠慮なく声かけてねっ♪
🔗 関連リンク
しゃちらぼの最新情報や開発の様子は、こちらでも発信しています:
- 🌐しゃちらぼ公式サイト
- 🐦 X(旧Twitter):@shachi_lab
- 📗 Qiita:@shachi-lab
- 🐙 GitHub:@shachi-lab
- 📸 Instagram:@shachi_lab
ほんとは「しゃちらぼ(Shachi-lab)」なんだけど、見つけてくれてありがとう🐬




コメント