ESP32 の無線 LAN 通信時の消費電力について,少し詳しく調べてみたので紹介します.
前提
Deep Sleep を活用したアプリケーションの電池寿命の延長の可能性を探るため,次のような動作を行うソフトを対象に計測を行いました.
- Deep Sleep から起きる.
- 無線 LAN に接続.
- Fluentd サーバに 100Byte 程度のデータ(JSON)を送信
- Deep Sleep に入る.
結果
測定した結果は次のようになります.
上側が3.3V 電源の消費電流のグラフで,下側は ESP32 が出力した動作ログになります.対応する箇所同士を線で結んでいます.
分かったこと
- Passive Scan が占める時間の割合が大きい
- 起動後 385ms の時点で接続先の AP を見つけられているものの,実際に認証を始めるのは 945ms 後までずれ込んでしまっています(ログの赤枠部分).他のチャンネルをスキャンしているためだと思われます.
この部分を削減するため,wifi_config_t にチャンネルを指定したり,esp_wifi_get_country() を使って使用チャンネルの限定を試みたりしたものの,残念ながら現時点では変化ありませんでした.
ただ,下記を見ると,この辺りについて ESP-IDF 3.0 以降で改善する話がでていますので,期待して待ちたいと思います.
Faster Wifi station connect improvement - avoid 100ms passive scan (IDFGH-78) · Issue #986 · espressif/esp-idfHello, As recommended by ESP_Sprite on esp32.com forum I am opening an issue on this here: How would it be possible to s... - 実際の通信にかかる消費電力はごく僅か
- 今回のソフトの場合実際の通信は,SYSTEM_EVENT_STA_GOT_IP と esp_wifi_disconnect() の間の 20ms 間で終わっています.
ESP32 の動作時間は約 1秒なので,時間に占める割合としては 1% 未満.ESP32 は速い CPU を備えているので,通信相手のサーバーさえ近ければ,JSON 等をつかった通信でも消費電力的なデメリットはほぼなさそうです.
おまけ
計測は KEYSIGHT 34461A と Excel マクロを使って行いました.
KEYSIGHT が配布しているサンプルプログラムを改造したものになります.
コメント
[…] ESP32 無線 LAN 通信の消費電力分析(Rabbit Note) […]