前回、三端子レギュレータを取り付け、現在連続運転中です。実際に動かしてみていくつか気になった箇所があったので修正しました。
1.ソース修正 v3.0b → v3.0c
修正点
- 関数を追加し、loopを簡潔にする。
- 過放電保護電圧を3.6V→4.0Vに変更する。
- WiFi接続時間を計測し、サーバに送信する。
(1)loop
電圧を測定する部分と文字列を作成する部分を、それぞれ関数measure_Vc()とmk_String()に移し、loop文をシンプルにしました。同時にsetupWiFi2()にかかる時間をt2に代入し、本来気圧を記録する箇所にt2を記録します。
三端子レギュレータがVin>3.8Vなので、過放電保護電圧は4.0Vにします。
void loop(){ int YN_Wifi=0; measure_Vc(); //<---電圧測定 read_SHT31(); //<---温湿度測定 if(Vc>4.0){ //<---過放電保護 t1=millis(); YN_Wifi = setupWiFi2(); //<---WiFi接続 t2=millis()-t1; //<---WiFi接続時間測定 } mk_String(); //<---文字列作成 if(YN_Wifi==1) Post2(); //<---文字列をサーバに送信(POST) if(YN_Wifi==1) WiFi.disconnect(); //<---WiFi切断 Display_Pic3(1); //<---OLED表示 DeepSleep(); //<---睡眠 delay(1000); }
(2)関数 measure_Vc()
電池電圧を測定します。
1.081は実測との暫定補正値。実測中Vc=4.8Vになった時にテスタで測定し修正したいと思います。現在は、電圧=5.20Vに対して、テスタ測定値=5.13Vでした。
void measure_Vc(){ //<---(200922) digitalWrite( 4, HIGH ); delay(10); int A32 = analogRead(32); digitalWrite( 4, LOW ); Vc = (long)A32 * 3.3 * 2 /4096 *1.081; Serial.print("Vc="); Serial.println(Vc); }
(3)関数 mk_String()
c[]とdataを作成します。
data文の4行目で、 ", Press5= " + String(t2) + " [ms]"として、サーバーでWiFi接続時間をチェックできるようにします。
void mk_String(){ //<---(200922) c[1]=String(temp_31 ) + " degC"; c[2]=String(humid_31 ) + " %"; c[3]=String(Vc ) + " V"; data = "Vc= " + String(Vc) + " [V]"; data += ", Temp5= " + String(temp_31) + " [degC]"; data += ", Humid5= " + String(humid_31) + " [%]"; data += ", Press5= " + String(t2) + " [ms]"; data += "||data>text"; Serial.println(data); }
2.実測値
SQLiteに格納したデータは、DB Browser for SQLite↓で簡単に確認できます。
https://sqlitebrowser.org/
(1)WiFi接続時間
WiFi接続時間はPress5の列に収納されています。1100ms台または-1600ms台で接続できています。トライ1または2で接続できているということなのでしょう。
今はESP32とWiFiルータの距離が1m程度なのでリトライ回数は最少と考えておくべきでしょう。そのうち、通信距離と接続時間の関係を調べたいと思います。
(2)温度
下は、Time vs Temp グラフです。
【要注意】今日12:00-15:00に、あきらかにおかしな数値のデータが並んでいたので削除しました。I2Cの配線が甘い箇所があるのかなぁ、と思いつつ今は放置。