スリープモードを使用することでESP32の消費電力を削減できます
ESP32は驚異的なデバイスです。何百MHzもの速度で情報を処理し、WiFiや Bluetooth を介して通信し、GPIOピンを使用してさまざまなタスクを実行することができます。しかし、大きな力には大きな…消費電力が伴うと言えるかもしれません。
公平を期すと、ESP32の消費電力は、10年前の同様のデバイスと比較すると実際にはかなり低いです。しかし、特にバッテリーが関与する最新のIoTアプリケーションにおいては、完全に電源が入っているときに数百ミリアンペアの電流を消費するため、比較的多くの電力を消費する可能性があります。
良いニュースは、ESP32にはスリープモードとハイバーネーションモードのシステムが備わっていることです。これらのモードを慎重に使用することで、ESPの電力の需要は抑制されるか、あるいは少なくとも短い活動に限定されることができます。
スリープモード
ESP32のディープスリープおよびその他の電力モードは、そのデータシートから引用した以下の表にまとめられています:
| パワーモード | 説明 | 消費電力 | |
| モデムスリープ | CPUは電源がオンです。 | 240 MHz (デュアルコアチップ) | 30 mA ~ 68 mA |
| 240 MHz (シングルコアチップ) | N/A | ||
| 160 MHz (デュアルコアチップ) | 27 mA ~ 44 mA | ||
| 160 MHz (シングルコアチップ) | 27 mA ~ 34 mA | ||
| 通常速度: 80 MHz (デュアルコアチップ) | 20 mA ~ 31 mA | ||
| 通常速度: 80 MHz (シングルコアチップ) | 20 mA ~ 25 mA | ||
| ライトスリープ | - | 0.8 mA | |
| ディープスリープ | ULPコプロセッサは電源がオンです。 | 150 µA | |
| ULPセンサー監視パターン | 100 µA @1% デューティ | ||
| RTCタイマー + RTCメモリ | 10 µA | ||
| ハイバーネーション | RTCタイマーのみ | 5 µA | |
| パワーオフ | CHIP_PUは低レベルに設定され、チップは電源がオフです。 | 1 µA | |
データシートからのスクリーンキャプチャ はこちら
ESP32には5つの低電力モードがあります: ESP32モデムスリープ、ライトスリープ、ディープスリープ、ハイバネーション、および電源オフです。モデムスリープとディープスリープにはいくつかのサブモードがあり、アクティブな処理能力に基づいて異なる電力消費率があります。ハイバネーションは、設定された時間後のウェイクアップのためのRTCを除いて、チップのほぼすべての機能を停止します。電源オフモードは、CHIP_PUピンが低く設定されていることに応じて起動し、処理を再開するには外部の操作が必要です。
これらすべての結論として、ESP32の低電力モードは電源オフを除いて、それぞれ68mAから5µA、または0.068Aから0.000005Aを消費します。欠点は、それぞれのモードがESP32の有用性を制限する点であり、以下に記載されています:
- モデムスリープ: 無線通信が遮断されます。
- ライトスリープ: CPUを一時停止しますが、メモリの状態を保持します。
- ディープスリープ: ESP32のメインメモリの電源をオフにします。限られた量のRTC(リアルタイムクロック)メモリが保持され、ウェイクアップ時に使用できます。ULP(超低消費電力)プロセッサは、ディープスリープのサブモードのうち2つでアクティブであり、簡単なタスクの実行と入力の監視を可能にします。
- ハイバネーション: ウェイクアップのためにRTCと限られた数のGPIOピンのみがアクティブです。メモリは保持されません。
- 電源オフ: 外部でスイッチオンする必要があります。電力消費量1µAはほとんどの状況で無視可能です。
電圧の影響を無視すると、小型の3.7V、850mAhの充電式バッテリーは、モデムスリープで約12.5時間、ライトスリープで1000時間以上ESP32を駆動することができます。中間レベルのディープスリープハイバネーションでは8500時間、つまり約1年の稼働時間を提供し、ハイバネーション状態は理論上約20年間保持できます。もちろん、デバイスは有用であるために断続的に起床する必要がありますが、慎重に計画すれば、ESP32セットアップはバッテリーの充電間の寿命を非常に長くすることができます。
ESP32 ディープスリープ開発ボードの違い
データシートからのスクリーンキャプチャ はこちら
消費電力について話すとき、ESP32チップやモジュールは電子機器の一部分に過ぎません。実験のためには、開発ボードを使用する可能性が高いです。より詳細な電子設計には、IoT「もの」を動かすために関連部品のカスタムアレンジメントが必要です。慎重なプログラミングにより、ESP32を使用することで非常に効率的な電力消費が可能ですが、周囲の電子機器には慎重な配慮が必要です。
この点を示すために、Adafruit HUZZAH32 ESP32 開発ボードを電源および電流測定機器に接続し、さらにDFRobot DFR0478 ESP32ボードも接続しました。両方ともこのESP32コンポジットビデオクロック投稿に登場しており、かなりニッチな使用例と考えられる点で異なる性能を示しました。おそらく、電力効率も両者の間で区別となる特徴を示すでしょう。
これをテストするために、私はESP32 Arduinoのサンプルスケッチ「TimerWakeUp」を修正して使用しました。このスケッチは、深いスリープに入り、目覚め、オンボードLEDライトを点灯し、その後再びスリープに入るサイクルを開始します。それぞれのボードには5.3Vが供給され、ESP32に必要な約3.3Vのレベルに変換されました。消費結果は次の通りです。
HUZZAH32: スリープ = 6.6mA ウェイク = 43.2mA ウェイク + LED = 44.6mA
DFR0478: スリープ = .02mA ウェイク = 39.7mA ウェイク + LED = 40.0mA
公平を期すために、実際のIoT使用のより良いシミュレーションはバッテリーポートを介して電流を測定することだったかもしれません。それにもかかわらず、このシナリオでは、DFR0478 FireBeetleボードがスリープモードでその相手よりもはるかに効率的であることが示されています。
HUZZAH32は、バッテリーパワーからのディープスリープ中に7000µA(7mA)を引き出します。これは私の実験で測定した値にほぼ相当します。Andreas Spiessによる分析では、DFR0478はディープスリープ時にバッテリーから報告された53µA(0.053mA)の電流を引き出すとされていました。これは私がDFR0478で測定したものよりはるかに多いですが、彼のレポートでは異なる電源入力とボードの以前のバージョン(私がテストした4.0対2.0)を使用しています。この測定は私のマルチメーターが報告できる下限を押しており、その精度に影響する可能性があります。最終的な注意点として、テストされたFireBeetleはWROOM-32D ESP32モジュールを使用していますが、HUZZAH32はWROOM-32Eを使用しています。
それを踏まえて、テストされた2つのボードには桁違いの差があり、これはESP32をサポートする回路が電力消費に劇的な影響を与える可能性があることを示す良い例です。
スリープモードで制御されたESP32の消費電力
ESP32は非常に強力なデバイスであり、動作には比較的大量の電力を必要とすることがあります。しかし、慎重なプログラミングにより、これらのデバイスをバッテリー電力で数週間、数ヶ月、さらにはそれ以上動作させることが可能です。重要なのは、低電力設計に関するトレードオフを理解し、受け入れ可能な性能を維持しながら省ける部分を見極めることです。

記事タグ