練習12 温湿度計を作る2 DeepSleepMode

前回、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出力を作ります。