ESP-WROOM-32のDeep Sleep Mode
小型マイコンESP-WROOM-32(以下ESP32と略します)の動作を勉強しています。ESP32には、一定時間だけマイコンのほとんどの回路の電源をオフにして(時間管理用の小さな回路だけをオンにしたままにして)消費電力を削減するDeep Sleep Modeがあります。秋月電子のESP-WROOM-32 Development Boardを購入して、雑誌の特集号をみながら、その動作を試してみました。Arduinoスケッチを利用しました。
簡易的にUSBタイプの電圧・電流計を接続しましたが、Deep Sleep Modeに入ると、この電流計では0.00 Aになりました。ボッシュの温湿度・気圧センサ BME280もつけていて、Wi-Fiに接続してインターネットにセンサ測定値を送信するプログラムで実験しています。
Arduinoのモニター画面にもDeep Sleepの文字が表示されています。Deep Sleepから目覚めると、プログラムの最初から実行されるようになっています。何かの処理を終えた後にDeep Sleep Modeに移行して、眠りから覚めた後にその続きの処理をすることはできないのですね。このプログラムでは、Wi-Fiのアクセスポイントに接続して、センサーの値を読み取り、インターネットに送信した後に休眠する動作を繰り返します。
公式のESP32用Arduinoスケッチには、Wi-Fiを使ったCaptive Potalのサンプルプログラムも用意されていて、Wi-FiアクセスポイントのSSIDとパスワードを修正するだけでCaptive Potalを試せるところがすごいです。HEADに
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1>
を追加して、スマートフォンでも楽しめるようにしています。悪用厳禁ですね。Raspberry PiでCaptive Potalの実験をするには、例えばここにあるようなdnsmasqやnginxやhostapdなどの横断的な知識が必要ですが(ここのサンプルはとても興味深いです)、ESP32ではとても簡単に試せます。Arduinoの開発環境は便利すぎて、私の開発環境にはArduino純正やESP32のほかに、ESP8266、Intel Galileo、Intel Edison、Seeeduinoのボード定義が入っています。そのため、起動に27秒もかかるようになってしまいました。
ESP-WROOM-32のプログラミングには、Arduino開発環境の他に、MicroPython(言語Pythonの縮小版)と純正開発環境のESP-IDFを使う方法の3通りがあります。公式のMicroPythonでは、現在のところ、Bluetoothを使うことができませんが、雑誌に掲載されている手順にしたがってLinux上でクロスコンパイルして、Bluetoothを使えるようにしました。こんどはESP-IDFも使ってみたいと思います。