「初回の眠りだけ」やたらと早起きなESP8266(D1 Mini)のDeepSleep

Arduino/ESP32D1 Mini,Deep-Sleep,ESP8266,ディープスリープ,時計

ちょっとESP8266のディープスリープまわりで検証していくうちに、変な事に気が付いたのでメモ。

今回もBing AI Chat様にアイキャッチ画像を描いていただきました。

esp8266_deepsleep_timedrift01
イメージ作成:Bing
イメージ生成モデル:DALL-E
イメージ生成ツール:graphic_art
イメージの著作権はBingに帰属しますので、無断で改変や再配布をしないでください。

オーダーは、お寝坊さんなESP8266と早起きなESP8266さん。

うん、イイっすね・・・

1.全体的にちょっと早起き

これはどうやらそういうものらしい。

クリスタル等も内蔵していないので動作クロックに引き摺られているらしいです。

アプリケーションの内容や割り込みの頻度によってもだいぶ変わってくるらしく、全体としてちょっと時計の針が進むのが早いみたい。

まぁこれはハイスペックなPCでも似たようなもので、それはそれ。

しかし、DeepSleep中はいただけない。

殆ど寝ているのだから、そんな時くらいは時間に正確であってほしい。

というわけで調べてみると、大体2%くらい早く目覚めるという見解と、0.6%くらい早起きする見解と様々。

■ESP32で3時間DeepSleepしたら実際にどのくらい眠るのか調べた

こちらの記事では-0.6%という見解。

そこで1時間sleepで実際時間とSleep指定時間の差を検証してみたところ、2%はやりすぎ。

どんどんお寝坊さんになっていく。

0.6%前後が大体正しいっぽい。

2.初回のディープスリープだけはやたらと早起き

何故か手元のD1 Miniは、初回のDeepSleepだけやたらと早起きする。

どのくらいかというと、1時間のDeepSleepで2分くらい早起きする。

で、色々調べたのだけど、やっぱ初回WIFIがOnのままDeepSleepに突入すると、やたらと早起きするという結論に。

そしてDeepSleep時のWakeUpオプション、「RF_DISABLED」を指定して起床してからの再DeepSleep時には早起きせず、-0.6%前後を堅実にキープするという結果に。

1日2日程度調べた感触値なんだけどね。

そんなわけで初回DeepSleepは「RF_DISABLED」を指定して5秒くらいで起こす、次からが本DeepSleepってな感じでやると、-0.6%計算なら丸一日経過しても10秒~20秒くらいの範囲に収まってくれた。

あとは、それから周辺温度でやたらと時間が変わる。

昼と夜とで数秒変わる。

まぁなんか、内部クロックはあんまりアテに出来ないって結論に。

気になる人はWIFI繋いでNTPで時計合わせた方が精神衛生上よろしい。

または外部RTCを接続した方がよっぽどいい。

しかし、例えば私の今の用途、植物栽培用LEDを点灯する時間なんかを計算させるなら、だいぶアバウトでいい。

それでも一日あたり10秒少々にまとまったので、これでいいや感。

それよりも省電力ダヨゥってな価値観。

さて、、

このままだとブレッドボードもあかないし、ユニバーサル基板にでも据え付けましょうかね・・・