はじめに
WiFiモジュールとして有名なESP32-WROOM-32を、WiFiは使わずに単なる高性能CPUとして使うことがあったので、その際に見つけたことを書いておきます。
省電力化の方法
WiFiは不要な案件であったので、WiFiをオフにします。
WiFi.disconnect(true);
更に電流を抑えるため、ライトスリープを併用することにしました。
スリープから目覚めるのには、タイマーを使います。
esp_sleep_enable_timer_wakeup(50 * 1000UL);
としておけば、50msごとに起動するはずなのですが、これでは目覚めません。
何故かWiFiを接続してconfigTzTimeで時刻合わせをすれば大丈夫なのですが、最初からWiFiをオフにすると目覚めなくなります。
色々試したのですが、
sntp_set_system_time(1688564256, 0);
のように、現時刻を設定すると目覚めるようになりました。
この時、1688564256の値を0とか1ではなぜだか目覚めません。
#include <WiFi.h>
int keyState = 1;
void setup()
{
Serial.begin(115200);
while (!Serial);
pinMode(GPIO_NUM_0, INPUT_PULLUP);
// WiFi をオフさせる
WiFi.disconnect(true);
sntp_set_system_time(1688564256, 0);
// 50 ms のタイマー設定
esp_sleep_enable_timer_wakeup(50 * 1000UL);
}
void loop()
{
int key = digitalRead(0);
if (key == 0 && keyState != 0)
Serial.println("Press");
keyState = key;
Serial.flush();
esp_light_sleep_start();
}
これで、loop()の頭の部分に必要な処理を追加すれば、50ms間隔で処理をした後ライトスリープして消費電流が格段に減ります。
ライトスリープなので、ディープスリープのように小難しいことをしなくとも気楽に使えます。
通常の処理が軽めの案件では使えると思います。
消費電流計測値
テスターで計った消費電流です。ESP-WROOM-32E CPU単体で計測しています。
(1)WiFiに接続した場合
66~74mA
(2)WiFiをオフした場合
55.3mA
(3)上記サンプルプログラム(インターバル50m秒)の場合
2.8mA
インターバルを長くしても消費電流は減りませんでした。