ESP32の(ディープ)スリープモードを使い方と、ざっくりですが消費電流も調べてみました。
概要
スリープモード(ディープスリープ)からの復帰にはいくつか種類があるようで、タイマー、タッチセンサーやピン変化などから復帰できるようです。今回はタイマー、指定した時間が経過したらスリープから復帰するというものを使ってみます。
ディープスリープからの復帰後はプログラムを最初から実行します。ライトスリープというモードもあるようで、こちらはスリープに入ったところからその続きで復帰する仕様のようです。
今回は、ArduinoIDEのESP32ボードにあるスケッチ例のそのままを使ってスリープモードのソース(使い方)を簡単に解説です。ついでにその時の消費電流も測定してスリープがちゃんと効いているかも確認してみました。
▼サンプルスケッチの場所▼
▲ESP32のボードがインストールされていれば、ここにサンプルソースがあります。今回は、タイマーによる復帰を行うため、TimerWakeUpを使用。
順にスケッチの中身を見ながらスリープモードの使い方を見ていきます。
スリープモードの使い方
サンプルスケッチにはコメントとか他、いろいろ記述があって小難しそうですが、スリープモードに関係のありそうなところだけ見ると非常に簡単です。
esp_sleep_enable_timer_wakeup(5 * 1000000); esp_deep_sleep_start();
▲1行目でスリープ時間を設定。引数はμ秒。2行目でスリープに入ります。設定した時間が経過したらスリープから復帰してまたプログラムを最初から実行するといった具合です。スリープモードを使うスケッチはこれだけ。非常に簡単です。
void setup() { //処理を記述// esp_sleep_enable_timer_wakeup(5 * 1000000); //スリープ時間を5秒に設定 esp_deep_sleep_start(); //スリープモードへ移行 //ここに処理を記述しても実行されない }
▲スリープ復帰後はプログラムを最初から実行します。なのでスリープモードに入る前に処理を記述しておけば、処理 ⇒ スリープ ⇒ 処理 ⇒といった具合で復帰と実行を繰り返します。当然、esp_deep_sleep_start();
以降に処理を記述してもその処理は実行されません。
消費電流
起動中とスリープ中の消費電流を調べてみました。
▼ソース▼
void setup() { delay(1000); esp_sleep_enable_timer_wakeup(5 * 1000000); //スリープ時間を5秒に設定 esp_deep_sleep_start(); //スリープモードへ移行 Serial.println("これは実行されない") }
計測に使ったソースです。プログラム起動後、1秒待機したら、5秒間のスリープモードへ移行。スリープ復帰後、1待機、、、と繰り返しているだけのスケッチです。
▼実行結果(消費電流)▼
起動中はおよそ40mA。スリープ中はおよそ2mAの消費電流です。きちんとスリープ、復帰を繰り返してます。スリープ中の消費電流が大きいですが、ボードを使っているためESP32がスリープ中でも他のICが消費しているせいかと思います。そもそもかなり雑な計測をしているので精度も良くないと思います。
使い方も簡単ですし、プログラムなど工夫すれば面白い使い方できそうです。
コメント