IoTデバイスの消費電力を測定する電流モニターを使い、M5Stackの消費電力を測定しました。また、ほぼ同じハードウェアとプログラムをESPr Developer32で動かしたときの消費電力を測定し、比較しました。

測定対象(M5StackとESPr Developer32)

M5Stackに温湿度センサーSi7021をI2Cで接続し、温度、湿度を測定してデーターをクラウドサービスAmbientに送信し、Deep sleepするプログラムを動かして評価しました。プログラムは次のような流れです。プログラム全体は最後に掲載します。

  1. M5.begin
  2. Wi-Fi アクセスポイントに接続する
  3. Ambientオブジェクトの初期設定
  4. Si7021を初期設定し、温度と湿度を取得
  5. 温度、湿度をAmbientに送信
  6. LCDの輝度を最低に設定
  7. Deep sleep

ESPr Developer32はM5Stackと同じESP32というマイコンを搭載した開発ボードです。M5Stackと同じように温湿度センサーSi7021を接続し、M5Stackとほぼ同じプログラムを動かします。ESPr Developerのプログラムは、1のM5.beginと6のLCDの輝度設定がありませんが、あとの流れは共通です。

M5Stackの消費電流

M5Stackをバッテリーで動かして、その時の消費電流を調べました。USBケーブルはつながず、バッテリーと本体(Core)の間に電流モニターをつなぎます。温湿度センサーSi7021は、CoreのMバスにつなぎました。

電流モニターを動かし、電流値を4ミリ秒周期で3,000件、12秒間測定するように設定します。測定開始のしきい値は20mAにします。測定対象のM5Stackの電源をつなぐと、プログラムが動き出し、電流の測定が始まります。

測定が終わるとデーターがSDカードに書かれるので、パソコンで読み取り、Excelでグラフ化しました。

消費電流の値からは、プログラムのどの部分を実行しているかは分かりません。そこで、millis 関数でプログラムの処理ごとの実行時間を測定し、USBケーブルをつないでシリアルモニターに表示しました。この時は電流測定はしていません。こうして得られた処理時間をグラフに書き込みました。

主な処理にかかった時間と消費電流を見ると、次のようになっています。

主な処理 処理時間 消費電流
M5.begin 680m秒 55mA
WiFi.begin〜WiFi.status 1700m秒 95〜200mA、ピークでは340mA
ambient.send 1150m秒 100〜170mA
deepsleep中   10mA 

Wi-Fiアクセスポイントに接続するWiFi.beginからWiFi.statusを確認する処理時間は、Wi-Fiの接続状況に依存します。

測定した12秒間の電流の積算値は616mA秒になりました。1mA秒は1mAの電流が1秒間流れたときの積算電流値です。乾電池の容量を表す単位にmAhがあります。1mAhは1mAの電流が1時間流れたときの積算電流値です。mA秒は時間の単位がh(時間)ではなく秒ですが、意味は同じです。

ESPr Developer32の消費電流

同じように、ESPr Developer32を電池で動かし、電池とESPr Developer32の間に電流モニターを入れて消費電流を図りました。

測定結果はこのようになりました。

主な処理にかかった時間と消費電流は、次のようになっています。

主な処理 処理時間 消費電流
WiFi.begin〜WiFi.status 1700m秒 47〜160mA、ピークでは320mA
ambient.send 1120m秒 44〜120mA
deepsleep中   0.3mA 

12秒間の積算電流値は317mA秒です。

M5StackとESPr Developer32の消費電流の比較

M5StackとESPr Developer32の消費電流のグラフを重ねたのが次のグラフです。処理ごとのM5StackとESPr Developer32の消費電流が比較しやすいように、2つのグラフの時間軸をずらしています。具体的には、M5.beginはM5Stackに固有の処理なので、M5.beginが終わって、Wi−Fiアクセスポイントに接続にいくところで消費電流が増大している時間を合わせて表示しています。

グラフを見ると、Wi-Fiアクセスポイント接続中もambient.sendでセンサーデーターを送信している間も、ESPr Developer32よりもM5Stackの方が50mA程度消費電流が大きいです。この間はM5StackのLCDはデフォルトの輝度で動かしているので、その影響だと思われます。

M5StackではDeep sleepに入る前に、LCDの輝度を最低に設定しています。それでもDeep sleep中の消費電流を比較すると、ESPr Developer32が0.3mAに対してM5Stackは10mAと、M5Stackは比較的大きな電流を消費しています。M5StackはLCD以外にもいろいろなモジュールが搭載されているので、Deep sleep中の消費電流も大きくなってしまうのかもしれません。

仮に5分(300秒)に1回Deep sleepから起きて、温湿度を測り、クラウドサービスに送信するアプリケーションを想定した場合、M5StackとESPr Developer32の300秒トータルの積算消費電流は次のようになります。

  最初の12秒 残り288秒 300秒トータル
M5Stack 616mA秒 2880mA秒 3496mA秒
ESPr Developer32 317mA秒 87mA秒  403mA秒

IoTセンサーデバイスのように、短い時間センサーで何かを測定してデーターをクラウドサービスに送信し、後は次の測定周期まで待機するようなアプリケーションの場合、待機中の消費電流を低く抑えることが全体の低消費電力化に大きく影響を与えることが分かります。

また、M5StackはLCD、スピーカー、ボタンなどいろいろなデバイスが搭載されているため、待機中の消費電力も多めで、バッテリーで長期間動作させるのはあまり得意ではなさそうです。