最近、この記事に書いていた機器が壊れてしまったため、IoT温湿度計とIoTプラットフォームを一新することにしました。
以前にも、電池での運用を想定したテストをしたことがあったのですが、改めて次の環境でテストしてみることにしました。
テスト環境
- マイコン:XIAO ESP32C3
- 温湿度センサー:DHT20
- DCDCコンバーター:AE-XCL103
- 電源:単4アルカリ電池2本
- IoTプラットフォーム:Arduino Cloud
テストで使用した電池の詳細
・単4形アルカリ乾電池 ゴールデンパワー製 - 秋月電子通商
公称容量:1060mAh
1分間隔で計測した、電池の電圧グラフ
9月3日の0時から1分間隔(ディープスリープ)で計測して、動作しなくなるまでのグラフです。
開始から約6時間2900mVぐらいで一定でしたが、その後、約8時間で100mV低下するペースで電圧が下がり、もう少しで丸2日となる23時50分に2420mVで力尽きました。
今回は1分間隔での動作だったので、30分間隔にすれば2ヶ月近く持つかもしれず、単3電池に変えれば3ヶ月以上持つ可能性もあります。
ちなみに、動作が止まった時の電池の電圧をテスターで測ったらこのようになりました。
電圧はanalogReadMilliVolts()
で計測していたのですが、やっぱり誤差があるようです。
ハードウェア
回路図
配線図
実装写真
Arduino Cloud
Arduino Cloudは、Arduino IDEやダッシュボード機能、MQTTブローカーなど、IoTプロジェクトに必要な機能を全て兼ね備えたオールインワンプラットフォームを提供するクラウドサービスです。
特徴的なのは、ネットワークに関わるコードを自分で書く必要がないようにデザインされていることで、マイコンのプログラムでは「クラウド変数」を自分で定義した変数と同じように扱うだけで、クラウドと情報のやり取りができてしまいます。
クラウド変数
Arduino CloudでIoTプロジェクトを始めるときは、最初に「Things」を作ってクラウド変数を追加することから始めます。
今回は、温度・湿度・電圧・間隔の4つのクラウド変数を使いました。
クラウド変数の詳細な設定は次の表の通りです。
クラウド変数の追加が終わったら、デバイスを割り当ててネットワーク情報を登録します。
スケッチ
Arduino Cloudにはスケッチを公開する機能がありますが、Thingsのスケッチは公開できないため、コードのタブだけのスケッチを新たに作りました。
次のリンクからスケッチが表示できます。
https://app.arduino.cc/sketches/f4a00780-7ff3-4dfd-84ab-4d7411f4b6b5?view-mode=preview
自分で書くコードはたったこれだけです。
41行目のonPeriodChage()
関数は使用していないので削除したいところですが、自動生成されたthingsProperies.hにプロトタイプ宣言されているため、削除するとコンパイルエラーになります。
クラウド変数追加時に「Variable Permission」を「Read & Write」にすると、この「on変数名Change」という関数ができて、クラウド変数が変化したタイミングで呼び出されるようになります。
今回のプログラムは、動作間隔(ディープスリープする時間)をクラウドから指示できるようにするためにこの変数を使っています。
プログラムを書き込む前にダッシュボードを作って、予め動作間隔を指定してあげてください。
Arduino Cloudはクラウド変数を明示的に送ることができないため、loop()
でクラウド変数が送られる猶予を作ってあげてからディープスリープに入るようにする必要があるので注意してください。
ダッシュボード
今回使用したダッシュボードを参考として載せておきます。