ふと思い立ちまして、正確だけど読みにくいという自己矛盾の時計を作ってみました。
完成品と説明
世にバイナリ時計は多数あるので、バイナリだけでなく16進数(or 10進数 or 8進数)で表示できるようにしています。

上の画像の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と表示が切り替わるので、
いいタイミングで指を離すと設定されます。
マニュアル類、コード一式
今回は気合を入れてみまして、使い方マニュアルと組み立てマニュアルを作ってみました。
また、基板もユニバーサル基板ではなく、Eagleで書いてElecrowに発注、
PlatformIOのUnitTestを試したり、色々してみました。
使い方マニュアルはこちら>使い方マニュアル
組み立てマニュアルはこちら>組み立てマニュアル
コード一式はこちら>コード一式
Platform IOで自動実行できる単体テストのコードと結合テストの成績書はこちらです>テスト関連
基板が余りましたので、完成品と組み立てキットをそれぞれ少量配布しました。
ご興味ある方はお問い合わせフォームで連絡ください。
送料込み3000円でお分けします。 あと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);
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);
}
SECRET: 0
PASS: 74be16979710d4c4e7c6647856088456
ありがとうございます。参考になりました