前回、SHT31で温湿度を連続測定し、シリアルモニタに表示させました。
今回は、Deep Sleep機能を使って、間欠測定したいと思います。
Deep Sleep Mode
ESP32を長時間電池で駆動するには、Deep Sleepが必要です。
Deep Sleep中の消費電流は0.15mA、通信していなくても20-30mAも消費するのでお話になりません。Deep Sleepを使えば1日あたりの待機電流量は0.15mA ×24H=3.6mAH、単三のエネループが1800mA(新品)なので、十分使い物になりそうです。
Mode | 動作 | 電流mA |
---|---|---|
RF Active | Wifi | max240 |
ModemSleep | CPU 240MHz | 30-68 |
Light Sleep | 0.8 | |
Deep Sleep | ULP Co.processor | 0.15 |
ソース
↓を参考にしました。
http://wakwak-koba.hatenadiary.jp/entry/20170216/p1
15分(=900秒)おきに温湿度を測定するようにしました。
ヘッダ
とりあえず睡眠時間を900秒にします。
#include "esp_deep_sleep.h" #define WKup 900 //- sec
setup()
おまじない4行を追加します。
void setup() {
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);
}
loop()
起きて温湿度を測定して眠る、を繰り返します。
void loop(){ read_SHT31(); DeepSleep(); delay(1000); }
関数 DeepSleep()
void DeepSleep() { esp_deep_sleep_enable_timer_wakeup(WKup * 1000 * 1000); esp_deep_sleep_start(); delay(1000); }
続く
次回は、LCD出力を作ります。