先日、「M5Stamp CAT-Mモジュール」の動作確認を行いました(記事は こちら)。
「ATOMS3」と「M5Stamp CAT-Mモジュール」をつなぐことで、Wi-Fiルータを使わずに、「ATOMS3」で取得したデータをWebサーバに送信することができました。
さて、このように、Wi-Fiネットワークなしでデバイスの取得データをWebサーバに送信できるようになると、IoTデバイスを独立して好きなところに設置できるようになります。
これまで私が特にやりたかったのは、IoTカメラをWi-Fiのないところに設置して、一定時間間隔で写真を撮影、それをWebサーバに送信して遠隔地からでも見れるようにするというものですが、「M5Stamp CAT-Mモジュール」を使えばそのようなこともできそうです。
さらに、それらのデバイスの消費電力によっては、小さなソーラーパネルでの常時稼働も可能な、本当にシンプルなIoTカメラがつくれるかもしれません。
カメラデバイスとして、私は主に「Timer Camera」を使っています。
「Timer Camera」に少し細工をすることで、小型のソーラーパネル(0.5W)での常時稼働を実現できています(記事は こちら)。
今回は、「M5Stamp CAT-Mモジュール」を使うことで、このようなことをWi-Fiネットワークなしで実現できないか、確認してみたいと思います。
まずは、先日「ATOMS3」で動作確認したのと同じ処理を、「Timer Camera」で実施してみます。
「Timer Camera」のGROVEポートに「M5Stamp CAT-Mモジュール」をつなぎます。
以下のようにつなぎます。
Timer Camera | M5Stamp CAT-Mモジュール |
---|---|
G | GND |
V | 5V |
G4 | Rx |
G13 | Tx |
「M5Stamp CAT-Mモジュール」へは、「Timer Camera」のGROVEポート(V端子)経由で電源供給されることになります。
「Timer Camera」のGROVEポート(V端子)は、スタンバイ時には電源遮断されますので、スタンバイ時には「M5Stamp CAT-Mモジュール」も含め、消費電力がほぼゼロになるはずです。
また、今回の「Timer Camera」の細工では、内蔵バッテリーの代わりにNi-MH電池4本をつないでいます。「Timer Camera」の回路図を見ると、電池とGROVEポートの間には電源遮断のためのトランジスタが1個入っているだけで、電池から、あまり電圧が落ちることなしに「M5Stamp CAT-Mモジュール」に電源供給されそうです。先日の記事で「M5Stamp CAT-Mモジュール」は電源の取り扱いがシビアだと書きましたが、この構成であれば、Ni-MH電池が十分に充電できている限り、「M5Stamp CAT-Mモジュール」も安定動作することが期待できます。
スケッチはこちらです。
#define TINY_GSM_MODEM_SIM7080
#include <TinyGsmClient.h>
#include "battery.h"
#include "bmm8563.h"
const char apn[] = "n-aeonmobile.com";
const char lte_user[] = "user@n-aeonmobile.com";
const char lte_pass[] = "0000";
const int rx_pin = 13; // GROVE 4th pin of TimerCamera
const int tx_pin = 4; // GROVE 3rd pin of TimerCamera
unsigned long interval = 20; // unit:sec
TinyGsm modem(Serial1);
TinyGsmClient client(modem);
boolean sendRequest(float val0) {
: 省略
}
void setup() {
delay(500);
Serial.begin(115200);
bat_init();
bmm8563_init();
bmm8563_setTimerIRQ(interval);
esp_sleep_enable_timer_wakeup(interval*1000*1000);
Serial1.begin(115200, SERIAL_8N1, rx_pin, tx_pin);
Serial.println("Wait...");
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
delay(3000);
// モデム初期化
Serial.println("Initializing modem...");
modem.init();
String modemInfo = modem.getModemInfo();
Serial.println("Modem Info: " + modemInfo);
// 接続
Serial.println("Connecting to "+ String(apn));
while (!modem.gprsConnect(apn, lte_user, lte_pass)) {
Serial.println("NG.");
delay(10000);
Serial.println("retry");
}
Serial.println("OK.");
// 接続待ち
Serial.print("Waiting for network...");
if (!modem.waitForNetwork()) {
Serial.println(" fail");
delay(10000);
return;
}
Serial.println(" success");
bool res = modem.isGprsConnected();
Serial.printf("GPRS status: %s\n", res ? "connected" : "not connected");
// Get Data
float val0 = random(0, 1000) / 10.0;
Serial.println(val0);
// Send Data
if(!sendRequest(val0)) {
bat_disable_output();
esp_deep_sleep_start();;
}
Serial.println("Send request is finished.");
digitalWrite(2, LOW);
bat_disable_output();
esp_deep_sleep_start();
}
void loop() {}
「ATOMS3」用の処理を「Timer Camera」用に書き直した他、ディープスリープの代わりにスタンバイモードに移行するように処理内容を変更しています。
電池ボックスのスイッチをONにすると、問題なく、データをWebサーバに送信することができました。
この時の消費電流波形を観測してみました。
波形の形状は「ATOMS3」の時とほぼ同じです。
1回の処理にかかる時間は「8011.0ms」、その期間の平均消費電流値は「130.20mA」となりました。また、スタンバイ時の消費電流値はゼロ(実際は、今回の調査方法では若干のマイナス)でした。
10分毎にデータ送信する場合、平均消費電流値は「1.74mA」となり、単三型Ni-MH電池(2000mAh)で「47.9日」にわたり稼働できる計算になります。
この程度の電流消費であれば、0.5Wのソーラーパネルでも、十分に常時稼働させることができそうです。
次に、このデバイスで実際に写真を撮影し、Webサーバに送信させてみたいと思います。
事情によりここにスケッチは掲載しませんが、先ほどのスケッチでデータ送信しているところを「カメラ初期化」→「写真撮影」→「画像送信」に変更しただけです。
送信する画像のサイズは「UXGA(1600 x 1200)」、画質は「10」にしました。
また、カメラの自動調整のため、カメラ初期化と写真撮影の間に4.8秒の待ち時間を入れています。
電池ボックスのスイッチをONにすると、問題なく、撮影した画像データをWebサーバに送信することができました。
この時の消費電流波形を観測してみました。
1回の処理にかかる時間は「18232.5ms」、その期間の平均消費電流値は「166.28mA」となりました。また、スタンバイ時の消費電流値は、先ほどと同じくゼロ(実際は、今回の調査方法では若干のマイナス)でした。
10分毎にデータ送信する場合、平均消費電流値は「5.05mA(25.87mW)」となり、単三型Ni-MH電池(2000mAh)で「16.5日」にわたり稼働できる計算になります。
0.5Wのソーラーパネルの最大能力で3.5時間発電すると、「500mW × 3.5h = 1750mWh」の発電ができる計算になりますが、この発電量で稼働できるのは「1750mWh / 25.87mW = 67.65h = 2.8日」となり、2.8日に1回の割合で晴天の日があれば、このソーラーパネルが発電する電力で常時稼働できることになります。
カメラの初期化を最初に行い、ネットワーク接続処理中にカメラの自動調整を行うようにすれば、自動調整用の4.8秒の待ち時間は不要となり、その分だけ全体の処理時間も短縮できそうです。
このような改善を行うことで、もう少し曇天の日の割合が多くても、このIoTカメラシステムを0.5Wのソーラーパネルで常時稼働できそうな見込みが得られました。
なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。
ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。