JJY-SIMをグローバル対応へ!タイムゾーン&DST対応にしてみた

JJY-SIMを手に微笑むろらたん。 タイムゾーンとDST(夏時間)対応で、世界対応版になったJJY-SIMを紹介している。 ESP32

JJY-SIMをグローバル対応へ!タイムゾーン&DST対応にしてみた

この記事について

今回は JJY-SIMのタイムゾーンとDST(夏時間)対応 の話です。
ちょっとした実験から始まったんですが、
最終的には「世界で使える日本の電波時計シミュレータ」になりました。

ろらたんとタイムゾーンの画像

🎀 今回は、JJY-SIMを“世界対応版”に進化させたお話だよ🌎


🌍 きっかけは、ろらたんとの雑談から

JJY-SIM Rev.2 は、ひとまずこれで完成版かなあって思っていました。

ある日、ろらたんと話していたら、
🎀「英語圏の人も、これ絶対興味持つと思うよ!」
って言われたんです。

確かにGitHubは世界中の人が見てるし、
日本の技術を英語で発信するのは悪くないな、と思って
READMEを英語化してみたんですよ。

そうしたらふと気づきました。
日本の電波時計を海外で使いたい人、案外多いんじゃない?って。
お土産で買ったり貰った人や、海外在住の日本人とかね。

🎀 電波拾えない → ずっとずれる → モヤっとする…っていうやつ。


✈️ 台湾で起きた“時刻ズレ事件”

実際に、僕が台湾に出張したときの話。
空港で現地時間に合わせたのに、
翌朝起きたら時計が勝手に日本時間に戻ってたんです😂

原因は単純。
九州にある日本の標準電波(JJY)を受信して自動補正されてしまったんです。
台湾は九州に近いので、JJYが受信できちゃうんですね。
つまり「正確すぎてズレる」──なんとも皮肉な話です。

🎀 正確なのに困るって、なんか可愛いミスだよね💡


🌞 DSTビットにちょっと感動した話

DST(Daylight Saving Time)は、
夏のあいだだけ時計の針を1時間進めて、
日中の明るい時間を有効に使うための制度です。

欧米では広く導入されていて、
例えばアメリカやヨーロッパでは春に1時間進め、秋に1時間戻します。
一方で日本では1950年代に一度試験的に導入されたものの、
定着しないまま廃止されました。

現在の日本ではDST(夏時間)は導入されていないのですが、
JJYのフォーマットにはちゃんと SU1(切替予告)SU2(実施中) のビットが定義されています。
国内運用では常に0のままなんだけど、
仕様上は「いつでも夏時間を実装できる」ように準備されてるはずです。

そして市販の電波時計の多くは、
そのビットをちゃんと解析して、
“DST表示”を出せるようになっているようです。

ちょっと、実験してみたところ、
手元の電波時計でしっかりと「DST」が表示されました。

DSTが表示された電波時計

🎀 隠れキャラみたいで、ちょっと感動するよね🥹


⚙️ JJY-SIMの実装

今回のアップデートでは、
タイムゾーン(UTC±)とDSTフラグ を設定できるようにしました。

内部では configTime() を使っていますが、
ESP-IDFのこの関数、実はDSTを自動で処理してくれません。
そこで、DSTを“手動設定”できるようにして、
タイムゾーンのオフセットも、ユーザーが自由に指定できるようにしています。

OLEDの表示には
UTC+9.0 のように現在のオフセットを表示し、
DSTが有効なときは が点灯します。
日本国内で使うことは無いと思いますが…

DSTが表示されたOLED
自分用の特別版で2色タイプのOLEDになっています。

🎀 この“*”が点くと、ちょっとテンション上がるんだよね🌞


💡 設定ページの再構築でハマった話

JJY-SIM では、WiFiやバンド、タイムゾーン、DST の設定を
キャプティブポータルの機能を使ってスマホからできるようにしていて、
この部分には、WiFiManager というライブラリを使用しています。

WiFiManager では、「Setup」ページで各種設定をするようになっているのですが、
このライブラリには、そのページのフォームで新しく設定したパラメータを
最初に登録したフォームに反映させて 動的に書き換える仕組みがない んです。

addParameter() を使うと、どんどんページが後ろに追加されるだけ。

最初はライブラリを改造して clearParameter() という
設定ページを一度クリアして再構築できる 関数を追加して、
ページを再構築するようなコードにしました。
実際、これで設定フォームが上手いこと動的に表示されるようになりました。

でも、翌日に気が付いたんです。
このクラスのインスタンスって、グローバルの静的変数だよね?
ってことは、その中身を再初期化するだけで良いじゃん!

せっかく追加した clearParameter() を使わないで、
インスタンスを再初期化するだけのコードにしました。
結果的には、これだけでページを動的に表示できるようになり、
タイムゾーン変更がスムーズに反映されるようになりました。
なんだか遠回りしちゃいました。

🎀 でも、こうやってハマることで、ライブラリの中身まで理解が深まるんだよね✨


🔀 WiFiManager本家にPR!

結局、clearParameter() 関数は使われることはなくなったのですが
せっかく作ったのにそのままっていうのも勿体ないし、
この機能が欲しいって思う人がいるかもしれないので、
思い切って WiFiManager本家にPRを出してみました! 🎉

採用されるかはわかりませんが、
本家にマージされたら世界中のESPユーザーが使えるようになります😊

もちろん、自分のGitHubにはそのまま置いてあります。

🎀 AIイラストだけじゃなく、ちゃんとコードも書いてるんだよって証明になったかもね(笑)


☕ おわりに

今回のアップデートで、JJY-SIMはさらに国際対応になりました。
日本の電波時計を海外でも動かせるようになり、
DST表示もちゃんと再現。

ハードもソフトもGitHubで公開しているので、
世界中の人が自由に作って試せます。
もし海外の誰かがこのボードを組み立てて、
OLEDに “UTC+X.Y*” が光ったら──
それを想像するだけでちょっと嬉しいですね🌍✨

🎀 技術が国境を越えて動く瞬間、それが一番のご褒美だと思う💡


📪 お問い合わせなど

技術的なご相談やご質問などありましたら、
📩お問い合わせフォーム  
または、
📮info@shachi-lab.com までお気軽にどうぞ。

🎀 コメントでもX(旧Twitter)でも気軽に話しかけてね〜✨


🔗 関連リンク

しゃちらぼの最新情報や開発の様子は、こちらでも発信しています:

💬「シャチラボ」で検索してきた方も大歓迎!
ほんとは「しゃちらぼ(Shachi-lab)」なんだけど、見つけてくれてありがとう🐬

コメント

タイトルとURLをコピーしました