ESP32のRTCモジュールは、DeepSleepを実行しても動き続け、復帰したときに正しく時間をカウントしている筈なのだが、実際に実行してみるとどうやらタイムゾーンの設定がリセットされているようだ。
テスト用スケッチ
テストのために次のスケッチを実行する
実行結果は次の通りで、パワーオンリセット直後は正しくNTPによるRTCの設定ができているものの、DeepSleepReset後のRTCの値は、ちょうど9時間ズレている。つまり、RTCタイマーだけは正しく動作しているが、タイムゾーンの設定だけはDeepSleepによりリセットされてしまう。
対策
対策としては3つ
1:DeepSleep復帰後にタイムゾーンだけ再設定する
2:RTCの設定を最初からGMTではなくJSTで設定する
3:DeepSleep復帰ごとに毎回NTPの設定をする
このうち3については、DeepSleepの周期を10秒のように短く設定した場合、毎回WiFi接続するため電池の負担が増え、またNTPサーバにも負担をかけてしまうのでやらない。
DeepSleep復帰後にタイムゾーンだけ再設定する
スケッチは次の通りで、
setTimeZone()関数を追加し、DeepSleep復帰後にだけ呼び出している
0 件のコメント:
コメントを投稿