今回は情報通信システム工学科 Advent Calendar 2018の9日目です。8日目はdaiさん(@dainbe)がラズパイについて書いたので、今回はラズパイに対抗してESP_WROOM_32(以下ESP32)についてです。
#まえがき
ESP32はWiFiやBluetoothが使え、ESP IDF以外にもArduino IDEやPythonで書けて便利です。しかし高機能であるため消費電力も他のマイコンの比にならないくらい多いです。定点観測カメラなどバッテリー駆動で動かしたい場合は一定周期で起動し、必要な処理を終えたら低消費電力のSleepモードに移行するのが賢明です。
//ESP32にはESP_WROOM_32やらESP_WROOM_32DやらESP_WROVER_32やらのバージョンがありますが基本的には同様の動作をするはずです。
#データシート
まずはデータシートを確認します。
Table5より、5つの動作モードがあることが分かります。
・Active mode
・Modem-sleep mode
・Light-sleep mode
・Deep-sleep mode
・Hibernation mode
通常起動ではModem-sleep、コード上でWifi.begin()とかするとActiveに、sleep()とかするとLight-sleepに入ると思います。この3つのモードはメインのCPUが動作している状態なので消費電力が比較的大きいです。
Deep-sleepに入るとメインのCPUは停止するのでプログラム自体が終了しますが、コプロセッサからリセットをかけることは可能なようです。コプロセッサも停止させるとHibernationになります。
コプロセッサはアセンブラで書かなければならないらしいので今回はパスします。
#機材
ESP32_Core_board_V2
Arduino IDE
不燃性酸化金属皮膜抵抗 0.1Ω 3W
HX711使用 ロードセル用ADコンバータ モジュール基板
#実験
//実際に消費電流を測定します。
//詳しい結果が出たら追記します。
今回はESP32のボードを電池駆動させることを主眼に置く為、core boardのmicroUSB端子を通過する電流を測定します。
データシート上ではActive modeでWi-Fi Tx packet 13dBm~21dBmのときに160~260mAとなっています。
今回は実験装置としてこのような回路を考えます。
右側のUSBコネクタにESP32測定対象をUSBケーブルで接続し、A点とB点の電位差を測定し抵抗値で割ることで通過した電流を求める事ができます。
この回路では500mAが流れた時に0.5*0.1=0.05Vの電圧降下が生じることになりますが、ボード上の3端子レギュレータの動作範囲を割ることは無いので恐らく大丈夫でしょう。それよりも重要なのは測定装置の分解能です。データシート上の最低電流はHibernation modeの5μAです。これを測定するためには並のテスターの分解能では測定できません。今回は24bitADCを使うことでギリギリ測定範囲内に収めることにしました。
#参考
https://trac.switch-science.com/wiki/esp32_tips
https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/ulp.html
#おわりに
ESP32はラズパイには劣りますがPICやArduinoよりも高機能です。
setupにWiFi.begin()を書いた後にPOSTしてやればラズパイよりも簡単にWiFiのログイン認証を通せそうな気がします。
次は大木君(@2357gi)の機械学習にバトンタッチします。ところでESP32は安価なので大量に並列化して機械学習用のスパコンにできたりしないですかね?