v3.1aは、24日目で三端子レギュレータの故障で止まってしまいました。三端子レギュレータを交換後、v3.1bにバージョンアップすることにしました。
v3.1bではESP32のRTPメモリを使って、温度変化が小さい時はデータ通信しないようにします。
Global
前回アップロードした温度を格納する変数を lastTemp とします。
RTC_DATA_ATTR int bootCounter = 0; RTC_DATA_ATTR float lastTemp = 0;
setup
RTCメモリ=オフをコメントアウトします
setup(){ esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF); esp_deep_sleep_pd_config(ESP_PD_DOMAIN_MAX, ESP_PD_OPTION_OFF); //esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_OFF); //esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_OFF); }
loop
前回値と今回値の差(d_Temp)を求め、|d_Temp|>0.2 の時にのみ測定値をアップロードします。
loop(){ float d_Temp = 0.0; bootCounter ++ ; d_Temp = lastTemp - temp_31; d_Temp = sqrt(d_Temp*d_Temp); if(Vc>3.0){ //<---過放電保護 if(d_Temp > 0.2){ //<---温度が0.2C変化したらUpLoad t1=millis(); YN_Wifi = setupWiFi2(); //<---WiFi接続 t2=millis()-t1; lastTemp = temp_31; //<---lastTempを更新 } } mk_String(); if(YN_Wifi==1) Post2(); //<---データ送信 if(YN_Wifi==1) WiFi.disconnect(); sleepDisplay(); //<---SSD1306 をSleep //Display_Pic3a(1); DeepSleep(); delay(1000); }
実測
測定間隔=15minなので、17-21時の間は半分近く間引けています。これで1ヵ月稼働いけるかな。