ESP32 Deep Sleep のテスト
ESP8266 に比べて Bluetooth など様々なペリフェラルに対応している ESP32 ですが、そーいう表面的なところのほか、実は Sleep と Wakeup の付近も極めて充実しています。
RTC Slow Memory と呼ばれる遅いけど電気を食わないメモリ空間があって、そこにプログラムを配置しておくと Deep Sleep からの復帰時にリセットでなく、所定の処理を走らせることができたり・・・そんな風ぽい感じです。
そーいう深いゾーンはおいおいとして、とりあえず Deep Sleep がちゃんと作動するのか試してみます。
#include "esp_deep_sleep.h" void setup() { // put your setup code here, to run once: Serial.begin(115200, SERIAL_8N1); Serial.println("Start"); esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF); esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_OFF); esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_OFF); esp_deep_sleep_pd_config(ESP_PD_DOMAIN_MAX, ESP_PD_OPTION_OFF); } void loop() { // put your main code here, to run repeatedly: Serial.println("good night!"); delay(500); esp_deep_sleep_start(); delay(500); Serial.println("now sleeping"); // ここは実行されない }
Deep Sleep 時の挙動を決める esp_deep_sleep_pd_config という関数があるものの、具体的にどう使うべきなのか資料が見つけられてないんですけど、引数に使える選択肢の全てを ESP_PD_OPTION_OFF にしてみましたが。
手持ちテスターにて 27μA。
2980円で買った安物テスターなので、μAオーダーの測定が正しく行えているのか疑問は残りますが、公式には 5μA まで落とせるらしいので頑張りが足りないですかねー
テスターの計測が概ね合ってるとしたら「Deep-sleep mode ULP sensor-monitored pattern」という状態か?
esp_deep_sleep_pd_config で RTC Memories も全て OFF にさせたつもりなんですが、何が足りないんでしょ
一桁μA に出来た方おられたら、是非ともコメントくださーい!
(追記)
TrueRMS なテスター を使って再測定してみました。
3.3V時 | 3.0V時 |
2.7V時 | 2.5V時 | 2.2V時 |
2980円のテスターで27μAを測定したときは約3Vでしたので、ほとんど誤差なかったみたいです。
(追記)2017/02/19
keynee さんの貴重なコメントで、無事に Hibernation mode に移行させることに成功しました。
消費電流は僅か 3.8〜4.0μA という次元です。