ESP-WROOM-02のDeep-sleepはどれだけ寝ていられるのか

ESP-WROOM-02をバッテリで駆動する時に使われるのがDeep-sleepモードです。マイコン部分の電源を切ってしまうので通信はできませんし、Sleep解除時はプログラムの最初から実行されるため変数の値を保存しておきたい場合はそれなりの工夫が必要ですが、消費電流はかなり小さくなります。

Deep-sleepモードはマイクロ秒単位でスリープ時間を指定します。なので1秒なら1×1000(ms)×1000(us)で100000を設定することになります。あるプロジェクトで6時間スリープさせようとしたら5分でスリープが終わって再起動してしまいました。いったいどのくらいの時間までスリープできるのでしょうか。

こんな時、例えば「esp deepsleep 時間」といったキーワードで検索してみてもいいのですが、検索結果を一つ一つ見て判断することを考えるとデータシートやソースコードに当たってしまった方が早く解決することが多いです。今回はGitHubのesp8266/Arduinoリポジトリを当たることにしました。

リポジトリ内を検索すると、cores/esp8266/Esp.h
void deepSleep(uint32_t time_us, RFMode mode = RF_DEFAULT);
という記述があるのがわかりました。つまりスリープ時間は符号なしの32bit整数で設定することになっているわけです。

符号なし32bit整数の最大値は4294967295(2^32-1)ですから、
4294967295/1000/1000/60=71.58278825
になるので、71.5分までスリープできる、というのが正解のようです。これを超える時間スリープさせたい場合は、例えば1時間のDeep-sleepを繰り返すようなプログラムにするとよさそうですね。

なお、後から検索してESP8266 Low Power Solutionsという資料があることもわかりました。この資料にはDeep-sleepモード以外のスリープも説明されているのでスリープを活用したい方におすすめです。

Pocket