IoTデバイスの用途によっては、乾電池だけで何ヶ月も稼働させたいなど、低電力で動作させたいケースがあります。
そのような場合、IoTデバイスが無線通信を行うと、どうしても数十mA〜100mA程度の電流を消費してしまうので、無線通信は一定時間おきに行い、その他の時間はできるだけ低電力な状態を維持する必要があります。
低電力な状態を維持する方法として、ESP32には「deep sleep」があります。
ESP32モジュール単体であれば、deep sleep時の消費電流値は数十uAに抑えることができるようです。
ただ、私が普段使っている「ESP32-DevKitC」や「ESPr Developer 32」などの開発ボードには、周辺にも色々な回路がついており、deep sleep中もそれらが動いているため、deep sleep時の消費電流値は数百uA程度までしか低減されません。
例えば、1時間のうち10秒だけは無線通信を行うため100mAの電流消費、その他の期間はdeep sleepさせる場合、deep sleep中の電流消費が400uAであれば、平均の電流消費は680uA程度になります。
一方、もしもdeep sleep中の電流消費を20uAに抑えることができれば、平均の電流消費は300uA程度と、半分以下に低減することができます。
このように、ESP32モジュール単体での利用は、IoTデバイスの低電力化に有効と思われます。
そのため今回、ESP32モジュール単体での使い方を確認することにしました。
今回使うのは、秋月電子通商で購入した「ESP-WROOM-32 DIP化キット」です。
ブレッドボードに挿して使うことができるので、周辺回路も簡単に組むことができます。
その他の部品として、「FT232RQ USBシリアル変換モジュールキット」、「低損失三端子レギュレーターTA48033S」、抵抗やコンデンサなどを準備します。
こちら や こちら の記事を参考にして、回路を組んでみました。
手持ちのブレッドボード1枚では収まりきらず、このように、ブレッドボード2枚を繋いで対応しました。
Arduino IDEで簡単なスケッチを作成し、「ESP-WROOM-32 DIP化キット」に書き込んでみます。
書き込み手順は以下のとおりです。
- Aボタンを押したままにする
- Aボタンを押した状態のまま、Bボタンを押して離す
- Aボタンを押した状態のまま、Arduino IDEで「マイコンボードに書き込む」をクリックする
- 転送が始まったら、Aボタンを離す
- 書き込みが完了したら、Bボタンを押して離す
「ESP-WROOM-32 DIP化キット」を通常動作させる際は、電源とグランドを供給する他、EN端子をプルアップしておけば良いようです。
今回はこのように、今回組んだ回路の半分を使って動かします。
問題なく動作しました。
テスタで消費電流値を測定したところ、Wi-Fi通信時には100mA程度、deep sleep時には6uA程度となりました。
この測定値が正しいとはとても思えませんが、少なくとも低電力動作はできているようです。