Температура от −40 до 80 °C и влажность 0–100 % по одному проводу. Медленный, но простой: библиотека делает всю работу, от вас — один вывод и пауза между чтениями.
Как работает
DHT22 передаёт данные по собственному однопроводному протоколу: контроллер опускает линию, датчик отвечает сорока битами — влажность, температура и контрольная сумма. Длительность каждого бита решает, ноль это или единица, поэтому читать протокол руками неудобно — берут библиотеку DHT sensor library (Adafruit): dht.readTemperature() и dht.readHumidity().
DHT11 — младший брат: хуже точность (±2 °C, ±5 %), только положительные температуры, но тот же протокол и та же библиотека.
Выводы
Вывод
Назначение
NC
не подключается
SDA
линия данных (в документации — DATA); нужна подтяжка 10 кОм к питанию
#include <DHT.h>
// DHT22 на выводе 4. Шины здесь нет вовсе: обмен идёт по одной линии,
// импульсами разной длины, и всю работу делает библиотека.
//
// Датчик медленный, и это не библиотека тормозит. Внутри он измеряет
// около двух секунд, а между опросами ему нужен покой: спросите чаще —
// получите прошлое значение или NaN. Отсюда delay в конце цикла.
//
// Проверка на NaN обязательна. Отвалившийся провод не даёт ни ошибки,
// ни исключения: возвращается «не число», и любая арифметика с ним
// тихо превращается в бессмыслицу.
#define DHTPIN 4
#define DHTTYPE DHT22
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, 1);
Serial.print(" h:");
Serial.println(h, 1);
delay(2000);
}
В железе
На модуле (плата с тремя выводами) подтягивающий резистор обычно уже стоит. У голого датчика с четырьмя ножками его ставят сами: 10 кОм между DATA и VCC.
Частые ошибки
Чтение чаще раза в 2 секунды — датчик не успевает, и библиотека возвращает NaN.
Нет подтягивающего резистора у голого датчика — линия висит, данные не приходят.
Длинный провод (больше 20 м) без понижения скорости опроса и с тонкими жилами — ошибки контрольной суммы.
Проверяйте результат через isnan() — NaN, выведенный на экран как число, выглядит как «датчик врёт».