これまで、M5Cameraで植物を撮影し、生育状況をタイムラプス動画にしたりして楽しんできました(記事は こちら)。
ただ、将来的には、M5Cameraを屋外(畑)に設置し、畑の作物の生育状況をタイムラプス動画にしたいと考えています。
そのためには、M5Cameraや通信のための装置を、ソーラーバッテリーで動かさなければなりません。
ソーラーバッテリーについては、先日、太陽光で発電・充電するためのシステムを購入し、別途調査中です(記事は こちら)。
いずれにしろ、M5Cameraをそのような用途で使うためには、M5Cameraの消費電力をできるだけ小さくしなければなりません。
そんな訳で、まずは状況把握のため、M5Cameraの消費電流値を調査してみたいと思います。
以下のように、USB-Cケーブルを途中で切り離し、グランドラインの途中にテスターを入れて電流値を測定します。
最も一般的な使い方として、以下のスケッチを準備しました。一定の時間間隔で写真を撮影し、Webサーバーに送信するものです。
void setup() { /* カメラを初期化 */ /* Wi-Fiに接続 */ } void loop() { currentTime = millis(); if (currentTime-prevTime > interval) { prevTime = currentTime; /* 写真を撮影してWebサーバーに送信 */ } }
これでM5Cameraを動かしたところ、常時112mA程度の電流消費でした。写真撮影→Webサーバーへ送信の一瞬だけ、170mA程度に増加します。
スケッチを以下のように変更しても、結果は変わりませんでした。
void setup() { /* カメラを初期化 */ } void loop() { currentTime = millis(); if (currentTime-prevTime > interval) { prevTime = currentTime; if(WiFi.status() != WL_CONNECTED){ /* Wi-Fiに接続 */ } /* 写真を撮影してWebサーバーに送信 */ } }
次に、スケッチを以下のように変更しました。写真撮影時のみWi-Fiに接続し、サーバーへの送信が終わったら切断するものです。
できるだけWi-Fiに接続しないようにすることで、消費電力が低減されることを期待しています。
void setup() { /* カメラを初期化 */ } void loop() { currentTime = millis(); if (currentTime-prevTime > interval) { prevTime = currentTime; if(WiFi.status() != WL_CONNECTED){ /* Wi-Fiに接続 */ } /* 写真を撮影してWebサーバーに送信 */ WiFi.disconnect(); } }
これでM5Cameraを動かしたところ、なぜか電流消費が増えてしまい、常時175mA程度を消費するようになってしまいました。
Wi-Fi切断は効果がなかったので、次に、スケッチを以下のように変更しました。写真撮影、サーバーへの送信が完了したら、ディープスリープに入ります。
void setup() { /* カメラを初期化 */ /* Wi-Fiに接続 */ /* 写真を撮影してWebサーバーに送信 */ esp_sleep_enable_timer_wakeup(interval*1000); esp_deep_sleep_start(); } void loop() { }
これでM5Cameraを動かしたところ、M5Cameraが起動している時は170mA程度、スリープしている時は24mA程度の電流消費でした。
以下のように、ディープスリープに入る前にWi-Fi切断しても、結果は変わりませんでした。
void setup() { /* カメラを初期化 */ /* Wi-Fiに接続 */ /* 写真を撮影してWebサーバーに送信 */ WiFi.disconnect(); esp_sleep_enable_timer_wakeup(interval*1000); esp_deep_sleep_start(); } void loop() { }
ディープスリープしても24mAというのは、非常に大きな値ではありますが、M5Camera内のマイコン以外の部品が電流消費し続けているためと思われます。
それでも、常時起動させているのに比べるとマシなので、今後、M5Cameraを屋外で使用する場合は、この使い方を採用しようと思います。