消費電力の多さが話題になるESP8266だが、Deep-Sleepを使えば、それを抑えることが可能だ。
回路上でやることは、GPIO16をRSTと接続すること。
これで、Deep-Sleepからの復帰が可能になる。
Deep-Sleepへの移行はいとも簡単だ。
SDK Functionsの呼び方は、すでに「ESP8266モジュールを試す その6 Arduino IDE – CallSDKFunctions & CheckFlashConfig –」でやっているので、Arduino IDE の File > Examples > ESP8266 > CallSDKFunctions を参考にするだけでいい。
具体的には、
1 2 3 |
extern "C" { #include "user_interface.h" } |
を追加して、
Deep-Sleepに入りたいところに、
1 2 |
system_deep_sleep(10000000); delay(1000); |
と書くだけだ。
system_deep_sleep();
のカッコの内の数字は眠ってて欲しい時間をマイクロ秒単位で書く。
上の例では10秒間Deep-Sleepする。
その後の
delay(1000);
は
// a short delay to keep in loop while Deep Sleep is being implemented.
と説明されている。
実際に電流を計って、ちゃんとDeep-Sleepしているのか確認してみた。
NTPCliantを普通に実行していると75~80mAというところ。
Deep-Sleepに入ると、このレンジでは測定できない値まで下がる。
機能している、というか、ちゃんと寝てくれるようだ。
Deep-Sleep中にレンジを20μAにして計測すると17μA程度だった。
この例で、通常駆動が7秒、53秒間Deep-Sleepさせて、1分間隔で時刻を取得し続けるとして、750mAhの単4ニッケル水素電池でどれだけ持つか計算してみる。
750mAh = 750 x 60 x 60 mAsec = 2700000 mAsec
1回の取得が
80mA x 7sec + 0.02mA x 53sec = 561.06 mAsec
なので、4812回取得でき、これは約3.3日に相当する。
もっとも、このμAオーダーの測定値が信用できるならだが、まあ、少ないことには違いあるまい。
ESP8266関連記事一覧へ