安い温湿度センサ。
秋月やaitendoなどでも売っているが、今回はtaobaoで買ってみた。
DHT11とは
1本のワイヤーで通信する。I2Cとかではなく独自プロトコルらしい。
メーカーAOSONG社の製品ページ
http://www.aosong.com/products-21.html
メーカーサイト上のデータシート(中文版)
http://www.aosong.com/userfiles/files/media/DHT11-V1_3%E8%AF%B4%E6%98%8E%E4%B9%A6%EF%BC%88%E8%AF%A6%E7%BB%86%E7%89%88%EF%BC%89.pdf
英語版のデータシート(秋月電子のサイト)
http://akizukidenshi.com/download/ds/aosong/DHT11_20180119.pdf
DHT11 の Arduinoライブラリ
一般的によく使われるもの
「Adafruit Unified Sensor Library」を別にインストールする必要がある
ESP32のためのスペシャルライブラリ
こちらは「Adafruit Unified Sensor Library」は必要ないみたい。
ドキュメントによると、汎用のDHTシリーズ用のライブラリはESP32で使用するのに問題があるらしい。
そして、このライブラリだと
The library is tested as well on ESP8266 and should work > on AVR boards as well.
とあるので、このライブラリを使用することにした。
インストール
「ツール」-「ライブラリを管理」で
DHT sensor library for ESPx by beegee_tokyo を選んでインストール
プルアップ
DHTesp ライブラリのドキュメントによると、
Important is that a 10kΩ or at least 4.7kΩ resistor is needed between the data line and VCC. Sometimes this resistor is already integrated in the module, sometimes its necessary to add it.
とある。
センサーの殻を割って中身を見てみたが信号線にプルアップはされていなかった。
ここで言う「already integrated in the module,」というのは下のようなモジュールを指しているようだ。
プルアップをせずに通信してもデータは取得できたけれども、外部に抵抗はつけるべき。
2020/08/07 追記
このあと、CHECKSUMエラーや異常値が頻発していた抵抗なし環境に、プルアップ抵抗を追加したら安定する事例がありました。抵抗値はたまたま手元にあった 9.2kΩ を使いました。
プログラム
#include "DHTesp.h"
#define DHTPIN 32
DHTesp dht;
void setup() {
Serial.begin(115200);
dht.setup(DHTPIN,DHTesp::DHT11);
}
void loop()
{
TempAndHumidity newValues = dht.getTempAndHumidity();
if (dht.getStatus() != 0) {
Serial.println("DHT11 error status: " + String(dht.getStatusString()));
}
float temp = newValues.temperature;
float hemi = newValues.humidity;
Serial.print(temp);
Serial.print(" ");
Serial.println(hemi);
delay(2000);
}
トラブルシューティング
計測間隔を、0.1秒ごとにしたら以下のようなエラーが頻発した。
26.50 48.00
nan nan
DHT11 error status: TIMEOUT
nan nan
DHT11 error status: TIMEOUT
nan nan
DHT11 error status: TIMEOUT
nan nan
26.40 48.00
26.40 48.00
26.40 48.00
26.40 48.00
26.40 48.00
26.40 48.00
26.40 48.00
26.40 48.00
26.40 48.00
26.40 48.00
DHT11 error status: TIMEOUT
nan nan
DHT11 error status: TIMEOUT
nan nan
2秒毎にしたら解消。