日本家屋の床下は湿気を呼びやすく、カビの原因となり、木材腐朽菌の繁殖などで喘息やアレルギーを誘発する恐れがあります。防湿対策を施工するにあたり、施工前の状態と施工後の状態を比較できるよう、湿度をメインにしたロガーを作成します。
温度センサーはBME680を用意しました。MCUにはM5Atomとし1時間のDeepSleep設定。一時間ごとに計測データを、MQTTでPub、ラズパイのブローカーに投げることとしました。
住環境の湿度は絶対湿度を使うとのことで、絶対湿度を計算します。
float temp,humid,absHum;
float E,Ep;
E = 6.11 * pow(10, (7.5 * temp) / ( 237.3 + temp ));
Ep= E * (humid / 100);
absHum= 217 * Ep / (temp + 273.15) ;M5Atomは、WiFiが繋がりにくい傾向があり、調べると解決策がありました
分かったのはM5ATOMでUSB-UART変換にUSBマイコンCH552Tを5V IOで使っており、GPIO出力(pin 5)がESP32 IO0に2.7kΩ抵抗経由で接続されていること、CH552出力で実測4.3V、ESP32入力で3.9Vになっていることを確認しました。この入力3.9VはESP32動作保証外になります。A11はADC2で、Wifi有効のときADC2を内部的にWifi機能で使っています。
IO0などADC2機能を持つポートに動作保証外の電圧を加えるとWifiが誤動作するようです。
pinMode(0,OUTPUT);
digitalWrite(0,LOW):
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());センサーデータをjson形式で送信
#include <ArduinoJson.h>
doc["Date"] = dateStr;
doc["Time"] = timeStr;
doc["Temp"] = strTemp;
doc["Press"] = strPress;
doc["Humid"] = strHumid;
doc["absHumid"]= strAbsHumid;
serializeJson(doc, outputtext, 120);
mqttClient.publish(pubTopic, outputtext);M5Atom側センサーデバイスのWiFiアクセスポイントの選択機能を追加
スマホでアクセスポイントを選択できるようにします

コメント