ESP32[7]Deep Sleep

ESPの消費電力は20mAから30mA程度のようです。車載に使うとなると、許せる範囲とは思いますが、Deep Sleep機能を使うと、10mA程度まで下げることができます。

Deep sleepはまず、眠らすことと起こすことが必要です。Deep Sleepから起きると、再度 setup()から動きます。なので、LED点灯のアプリケーションの場合は、一瞬点灯したりします。これが嫌な場合は、ハードウエアを工夫したりするか、Deep Sleepはあきらめた方がいいです。ESP32にはソフトスリープというものもあるようですが、あまり効果がないような気がしてます。クロックを落としたりすると消費電力が下がるので、やってみる価値はあります。

眠らすためには、

どんな起し方をするかを設定したのちに、

esp_deep_sleep_start();

です。

#include "esp_deep_sleep.h" を追加します。

起す方法は以下の5種類あります。

タイマー
タッチセンサー
EXT0(RTC_IO)
EXT1(RTC_CNTL)
ULP

複数のGPIOピンで起したい場合は、EXT1を使います。EXT0はGPIO一つのピンでしか起こせません。タイマーは時間で起きます。まあ、この3つくらいわかればよいのではないでしょうか。

タイマーはちょっと起きて確認してまた寝るという使われ方で結構使うかもしれませんね。

// 1000000us = 1sのタイマー設定
esp_sleep_enable_timer_wakeup(1000000);

esp_deep_sleep_start();

EXT0は

pinMode(GPIO_NUM_XX, INPUT_PULLUP);   // ピンを入力に設定
esp_sleep_enable_ext0_wakeup(GPIO_NUM_XX, LOW); // どんな起し方をするか設定

esp_deep_sleep_start();

EXT1は結構複雑です。まず起こすことのできるピンが決まっています。32、33、34、35、36、39は使えます。(確認済)31から39までは使えると思った。

起し方は以下です。

esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK, ESP_EXT1_WAKEUP_ANY_HIGHかESP_EXT1_WAKEUP_ALL_LOW)が選べる;

esp_deep_sleep_start();

BUTTON_PIN_BITMASの作り方は書くIOを2のべき乗して、それを全部大して、16進に直したものです。

GPIO_NUM_32        2^32  
GPIO_NUM_34        2^34
GPIO_NUM_35        2^35
GPIO_NUM_36    2^36
GPIO_NUM_39        2^39
GPIO_NUM_33               2~33

2^32  4294967296 
2^34  17179869184 
2^35  34359738368 
2^36  68719476736 
2^39  549755813888 
2^33  8589934592 
Total  682899800064 HEX:0000009F00000000 → BUTTON_PIN_BITMASK