温湿度ロガーの制作

日本家屋の床下は湿気を呼びやすく、カビの原因となり、木材腐朽菌の繁殖などで喘息やアレルギーを誘発する恐れがあります。防湿対策を施工するにあたり、施工前の状態と施工後の状態を比較できるよう、湿度をメインにしたロガーを作成します。

温度センサーは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アクセスポイントの選択機能を追加

スマホでアクセスポイントを選択できるようにします

コメント