← До всіх проєктів
Сенсори Початковий

DHT22: температура й вологість у моніторі порту

Найпопулярніший датчик клімату для початківців. Підключення по одному дроту з підтяжкою, бібліотека Adafruit DHT, перевірка на NaN і чому DHT22 не можна опитувати частіше ніж раз на 2 секунди.

Складність
Початковий
Час
20 min
Категорія
Сенсори
Оновлено

Про проєкт

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».