2022年4月27日水曜日

ESP32 きっちり1時間ごとに温湿度を計測してスプレッドシートに送る

 温湿度センサー(DHT11)で測定したデータを、1時間おきにスプレッドシートに記録するデバイスです。これさえあれば、毎日の平均気温を測定して積算気温を求め、スイカの一番食べごろの時にばっちり収穫できるはずです。(去年は割ってみて食べられそうなやつのみ食べた。)


電池で駆動できるように、測定しない時間はDeepSleepします。

BME280を使えば気圧も測定できますが、現在BME280はRaspberryPiZEROに使っているので、たまたま手元にあったDHT11を使用しました。

DHT11は温度の誤差が±2℃なので、より精度の高いDHT20やBME280の方がオススメです。

DHT11は独自仕様の1Wire接続なので、I2C接続のDHT20のほうが誤動作が少ないかもしれません。


機能

  • DHT11を使って温度と湿度を測定
  • NTPサーバに接続してRTCを自動設定し、きっちり1時間おきに測定(±30秒ほど)
  • 測定したデータはPCからもスマホからも確認できるようにGoogleスプレッドシートに記録。
  • 電池駆動で半年くらい持つようにディープスリープする

デバッグ中なのでESP32EDevKitを使っていますが、実際にはESP32E+3.3vレギュレータ+センサの構成になります。作りました

接続

  • ESP32  <-> DHT11
  • 3V3 <-> VCC
  • GND <-> GND
  • IO25 <-> DATA

オプションでエラー表示用にLEDを追加。エラーはいちおうスプレッドシートからも確認できるようにしています

ESP32 IO13 -> LED

実際の動作

ESP32にクリスタルを使っていないのと、ネットワークのコンディションなどの理由でウェイクアップ時間に数秒の誤差がありますが、いちおう±30秒以内に収まっています。



DHT11の誤動作?

DHT11ライブラリが、既存のものだと頻繁に誤動作したため少し書き直しています。

どうやらTreh(response signalのHIGHの時間)が定格より短くなることがあるようです。

→後日、DHT20と交換しました。

スケッチ

1:新規スケッチを用意して、ESP32_TemperatureLogger.inoをコピー
2:スケッチ>スケッチのフォルダを表示を選択して、DHT11Interface.cppとDHT11Interface.hを作成
3:コンパイルしてESP32に書き込み
4:スプレッドシートを新規作成して、拡張機能>AppsScriptを選択
5:スクリプトをコピー、デプロイ
AppsScriptについては使い方を勉強中なので、そのうち‥




0 件のコメント:

コメントを投稿