DHT22: температура й вологість у моніторі порту
Найпопулярніший датчик клімату для початківців. Підключення по одному дроту з підтяжкою, бібліотека Adafruit DHT, перевірка на NaN і чому DHT22 не можна опитувати частіше ніж раз на 2 секунди.
Про проєкт
DHT22 (AM2302) вимірює температуру (−40…80 °C, ±0.5 °C) і відносну вологість (0–100 %, ±2–5 %) і передає їх одним сигнальним дротом. Це найкоротший шлях до першої метеостанції. Тут лише базове читання в монітор порту. Далі дані можна показати на веб-сторінці, OLED або TFT.
Що знадобиться
- ESP32 DevKit
- DHT22 (білий) — на модулі з трьома виводами або окремий датчик із чотирма
- Резистор 10 кОм, якщо у вас датчик без модуля
- Бібліотека DHT sensor library (Adafruit, разом з Adafruit Unified Sensor)
Схема
| DHT22 | ESP32 |
|---|---|
| VCC (+) | 3V3 |
| DATA (OUT) | GPIO4 |
| GND (−) | GND |
Лінії DATA потрібна підтяжка 4.7–10 кОм до VCC. На модулях (плата з трьома виводами) вона вже стоїть, а до голого датчика з чотирма ніжками резистор треба поставити самому. Третю ніжку голого датчика не підключають.
Як це працює
DHT22 має власний мікроконтролер. ESP32 надсилає стартовий імпульс, датчик відповідає 40 бітами (вологість, температура, контрольна сума), закодованими тривалістю імпульсів. Бібліотека DHT.h бере все це на себе.
Важливі властивості:
- Не частіше ніж раз на 2 секунди. Датчик повільний, і часте опитування дає старі значення або помилки. Бібліотека кешує результат.
- Помилка читання — це
NaN, а не 0. Перевіряйтеisnan(), інакше в графіках з'являться дивні нулі. - DHT11 (синій) дешевший, але грубіший: крок 1 °C і 1 %, діапазон 0–50 °C. У коді змінюється лише тип:
DHT dht(4, DHT11).
Код
// DHT22: температура і вологість раз на 2.5 с
#include <DHT.h>
DHT dht(4, DHT22); // DATA на GPIO4
void setup() {
Serial.begin(115200);
dht.begin();
}
void loop() {
float t = dht.readTemperature(); // °C; readTemperature(true) — °F
float h = dht.readHumidity(); // %
if (isnan(t) || isnan(h)) {
Serial.println("Помилка читання DHT");
} else {
Serial.printf("T = %.1f °C H = %.0f %%\n", t, h);
}
delay(2500); // DHT22 оновлює дані не частіше ніж раз на 2 с
}
Типові помилки
- Постійно «Помилка читання». Немає підтяжки на DATA, переплутано VCC/GND, в коді не той GPIO або тип датчика.
- Температура завищена на 1–3 °C. Датчик стоїть поруч з ESP32 або стабілізатором, які гріються. Винесіть його на дроті або в окремий відсік корпусу.
- Вологість «залипла» на 99 %. Датчик намок або довго був у конденсаті. Просушіть його кілька годин за кімнатної температури.
Що далі
- Відчуттєва температура (heat index). Бібліотека рахує
computeHeatIndex(t, h, false). - Веб-сторінка з показаннями: див. статтю «Міні-метеостанція: температура й вологість DHT22 у браузері».
- Кольорова панель на TFT: стаття «Метеостанція на кольоровому TFT».