Датчик DHT22 (AM2302): характеристики, подключение к Arduino и частые ошибки
DHT22 — самый простой способ научить устройство измерять температуру и влажность. Один датчик, один сигнальный провод, готовая библиотека — и через десять минут у вас на экране цифры. За это его и любят: он прощает новичку почти всё, кроме двух вещей, о которых ниже.

Что это за датчик
Внутри белого пластикового корпуса стоят ёмкостный датчик влажности и термистор, а рядом — маленький контроллер, который сам их опрашивает и отдаёт наружу уже готовые цифры. Никаких аналоговых сигналов и калибровочных таблиц: датчик сразу говорит «23,4 градуса и 47,8 процента». Второе имя того же устройства — AM2302, это одна и та же вещь, просто в другом корпусе и с проводами.
Характеристики
| Питание | 3–5 В |
| Влажность | 0–100 %, погрешность 2–5 % |
| Температура | −40…+80 °C, погрешность ±0,5 °C |
| Период опроса | не чаще одного раза в 2 секунды (0,5 Гц) |
| Интерфейс | однопроводный, собственный протокол |
| Ток в момент измерения | до 2,5 мА |
| Размер корпуса | 15,1 × 25 × 7,7 мм |
| Выводы | 4 штырька с шагом 2,54 мм |
Главная строчка здесь — период опроса. Датчик физически не умеет отвечать чаще, чем раз в две секунды, и попытка дёргать его в цикле без задержки даёт не «более свежие данные», а ошибки чтения.
Подключение к Arduino
У модуля четыре ножки, если смотреть на решётку спереди — слева направо:
- 1 — питание, идёт на 5V (или 3.3V, если плата на 3,3 вольта);
- 2 — данные, на любой цифровой пин, в примере ниже это D2;
- 3 — не используется, оставьте в воздухе;
- 4 — земля, на GND.
Между питанием и линией данных нужен подтягивающий резистор на 10 кОм. В модулях на плате он уже впаян — тогда ножек три и резистор не нужен. У «голого» датчика с четырьмя ногами его придётся поставить самому: без него чтения будут срываться через раз.
Код
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
delay(2000); // датчик не отвечает чаще, чем раз в 2 секунды
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) { // проверять ОБЯЗАТЕЛЬНО
Serial.println("Датчик не ответил");
return;
}
Serial.print("Влажность: ");
Serial.print(h);
Serial.print(" % Температура: ");
Serial.print(t);
Serial.println(" C");
}
Нужна библиотека DHT sensor library от Adafruit и вместе с ней Adafruit Unified Sensor — вторая ставится отдельно, и именно её обычно забывают, после чего скетч не компилируется.
Частые ошибки
- Опрос чаще двух секунд. Самая частая причина «датчик врёт» и «выдаёт nan». Уберите задержку — и получите мусор вместо данных.
- Нет проверки на nan. Датчик иногда пропускает чтение — это нормально. Без проверки в лог уезжают пустые значения, а на дисплей — «nan».
- Забыт подтягивающий резистор на четырёхногом датчике. Работает нестабильно: то читает, то нет.
- Длинный провод. Больше метра — и сигнал начинает сыпаться. Если нужно дальше, берите экранированный провод и снижайте частоту опроса.
- Установлена только библиотека DHT, без Adafruit Unified Sensor. Компилятор ругается на отсутствующий заголовок.
- Датчик греется от соседних деталей. Стоит рядом со стабилизатором или процессором — покажет температуру платы, а не воздуха. Выносите его в сторону.
Когда брать, а когда нет
DHT22 хорош там, где нужна бытовая точность и простота: комнатная метеостанция, теплица, контроль влажности в подвале, домашняя автоматика. Он дёшев, не требует пайки и заводится с первого раза.
Не берите его, если нужны быстрые измерения, точность лучше половины градуса или работа от батарейки месяцами — там уместнее цифровые датчики с шиной I2C, которые умеют спать и опрашиваются хоть десять раз в секунду. Но для первого проекта DHT22 остаётся лучшим выбором: на нём понятно, как вообще устроено измерение.
Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.