先日、「Unit Cam Wi-Fiカメラ」と小型ソーラーパネル、Ni-MH電池を組み合わせた「ソーラーカメラシステム」を畑に設置しました(記事は こちら)。
10分に1枚の間隔で写真を撮影し、その画像をWebサーバに送信・保存するシステムです。ソーラーパネルで発電した電力で、常時稼働できることを目指しています。
設置してから数日が経過しましたが、ちょっとおかしな現象が生じています。
このシステムでは、「画像」をサーバに送信するのと同じタイミングで、Wi-Fiの「RSSI値データ」もサーバに送信・蓄積しているのですが、サーバに保存された画像やデータを確認したところ、どちらもかなりの頻度で欠落していました。
真っ先に疑ったのは「ソーラーパネルでの発電が不十分で、バッテリーが空になったのではないか?」ということですが、時々はデータ送信できており、バッテリーの問題ではなさそうです。
また、画像については、夜間はほとんど送信できていないのに対し、データは夜間も時々送信できています。
つまり「画像・データともに送信できる」「データは送信できるが、画像は送信できない」「画像・データともに送信できない」という3つの状況が発生しています。
これらの状況から、「Wi-Fi通信の問題」と推定しています。
「Wi-Fiにつながらない」という症状の他に、「Wi-Fiにはつながり、小さなデータは送信できるが、大きなデータ(画像)は送信できない」という症状が生じていることになります。
畑には、他にもIoTデバイスやカメラデバイスを設置していますが、これまでこのような症状が生じたことはありません。
今回の「ソーラーカメラシステム」の設置場所は、Wi-Fi接続先の「モバイルWi-Fiルータ」から10メートル程度離れています。また、地表近くの低い場所に設置しています。
Wi-Fiの電波は湿度に弱いため、湿度が高くなる「夜間」に、湿度の高い「地表近く」に設置したデバイスからは、Wi-Fi電波が届きにくいのかもしれません。
もしくは、夜間の温度低下により、デバイスの特性が変わり、動作が不安定になっているのかもしれません。
いずれにしろ、畑には似たような環境でいくつもデバイスを設置していますが、このような症状は発生しておらず、原因は不明です。
原因が特定できていない状況ではありますが、対策を検討しました。
まず「Wi-Fiにつながらない」問題について、現状のスケッチでは、「WiFi.begin()」でのWi-Fi接続処理が、15秒以内に完了しなければ処理を中断するようにプログラミングしています。
この中断までの時間(timeout)を25秒に変更しました。
次に「Wi-Fiで大きなデータが送信できない」問題について、現状のスケッチでは「ESP HTTP Client」というAPIをつかってデータ送信していますが、送信を中断するまでの時間(timeout)がデフォルトで5秒になっているようです。
この値(timeout)を20秒に変更しました。
なお、この変更に伴い、1回の処理にかかる時間が大幅に長くなってしまいます。
こちらは、本システムをつくるにあたり、元にしたデータです。
1回の処理に「8.82秒」かかるという前提で、ソーラーパネルやNi-MH電池の選定を行いました。
ここでは、Wi-Fi接続に2.5秒程度、画像データ送信に0.6秒程度かかっています。
これらの処理がそれぞれ、Wi-Fi接続に25秒、画像データ送信に20秒かかるとすると、1回の処理に「50.72秒」かかるという計算になります。
この時、10分に1枚の写真を撮影した場合の平均消費電流値は、73.7mA * 50.72s / 600s + 1.9mA = 8.13mA となります。
元々想定していた平均消費電流値(2.98mA)よりも大幅に大きくなっており、これではとても、現状のソーラーパネルでは電力を賄えません。
電力的には非常に厳しくなりますが、毎回必ず、これだけ長い処理時間がかかる訳ではないだろうと楽観的に考え、上記の対策を実施することにしました。
対策を実施してから、数日が経過したので、効果を確認してみました。
こちらが対策前の状況です。
横軸は時間軸です。「画像が送信された時刻」「データが送信された時刻」を、それぞれプロットしています。
また、参考情報として、すぐ近くに設置しているIoTデバイスで測定した「温度」「湿度」データも一緒に表示しています。
2日間の結果ですが、両日とも、17時頃から翌7時頃まで、ほとんど画像が送信されていないことがわかります。
また、同じ時間帯において、データの送信も、かなりの割合で失敗しています。
対策後の状況は以下のとおりです。
3日間の結果です。
相変わらず、画像やデータの送信失敗はありますが、頻度は大幅に減少しています。
また、画像・データ送信失敗は、「湿度」よりも「温度」との相関が強いように思います。
完全な問題解決とはなりませんでしたが、これ以上timeout時間を大きくするのは、消費電力の面からも現実的ではないので、しばらくはこの設定で様子を見ることにしようと思います。
2022年4月12日追記
カメラを設置してから20日ほど経過したので、あらためてデータ・画像の送信状況を確認してみました。
結果は以下のとおりです。
対策実施の前後で、大きな違いは見られませんでした。
やはり、気温が低いときに送信失敗する頻度が高いようです。
4月上旬には、同じ構成のカメラをもう一台設置しましたが、そちらは更にWi-Fiルータから離れているためか、夜間には全く画像送信できていません。
いくら気温が低いとはいっても、もう4月になっており、氷点下になることもありません。気温が一桁(10℃以下)ぐらいになると画像が送信できなくなっているように見えます。
この程度の気温で画像送信できないとなると、いろいろと支障もありそうですが、現時点では原因の特定も対策検討もできていません。
もう少し調査を継続して、気温が高くなってきてからの様子を見てみようと思います。