16進 & バイナリ表示のNTP時計を作ってみた件。

ふと思い立ちまして、正確だけど読みにくいという自己矛盾の時計を作ってみました。

完成品と説明

世にバイナリ時計は多数あるので、バイナリだけでなく16進数(or 10進数 or 8進数)で表示できるようにしています。

short1.gif

上の画像の16進表示だと、d時2A分なので、13時42分となります。
(A=10、b=11、c=12、d=13、E=14、F=15を表します。
 例えば 2A分=16*2+10=32+10=42分、という具合です)

こちらは10進表記に切り替えている様子。
ボタンを押している間にHEX>dEC>Octと表示が切り替わるので、
いいタイミングで指を離すと設定されます。
setting.gif

マニュアル類、コード一式

今回は気合を入れてみまして、使い方マニュアルと組み立てマニュアルを作ってみました。
また、基板もユニバーサル基板ではなく、Eagleで書いてElecrowに発注、
PlatformIOのUnitTestを試したり、色々してみました。

使い方マニュアルはこちら>使い方マニュアル

組み立てマニュアルはこちら>組み立てマニュアル

コード一式はこちら>コード一式

Platform IOで自動実行できる単体テストのコードと結合テストの成績書はこちらです>テスト関連

基板が余りましたので、完成品と組み立てキットをそれぞれ少量配布しました。
ご興味ある方はお問い合わせフォームで連絡ください。
送料込み3000円でお分けします。 あと1セットだけ残ってます。

  1. SECRET: 0
    PASS: 2f7b52aacfbf6f44e13d27656ecb1f59
    こんにちは。
    この度ヤフオクで購入させていただきました。
    16進数と8進数で時刻が変わるのは面白いですね。

    ところで、下記NTPサーバを参照されてるみたいですが、これは3サーバの時刻のうちどれかを参照?
    または3サーバを全て参照して一致した数値のみ反映させているのでしょうか?

    ちなみにNTPサーバをユーザー側で変えることは可能でしょうか?なければ将来verに実装希望です

    configTime(9 * 3600L, 0, "ntp.nict.jp", "time.google.com", "ntp.jst.mfeed.ad.jp"); //NTPの設定
    if (withRTC == true && (getLocalTime(&timeinfo) == true))
    {
    updateRTC(timeinfo);

  2. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    回答遅くなってしまいすみません。
    ご購入ありがとうございます。

    NTPサーバを含め,コードをユーザ側で変更することは可能です。
    が,シリアル経由での書き込みが必要な仕様にしています。
    (esp32自体には無線経由で書き込む手段(ota)もあるのですが,
    無駄にポート開けていると脆弱性の元になるので閉じてます。)
    書き込みには左側のポートを利用し,下記のように接続してください。
    左上:GND 右上:3v3
    中左:IO0 中右:EN
    左下:TX 右下:RX

    もし,特定の設定の希望があれば,
    書き込み方法の詳細とともにgithubにUPしますので,ご連絡ください。

    以下コードについての補足です。
    正直に言います。詳細仕様が見つからないため,推測です。
    該当のコードは下記の通りです。
    サーバーは1つ以上指定すれば動作します。
    従い,サーバー1より順に接続できたところで値を返していると推測しています。

    void configTime(long gmtOffset_sec, int daylightOffset_sec, const char* server1, const char* server2, const char* server3)
    {
    tcpip_adapter_init(); // Should not hurt anything if already inited
    if(sntp_enabled()){
    sntp_stop();
    }
    sntp_setoperatingmode(SNTP_OPMODE_POLL);
    sntp_setservername(0, (char*)server1);
    sntp_setservername(1, (char*)server2);
    sntp_setservername(2, (char*)server3);
    sntp_init(); //ここの実装が見つからない。
    setTimeZone(-gmtOffset_sec, daylightOffset_sec);
    }

  3. SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    ありがとうございます。参考になりました