5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

温湿度センサ DHT11 on arduino-esp32

Last updated at Posted at 2020-01-28

安い温湿度センサ。

IMG_20200128_173024.jpg

秋月やaitendoなどでも売っているが、今回はtaobaoで買ってみた。

image.png

単価50円ぐらい。
IMG_20200128_153402.jpg

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.

とある。

センサーの殻を割って中身を見てみたが信号線にプルアップはされていなかった。
IMG_20200128_153427.jpg

ここで言う「already integrated in the module,」というのは下のようなモジュールを指しているようだ。
IMG_20200128_172943.jpg

プルアップをせずに通信してもデータは取得できたけれども、外部に抵抗はつけるべき。

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秒毎にしたら解消。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?