温度センサーにおける具体例(#5 おまけ)

試作で作成したセンサーを稼働させていましたが、ある時からデータが止まってしまいました。原因を調べると、液晶表示は問題なく、どうもネットにデータが送れていないようです。サーバ側は問題ないので、Wi-Fi接続がどうも切断されたままのようです。

以前に「WiFiが切断されても環境が整えば自動的に再度、自動接続」と記載しました。これは正確には WatchDogs が働いて、wdt reset でリスタートが掛かかり、WiFiが回復してくれるためです。ただ今回、この機能は働かずリスタートが掛からなかったと判断するのが妥当だと考えました。

そこでWiFi.status()を確認し、WL_CONNECTED(=3)であるかを見て、再接続を実施。それでも接続しない場合は、ESPを再起動というルーチンを加えることにします。

void wifiCheck() {
   if (WiFi.status() != WL_CONNECTED) {
     WiFi.disconnect();
     delay(50);
     // 前回情報で接続する…  
     WiFi.begin();
     int i = 40; // 10秒程度待つ…
     // 結局は、回復しないで、wdt reset になるので、直ぐ自分で restart させた方が良いかも。
     while (WiFi.status() != WL_CONNECTED) {
       delay(250);
       i--;
       if (i < 0) {
         ESP.restart();
       }
     }
   }
 }

これをloop()から読み出していきます。これで様子を見てみることにします。

コメント