[180日連続動作]ESP-WROOM-32を電池4本で動かす (Arduino IDE)

本記事ではESP32を電池で動かす方法について解説します。1日2回HTTP通信をする本環境では執筆時点でニッケル水素電池4本で180日の連続動作中です。

本記事のまとめ

ESP-WROOM-32単体を利用して、3.3V電源を作成してVCC-3.3Vに印加するようにすると長期運用可能

この記事は自己責任でご活用ください。

スポンサーリンク

本記事の目的

ESP-WROOM-32はESP-DevKitCに代表されるように簡単にプログラミング可能な開発ボードとして売られています。しかし、開発ボードでは電力の効率が悪く工夫なしでは電池など独立電源での長期運用は難しいです。

たとえば、ESP-DevKitCにはAMS1117-3.3が使われていますが、この開発ボードに使われているレギュレータは効率が良くありません。「ESP32-DevKitCのDeepSleepが結構電流を消費しているので原因を調べてみた」によるとESP-DevKitCはDeep Sleep状態で11mAも消費してしまいます。(私の手元の開発ボードでも同程度の電流が流れていました。)つまり、ESP-DevKitCは開発ボードになっているので使いやすい反面、消費電力が大きいという欠点があります。「ESP32-DevKitCのDeepSleepが結構電流を消費しているので原因を調べてみた」ではレギュレータの交換やICの交換を行って電流を減少させていますが、最初から電池で駆動することを考えるのであればESP-WROOM-32単体で動作するようにしたほうがいいように思います。データシートによるとESP-WROOM-32単体のDeepSleep中の消費電流は数uAと書いてあるので、本記事ではESP-WROOM-32単体で動作するようにするための手順について記述したいと思います。

必要な部品

必要な部品について記述します。USBからAruinoのスケッチを書き込めるようにするにはUSBからシリアル変換をする必要があります。

ESP32本体 「ESP32-WROOM32D
ESP-WROOM-32 ピッチ変換基板 「ESP-WROOM-32 ピッチ変換基板コンパクト
USBシリアル変換 「FT232RLUSB-TTLシリアル変換アダプターモジュール 」

また、3.3V電源を作成するためには以下の部品が必要です。
3.3V LDO レギュレータ 秋月電子 「低損失表面実装型三端子レギュレーター 3.3V800mA NJM2845DL1-33


電子素子
コンデンサ 0.33uF, 2.2uF, 01.uF
抵抗 10k, 1k

ES32をビッチ基盤に取り付けるのはかなり繊細な作業なので先の細いはんだごてが必要です。

ブレッドボード開発基板の紹介

ESP32は、端子が小さく、ハンダ付けするのが非常に難しいです。(私も、1度ハンダ付けに失敗してしまいました。)
究極的に小型化、省コスト化を目指していない人は、割高ですが、ブレッドボード開発基盤がおすすめです。

結線図の解説

結線図

USBシリアル変換アダプタの接続方法

FT232とESP32を以下のように接続します。(FT232の電圧レベルはジャンパーキャップを使って3.3Vにしてください。)

ESP32 TXD = FT232 RX
ESP32 RDX = FT232 TX

スイッチ(SW1, SW2)の動作について

プログラムを書き込む際はSW2を押したまま、SW1 を押し、つぎにSW1を離してください。IO0がGNDに接続されるとプログラム書込みモードになります。
また、SW1の0.1uFと1k抵抗は安定化のために取り付けているため除いても問題ないかもしれません。

スイッチを押すのが面倒な場合は自動プログラム書込み回路を作成することをお勧めします。

3.3V 電源

今回は秋月電子の3.3V LDO レギュレータを使用しました。ESP-WROOM-32は動作時に大きな電流を必要とするのでLODレギュレータの最大出力電流が大きなLDOを採用しました。また、電池で駆動するため、ドロップアウト電圧が小さいことも重要です。電池は使用していくうちに電圧が低下していくため、ドロップアウト電圧が大きいと3.3Vを取り出せなくなってしまいます。
NJM2845 PDFデータシート

電圧源はニッケル水素電池4本を使用しました。ニッケル水素電池の公称電圧は1.2Vなので4本だと4.8Vとることができ、ニッケル水素の終止電圧は1Vなので不足なく使うことができます。(ニッケル水素電池は過放電に弱いので定期的に電圧を監視して過放電を防ぐようにしたほうが良いです。)

プログラムの工夫

電池でESP-WROOM-32を動かすので、電力を削減するために、計算処理するとき以外はDeep Sleep状態にしておく必要があります。
以下の記事を参考にし、Deep Sleepのプログラムを記述しました。
Deep Sleepの方法には
・タイマーによる復帰
・タッチによる復帰
・外部入力による復帰
・ULPによる復帰
があると書かれています。
ESP32 Deep Sleep with Arduino IDE and Wake Up Sources | Random Nerd Tutorials
CompleteguidefortheESP32DeepSleepmodewithArduinoIDEanddifferentwakeupsources:timerwakeup,touchwakeup,andexternalwakeup(withexamples).

タイトルとURLをコピーしました