DHT11 общается по одному проводу: датчик отвечает на стартовый импульс 40 битами — влажность, температура и контрольная сумма. Библиотека DHT скрывает это за двумя вызовами: readTemperature() и readHumidity().
По сравнению с DHT22 датчик грубее: целые градусы (0–50 °C, ±2 °C) и проценты (20–90 %, ±5 %), опрос не чаще раза в секунду. Если нужны отрицательные температуры и десятые доли, берите DHT22.
#include <DHT.h>
// DHT11 на выводе 4. Обмен идёт по одному проводу импульсами разной
// длины, всю работу делает библиотека. Датчик отдаёт целые градусы и
// проценты и опрашивается не чаще раза в секунду.
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println(F("датчик не ответил"));
delay(2000);
return;
}
Serial.print("t:");
Serial.print(t, 0);
Serial.print(" h:");
Serial.println(h, 0);
delay(2000);
}
В железе
У готового модуля с тремя выводами подтяжка линии данных уже распаяна. У голого датчика с четырьмя выводами подтяжку 4,7–10 кОм между DATA и VCC ставят сами, а третий вывод не используется. Порядок выводов у разных модулей отличается: сверяйтесь с надписью на плате.
Частые ошибки
Датчик DHT11 в скетче объявлен как DHT22 (#define DHTTYPE DHT22): разбор кадра другой, показания неверные или nan.
Нет подтяжки у голого датчика: линия данных висит в воздухе, библиотека возвращает nan.
Опрос чаще раза в секунду: датчик молчит или отдаёт старое значение.
Попытка измерить температуру ниже нуля: DHT11 работает от 0 °C.