ESP32を使ってデータを収集するデバイスを作る場合、一番の問題はバッテリーです。週に一回電池を入れ替えないといけない、というのでは手間がかかってしょうがないです。できれば数か月間ノーメンテナンスで稼働し続けてくれることが望ましいです。
その準備ための消費電力の測定などを行いましたのでその結果を紹介します。
概要
マイコンを長時間動作させるためには、データを取得し、何らかの方法で外部に送信した後、スリープ状態にするという間欠動作をさせるのが一般的です。マイコンは何もしない待機状態でも数~数十mA程度消費するのが普通ですので乾電池程度の容量では1週間ぐらいで干上がってしまいます。
また、スペック上はスリープ時の消費電力は数~数十μA程度と書かれていても、実際に試してみるとそんなに少ない電流で動作することは稀です。電源周りなど周辺回路が電気を食っている場合があるからです。
今回はそのあたりも含めて、実運用でどのぐらいの消費電流(電力)なのか複数の開発ボードについて検証を行いました。
なお、今回の測定は全て電源側での電流の測定値です。つまり、実際に電池が消費する電流量ということになります。各種電圧に変更した後の値ではありません。
マイコン
今回使用するマイコンはESP32ですが、ESP32にもいろいろと種類があります。ESP32のチップ自体にも種類がありますし、それらを搭載した開発ボードも多数あります。そこで今回は以下の4つについて測定を行いました。
- LOLIN D32:Liイオン電池の充放電回路まで実装された開発ボードです。ただ、現状では入手先が見当たりません。
- Seeed XIAO ESP32C3:ESP32シリーズでは多分最新のESP32C3を搭載した開発ボードです。正規ルートで入手出来て、1枚1000円以下です。入出力ポートは少ないですが超小型です。
- 正体不明ESP32開発ボード①:大人の事情等々で名前等は伏せますが、ESP32の開発ボードです。
- 正体不明ESP32開発ボード②:こちらも同上ですが、3とは別の製品です。
周辺デバイス
想定される状況を想定して、電源電圧測定用の抵抗(100kΩ程度)と気温・湿度・気圧を測定するBME280をI2Cで接続しています。
電圧測定用の抵抗は常時接続ですが電流値としては数十μAオーダーで、結果に大きな影響はありません。ただし、突き詰めると無視できないレベルなので今後の検討課題としておきます。
BME280はESP32のGPIOピンから電源を供給し、使用時のみONにするようにしています。電源断しておかないと、数百μAオーダーで消費してしまいます。
電源
電池の容量を考えるとリチウムイオン電池に軍配が上がるのですが、長期間放置するデバイスに使用することを想定しているため、危険性を考えて候補から外しました。また、後々はソーラーパネルを用いた充電をすることも考慮しているため、ニッケル水素電池を選択しています。
そこで、単三型IMPULSE(東芝製)4本を直列で使用しました。ほぼ新品に近い状態のもので、充電直後からすこしだけ電力を消費し、開放電圧が4本直列5.4V前後の状態で使用しました。電池容量の公称値は1900mAhです。
TOSHIBA ニッケル水素電池 充電式IMPULSE スタンダードタイプ 単4形充電池(min.750mAh) 4本 TNH-4ME4P
TOSHIBA ニッケル水素電池 充電式IMPULSE スタンダードタイプ 単3形充電池(min.1,900mAh) 4本 TNH-3ME4P
東芝の日本国内製造のIMPULSE(追記:中国製もあるので注意)のOEM元はFDK(富士通)です。つまり中身はeneloopと全く同じものです。最近はPanasonicのeneloopもかなり値上がりしてしまった印象ですが、IMPULSEは4本セットで1200円程度と買いやすくなっていますので、こちらがおすすめです。(2023.11現在は単三4本セットは品切れのようです)
もしくは、FDKのニッケル水素も同じもの(というか製造元)です。
ニッケル水素電池は公称1.2Vですが、充電直後は1本で1.4V近い電圧がでます。
ちなみに、アルカリ電池の公称電圧は1.5Vですが、1.5Vなのは最初だけで消費するにつれて徐々に下がっていきます。一方、ニッケル水素は長期間にわたって1.2Vを維持しますのでニッケル水素電池のほうが電圧が高い状態で使っていることもあります。
つまり、ニッケル水素電池は電圧が低いから~という言説はおおむね間違っているということですね。ニッケル水素電池が使用できないとされている機器は、電圧が低いからではなく電池の内部抵抗か小さいため大電流が流れてしまうことが理由であることが多いです。
3.3Vの生成
ESP32の動作電圧は3.0~3.6Vです。この電圧を生成する方法として以下の3通りを検証しました。
- 5V入力端子にバッテリーを直結する
- 日清紡の3.3VレギュレーターNJU7223を使用して3.3Vを生成し、3V端子につなぐ
- アマゾンで購入した高効率DCDCコンバーターで3.3Vを生成し、3V端子につなぐ
1.については開発ボードの電源レギュレーターに任せるということです。この方法の場合、電源効率はレギュレーターチップの性能(特に待機電流)に大きく依存しますし、ボード上のUSB-シリアル変換チップなど余計なものが無駄に動作する可能性があります。
2.はESP32が動作するスペック(500mA出力可能)で待機電流が小さく、入手が簡単な3.3Vレギュレーターを探した結果、これ1択になりました。秋月電子で1個50円程度で入手可能です。このレギュレーターは待機電流がスペック上では数十μAしかありません。私の実測でも100μA以下であることが確認できています。
3.はAmazonで購入したDCDCコンバーターの性能が良かったので検証の候補として採用しました。
DROK 降圧コンバーター DC 4.5-20V から DC 1.8V 2.5V 3.3V 5V 9V 12V 3A 5枚 ミニ電圧レギュレーターボー...
レギュレーターは入出力間の電圧差が無駄になってしまう一方、待機電流は小さいことが多いです。一方、スイッチング式のDCDCコンバーターは変換効率が高い(~90%前後)である一方、待機時にもそれなりの電流を消費するのが欠点です。
今回使用したDCDCコンバーターは待機時(5.4V→3.3V変換)には200~300μA程度の電流しか消費しないことが分かっています。
間欠動作で動作時間を延ばす場合には待機電流が非常に重要になります。起動中の電力効率が高い方が良いのか、それとも待機中の消費電力が少ない方が良いのか、そこに注目です。
↑NJU7223は表面実装用のSMDと挿入実装用のSIP用の2種類が秋月電子などで販売されています。
シーケンス
以下のようなシーケンスを繰り返している想定です。
- 電源ON or DeepSleepから復帰
- 電源電圧測定
- BME280起動、気温湿度気圧測定
- Wifi起動、アクセスポイントに接続
- データをAmbientに送信
- DeepSleepへ移行
結果
DeepSleep中の消費電力
計測結果はこちらです。
5V端子へ電池4本 | NJU7223(3.3V) | DC-DC (3.3V) | |
---|---|---|---|
LOLIN D32 | 430μA | 470μA | 440μA |
XIAO ESP32C3 | 260μA | 200μA | 350μA |
不明ESP32ボード① | - | 1.0~1.2mA | 0.9~1.0mA |
不明ESP32ボード② | - | - | 8mA |
まず、開発ボード②は問題外ですね。8mAも消費してしまっていますので、1900mAhの電池では単純計算で10日程度しか動作しません。開発ボード①も健闘していますが、上2つの名のある開発ボードにはかなわないようです。
XIAO ESP32C3の消費電力はかなり少ないですね。外付けのNJU7223を使用しなくても大差ありませんし、DCDCコンバーターよりも低消費電力です。
LOLIN D32も悪くはありませんが、入手性も考慮するとXIAO ESP32C3一択になってしまいます。ピン数が少ないので用途によっては工夫が必要です。
起動時の消費電力
電源ラインに0.1Ωの抵抗を直列に接続し、その両端電圧をオシロスコープで観察しました。測定に使用した抵抗値も高精度なものではありませんし、誤差も大きいので、あくまで概算値と思ってください。DeepSleep時の消費電流が大きかった2つについては測定していません。
5V端子へ電池4本 | NJU7223(3.3V) | DC-DC(3.3V) | |
---|---|---|---|
LOLIN D32 | ~150mA | ~150mA | ~100mA |
XIAO ESP32C3 | ~100mA | ~100mA | ~60mA |
正体不明ESP32ボード① | - | - | - |
正体不明ESP32ボード② | - | - | - |
下の図はオシロスコープで観察したLOLIN D32の起動時の電流変化の様子です。横軸の1マスが0.2秒、縦軸の1マスが5mV(=50mA)です。
これはDeepSleepから復帰してデータ取得/送信までの1セット分の波形です。1~1.2秒程度で1セットが完了し、再びDeepSleepに入っていることが確認できました。ただ、データ送信に3秒以上かかる場合も見られました。これは無線接続の宿命ですね。
ここでもやはりXIAO ESP32C3の低消費電力っぷりがよくわかります。次の波形はDCDCコンバーターを使用した場合のもので、概ね60mA程度に収まっています。
次の波形は3.3VレギュレーターNJU7223を使用した場合の波形です。こちらは概ね100mA以下に収まっています。
ちなみに、各グラフともところどころに鋭いピークが見られます。何度も測定を行いましたが、すべての測定でこのようなピークは確認できました。ESP32では500mA以上の電源容量を確保するように推奨されているようですが、このような突発的な電流消費があるためでしょう。
起動に失敗して延々と大電流が流れ続けるといった現象に何度も出くわしました。おそらく起動にコケて再起動を繰り返している状態だと思われます。ブレッドボードで検証を行ったのですが、おそらく回路中の接触抵抗等が原因と思われます。瞬間的に数百mAの大電流が流れますのでそれによって電圧降下が発生し起動に失敗するのではないでしょうか。
補足
ちなみに、今回の検証とは別にニッケル水素電池3本を3V端子に直結する、という無茶な実験もしてみました。これについては、うまく起動できませんでした。100μF程度の電解コンデンサーを電源と並列に接続することで起動できるようにはなりましたが、1週間程度で(電池残量を大きく残した状態で)起動できなくなりました。
ESP32は無線を搭載したマイコンとしては低消費電力な部類だと思われますが、電源品質にはかなりうるさいようなので注意が必要そうです。
消費電力の概算
ここまでの測定で、以下のどちらかの消費電力が小さいことがわかりました。
- XIAO ESP32C3で、電源はレギュレーター(NJU7223)を使用する
- XIAO ESP32C3で、電源はDCDCコンバーターを使用する
1.のほうが待機時の消費電力は少ないですが、2.のほうが起動時の消費電力は少なくなります。
ここで、1回の送信についてどちらも1秒間起動していて、1では100mA、2では60mAの電流を消費すると仮定します。この場合、1回の送信に必要な電流量は次のようになります。
1の場合は100mA×1秒/3600≒30μAh
2の場合は60mA×1秒/3600≒20μAh
これと、DeepSleep中に必要な待機電流量を合わせて計算すると、平均電流は以下のようになります。
30秒間隔 | 120秒間隔 | 600秒間隔 | |
---|---|---|---|
レギュレーター | 3.8mA | 1.1mA | 0.38mA |
DCDCコンバーター | 2.75mA | 0.95mA | 0.47mA |
概ね2分間隔で送信する場合を境として、それより間隔が短い場合はDCDCコンバーターが有利、長い場合はレギュレーターが有利であることがわかります。
電源としてレギュレーター(NJU7223)を使い、10分間隔の送信とした場合の稼働可能な日数はおよそ208日ですね。
2分間隔とした場合はどちらの場合も80日前後といったところでしょうか。2か月に一度の電池交換であれば許容範囲内だと思います。
*追記(実稼働させました)
電源としてXIAOSeed内蔵レギュレーターorNJU7223を使用して2分間隔でデータ送信を行った場合で60日間動作することを確認しました。平均消費電流は1.2~1.4mAでほぼ上記計算通りとなりました。
30秒間隔でデータ送信を行った場合は28日間動作することを確認しました。この場合の平均消費電流は約2.8mAでした。こちらは上記計算とは少々ずれがありますが概ね予想通りの結果です。
SwitchBot 防水温湿度計 Alexa 温度計 湿度計 - スイッチボット ワイヤレス 室内 屋外用 温湿度計 熱中症対...
まとめ
今回の測定結果から、乾電池などの小さなバッテリーで長時間ESP32を駆動させる場合にはAmazonなどで売られている正体不明の開発ボードは避けた方が良さそうです。試してみないとどの程度の消費電力になるかわからないからです。現状ではESP32の中から選ぶのであればSeeedのXIAO ESP32C3一択です。マイコン自体の消費電力も少ないですし、パッケージになっている電源レギュレーターも優秀です。
レギュレーターがよいかDCDCコンバーターが良いかについても大まかな基準がわかったのも収穫でした。今回使用したDCDCはこれまた正体不明なのが怖いところではありますが、かなり高性能であることが確認できました。出力電圧も好きに選べ、汎用性が高いのでお勧めです。
DROK 降圧コンバーター DC 4.5-20V から DC 1.8V 2.5V 3.3V 5V 9V 12V 3A 5枚 ミニ電圧レギュレーターボー...
実は並行して実運用でのテストも行っていますので結果が出次第報告したいと思います。
コメント
XIAO ESP32C3に3.3V突っ込むと内部の電源レギュレータにダメージいきませんか?
特に保護ダイオードなど入っていないようですし
ご指摘ありがとうございます。
以下サイトによりますと、電源ピンの扱いに関して次のような記述があります。
https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started/
>Power Pins
>5V – This is 5v out from the USB port. You can also use this as a voltage input but you must have some sort of diode (schottky, signal, power) between your external power source and this pin with anode to battery, cathode to 5V pin.
>3V3 – This is the regulated output from the onboard regulator. You can draw 700mA
>GND – Power/data/signal ground
3.3Vピンを電源入力に使ってもよいとは書かれておりませんし、当方でもこの点について安全対策は行っておりませんので、ご指摘の通りです。
内蔵の電源レギュレーターを損傷する可能性は否定できません。
言い訳っぽい話で恐縮ですが、今回の検証はXIAOに使われている電源レギュレーターの性能をあぶりだす、というのも目的の一つでした。
有象無象の開発ボードでは待機時の消費電力がmAオーダーのものも少なくなく、XIAOもそれに該当するのか気になっておりましたので。
で、今回の検証でXIAOに使われている電源レギュレーターは優秀なのでわざわざ外部にレギュレーターを設置する必要性が薄い、というのが個人的な結論です。
ちなみに、この構成で複数台を数か月に渡って動作をさせ続けていますが、XIAO本体の電源レギュレーターが破壊された様子はありません。実験個体全てにおいてUSB側から電源を供給すれば動作します。
もちろん、自分の環境で壊れなかったから問題ないというつもりはありませんし、じわじわとダメージが入り続けているかもしれないことは否定できません。
記事本文にも今回のご指摘の件を追記させていただきます。
ご指摘につきまして、重ねて御礼申し上げます。