ESP32 の長期屋外動作データ

電子工作
スポンサーリンク

ESP32 をワイヤレス温度センサーとして運用した際に,長期動作の際に参考になりそうな様々なデータも同時に取得したので紹介します.

スポンサーリンク

はじめに

紹介するデータは『ESP32 と乾電池で実現する WiFi 温湿度センサー』のものになります.

屋外に置いた場合,温度や雨などの外部環境の影響を受けます.それらの影響を受けてもなるべく安定的に動作させる仕組みを組み込んでいたので,その動きも絡めながら説明したいと思います.

WiFi 電波強度

最初に紹介するのは ESP32 が受信するアクセスポイントの電波強度です.
緑色が強度で,数字が大きいほど強い電波が届いています.黄色はWiFiのチャンネルを示しています.

電波強度とチャンネルには大きな相関が見えると同時に同じチャンネルでも電波強度が変化しているのが読み取れます.それぞれの要因については次のように推定しています.

電波強度とチャンネルの相関
近所の家から漏れてくるWiFi電波の影響と思われます.
我が家ではアクセスポイントとして Ubiquiti の UAP-AC-HD を使っているのですが,この機器は周囲の電波環境に基づいて毎日深夜に自動的に使用チャンネルを変更する機能を持っています.従って,周囲の電波環境が変化したことにより,ESP32が受信する電波強度とアクセスポイントのチャンネルが同時に変化したと考えています.
同じチャンネルでの電波強度の変化
原因の一つは雨と思われます.
電波強度と雨量計で観測した降水量をプロットすると次のようになります.雨が降ると電波強度が 5dB 程度小さくなる傾向が確認できます.

ちなみに,ケースの壁と距離を空けずに ESP32 を固定すると雨滴の影響がもっと顕著に現れます.水の付着の仕方によっては通信できなくなったことがあります.

全体として,さほど良好でない -70dBm 程度の WiFi 環境でも乾電池で長期安定運用できたことが読み取れます.

WiFi 接続時間

続いて,ESP32 が WiFi 接続を開始してからIPの取得が完了するまでの時間をプロットすると次のようになりました.電波強度も合わせてプロットしています.

以前『ESP32 の無線 LAN 通信の電力削減』で紹介しましたように,ULPを活用する際に電池寿命を最も左右するのがこの時間になります.

ほとんどの場合,600ms 程度で完了しており,意図通りになっていますが,時々2秒以上かかっている場合もあります.傾向としては電波強度が弱くなると接続時間のばらつきも大きくなっていることが読み取れます.

ある程度データを蓄積すれば,電波強度から電池寿命の推定もできそうです.

WiFi 再接続回数

作成したセンサーでは,WiFi接続に失敗しても1分おきに最大100回リトライするようにしています.データが正常に送信できるまでに何回リトライしたかをプロットしたのが次のグラフです.

12時間毎の平均値になっているので数字は小さくなっていますが,そこそこリトライが発生しているのが読み取れます.
回数が大きくなっている9月頃を拡大するとこんな感じです.

原因はよくわからないのですが,30回以上のリトライが2日連続で発生してしまっています.環境によると思いますが.安定運用するためにはこの程度の回数のリトライは考慮しておいた方が良さそうです.

リトライしている間にデータをESP32に溜め込んでおくためのバッファの確保も忘れずに.

累積接続回数

作成したセンサーでは,温湿度を送信する際に累積の送信回数も送るようにします.この回数は,ESP32 がリセットしない限り増えていきます.

これをプロットすると次のようになります.

電池が尽きる一ヶ月以上前に5回,そして電池が尽きる前の数週間に何度かカウンタがリセットされています.

それぞれの要因は下記になります.

電池が尽きる一ヶ月以上前
なんらかの要因での動作フリーズ.
作成したプログラムでは,次のようにしてWatchDogTimerを有効化し,30秒間CPUが動作し続けたらCPUをリセットするようにしてあります.

通常であれば,Deep Sleep から CPU が起きてデータ送信してまた眠るまでの時間は10秒にも満たないはずなので,処理がフリーズした時のみリセットされることになります.
電池が尽きる前の数週間
こちらは単純に電池の電圧低下と思われます.
電池が尽きる直前を拡大すると次のようになっており,カウンタが徐々に伸びなくなって最後の方では数回に1回程度リセットするようになっています.

長期運用を考えると,WatchDogTimerを仕込んでおくのがおすすめです.これがないと,調子良く動いていても,何らかの要因でフリーズしたらそこでお終いになってしまいます.

以上,参考になれば幸いです.

コメント