Компоненты · 5 мин чтения

Датчик температуры и влажности DHT11: руководство для Arduino, ESP32 и Pico

Что такое датчик температуры и влажности DHT11 и как он работает? Подключение к Arduino, библиотека DHT, пример кода, отличия DHT11 от DHT22, работа с ESP32 и Pico и частые ошибки.

DHT11 — недорогой цифровой датчик в синем пластиковом корпусе, который по одному проводу данных передаёт и температуру, и относительную влажность. Он встречается почти в каждой метеостанции на Arduino, системе контроля теплицы и цветов, термометре для детской и проекте умного дома, который включает вентилятор при росте влажности. В отличие от аналогового датчика, здесь не нужно измерять напряжение и возиться с формулами: датчик отправляет показание готовым числом.

Датчик температуры и влажности DHT11
DHT11: внутри синего корпуса с решёткой находятся чувствительный элемент влажности и крошечный термистор.

Что такое DHT11 и где он используется?

Датчик измеряет относительную влажность: сколько процентов от максимально возможного при данной температуре количества водяного пара содержит воздух. Комфортной считается влажность 40–60%; выше 70% — это сырость и плесень, ниже 30% — сухой воздух. DHT11 измеряет это значение и температуру окружающей среды примерно раз в секунду.

  • Домашняя метеостанция: вывод температуры и влажности на LCD- или OLED-дисплей.
  • Контроль теплицы и растений: предупреждение при падении влажности и полив вместе с датчиком влажности почвы.
  • Сигнализация сырости и плесени: звуковой сигнал, когда в ванной, подвале или шкафу влажность превышает 70%.
  • Автоматический вентилятор или осушитель: включение устройства через реле при превышении порога влажности.
  • Регистратор данных: запись показаний на SD-карту и построение графика за день.
  • Удалённый мониторинг: с помощью ESP32 значения выводятся на веб-страницу, которую можно открыть с телефона.

Как работает DHT11?

Внутри корпуса два чувствительных элемента. Элемент влажности — это влагопоглощающий материал между двумя электродами: чем выше влажность воздуха, тем ниже его сопротивление. Температура измеряется NTC-термистором — маленьким резистором, сопротивление которого падает при нагреве. Крошечный микроконтроллер внутри датчика измеряет оба сопротивления, корректирует их по калибровочным значениям, записанным на заводе, и отправляет результат в цифровом виде.

Обмен данными идёт по одному проводу. Arduino будит датчик, удерживая линию данных в состоянии LOW не меньше 18 миллисекунд, а датчик отвечает пакетом из 40 бит: 16 бит влажности, 16 бит температуры и 8-битная контрольная сумма, чтобы отлавливать ошибочные показания. Писать эти тайминги самому не нужно: библиотека, которую мы установим ниже, всё сделает за тебя.

Характеристики: DHT11 и DHT22

ПараметрDHT11DHT22 (AM2302)
Напряжение питания3–5,5 V3,3–6 V
Ток во время измерения0,5–2,5 mA1–1,5 mA
Диапазон температур0–50 °C−40–80 °C
Точность по температуре±2 °C±0,5 °C
Диапазон влажности20–90%0–100%
Точность по влажности±5%±2% (макс. ±5%)
Разрешение1 °C / 1%0,1 °C / 0,1%
Частота опросаРаз в секундуРаз в 2 секунды
Цвет корпусаСинийБелый
Датчик температуры и влажности DHT22 AM2302
DHT22 (AM2302): «старший брат» в белом корпусе, точнее и умеет измерять температуру ниже нуля.

Коротко: если нужно примерно следить за температурой и влажностью в помещении, хватит DHT11, и он дешевле. На улице, при минусовой температуре или там, где важны полградуса, выбирай DHT22. Подключение и код у них одинаковые; в коде меняется только тип датчика.

Распиновка и подключение DHT11

DHT11 продаётся в двух вариантах: модуль с 3 пинами, на плате которого есть резистор и светодиод, или голый датчик с 4 ножками. У голого датчика ножки считают слева направо, повернув его решёткой к себе.

СигналМодуль с 3 пинамиДатчик с 4 ножкамиКуда подключать
ПитаниеVCC (+)Ножка 15V (на ESP32 и Pico — 3V3)
ДанныеDATA / OUT / SНожка 2Цифровой пин (на Uno — D2)
Не используется—Ножка 3Не подключается
ЗемляGND (−)Ножка 4GND
Если используется голый датчик, обязательно поставь подтягивающий резистор 10 kΩ между ножкой данных и VCC; для кабеля длиннее нескольких метров бери 4,7 kΩ. На платах модулей этот резистор уже есть, так что ничего добавлять не нужно. Чтобы узнать номинал резистора по цветным полосам, воспользуйся утилитой Цветовая маркировка резисторов.

Установка библиотеки DHT

  1. Открой в Arduino IDE «Менеджер библиотек» (Library Manager); в Arduino IDE 2 это значок книги на левой панели.
  2. Введи в поиске DHT sensor library и установи библиотеку от Adafruit.
  3. Когда появится вопрос о зависимостях, выбери Установить все (Install all), чтобы заодно установилась Adafruit Unified Sensor.
  4. При желании попробуй готовый пример: «Файл › Примеры › DHT sensor library › DHTtester».

Пример кода для Arduino: температура, влажность и ощущаемая температура

Код ниже снимает показания раз в две секунды, сообщает, если чтение не удалось, и по температуре и влажности рассчитывает индекс жары (heat index — насколько жарко ощущается). Чтобы увидеть результаты, открой «Монитор порта» (Serial Monitor) на скорости 9600 бод.

C++ (Arduino IDE)
1#include <DHT.h>
2
3#define DHT_PIN 2          // veri pini / data pin
4#define DHT_TYPE DHT11     // DHT22 kullanıyorsan DHT22 yaz / write DHT22 for a DHT22
5
6DHT dht(DHT_PIN, DHT_TYPE);
7
8void setup() {
9  Serial.begin(9600);
10  dht.begin();
11}
12
13void loop() {
14  delay(2000);                                // ölçümler arası bekleme / wait between readings
15
16  float humidity = dht.readHumidity();        // % bağıl nem / % relative humidity
17  float temperature = dht.readTemperature();  // °C
18
19  if (isnan(humidity) || isnan(temperature)) {
20    Serial.println("Okuma hatası / read error");
21    return;
22  }
23
24  // hissedilen sıcaklık / heat index (°C)
25  float heatIndex = dht.computeHeatIndex(temperature, humidity, false);
26
27  Serial.print("Sicaklik / Temp: ");
28  Serial.print(temperature);
29  Serial.print(" C  Nem / Humidity: %");
30  Serial.print(humidity);
31  Serial.print("  Hissedilen / Feels like: ");
32  Serial.print(heatIndex);
33  Serial.println(" C");
34}
DHT11 может делать не больше одного измерения в секунду, DHT22 — одно раз в две секунды. Пауза 2 секунды между чтениями безопасна для обоих. Более частое чтение не даёт нового значения: библиотека снова вернёт последнее измерение или ошибку.

DHT11 с ESP32

На ESP32 работает тот же код; достаточно задать DHT_PIN, например, равным 4. Питай датчик от пина 3V3 платы ESP32, чтобы линия данных тоже оставалась на 3,3 V; DHT11 спокойно работает при таком напряжении. GPIO 34–39 работают только на вход, поэтому для DHT не подходят: линия данных двунаправленная. При выборе пина проверь в утилите Распиновка, какие пины ESP32 безопасны. Показания можно вывести на веб-страницу по Wi-Fi и следить за ними с телефона.

DHT11 с Raspberry Pi Pico (MicroPython)

В MicroPython есть встроенный модуль dht для датчиков DHT, так что устанавливать библиотеку не нужно. Подключи датчик к пину 3V3 платы Pico, к GND и к пину GP15:

MicroPython
1import dht
2from machine import Pin
3import time
4
5sensor = dht.DHT11(Pin(15))   # GP15 veri pini / data pin (DHT22 için dht.DHT22)
6
7while True:
8    try:
9        sensor.measure()
10        t = sensor.temperature()   # °C
11        h = sensor.humidity()      # %
12        print("Sicaklik:", t, "C  Nem: %", h)
13    except OSError:
14        print("Okuma hatası / read error")
15    time.sleep(2)

Идеи проектов с DHT11

  • Цифровой термометр с LCD: выводи значения на дисплей 16x2; как это сделать, рассказано в статье Как подключить I2C LCD-дисплей.
  • Вентилятор с управлением по влажности: включай вентилятор через реле, когда влажность превышает 65%; подключение описано в статье Что такое модуль реле?
  • Сигнализация сырости: включай зуммер при превышении порога; о звуковых сигналах рассказывает статья Что такое зуммер?.
  • Регистратор температуры: сохраняй показания каждые 10 минут с помощью модуля часов и SD-карты.
  • Метеостанция с Wi-Fi: публикуй показания с ESP32 на странице, которую можно открыть с любого устройства в домашней сети.

Частые ошибки и как их исправить

  • Постоянно NaN или «Failed to read»: возможно, провод данных подключён не к тому пину, что указан в коде, нет подтягивающего резистора или в коде указан неверный тип датчика (DHT22 вместо DHT11).
  • Слишком частое чтение: если опрашивать датчик чаще чем раз в 2 секунды, он возвращает старое значение или ошибку.
  • Температура выше реальной: датчик может стоять слишком близко к стабилизатору напряжения Arduino или на солнце; размести его в нескольких сантиметрах от платы.
  • Пропуски показаний на длинном кабеле: через несколько метров сигнал ослабевает; уменьши подтягивающий резистор до 4,7 kΩ, питай датчик от 5 V и используй качественный кабель.
  • Нестабильная работа на ESP32: если датчик питается от 5 V, линия данных подтягивается к 5 V; питай его от 3V3 и используй GPIO, который может работать и на вход, и на выход (например, 4).
  • Ожидание мгновенной реакции: на изменение влажности датчику нужно несколько секунд; DHT11 рассчитан на контроль помещения, а не на быстрые измерения.

Если интересно, какие ещё датчики можно использовать, загляни в руководство по датчикам для Arduino, а чтобы измерять расстояние, — в статью Датчик расстояния HC-SR04. В приложении BlueGrays есть пошаговые проекты с DHT11 и DHT22 со схемами и кодом.

Частые вопросы

Что купить: DHT11 или DHT22?

Чтобы примерно следить за температурой и влажностью в помещении, хватит DHT11, и он дешевле. Для улицы, минусовых температур или точности ±0,5 °C бери DHT22. В коде нужно лишь поменять тип датчика на DHT22.

Почему DHT11 возвращает NaN или «Failed to read from DHT sensor»?

Самые частые причины — неверный пин данных, отсутствие подтягивающего резистора, неправильный тип датчика в коде и слишком частое чтение. Проверь подключение, поставь резистор 10 kΩ на голый датчик и делай паузу 2 секунды между чтениями.

DHT11 показывает неправильную температуру. Как его откалибровать?

Погрешность ±2 °C для DHT11 нормальна. Положи датчик рядом с термометром, которому можно доверять, запиши разницу и в коде прибавляй или вычитай эту постоянную поправку из показания. Следи, чтобы датчик был подальше от нагревающихся деталей.

Работает ли DHT11 от 3,3 V?

Да, DHT11 работает от 3 до 5,5 V. На платах с 3,3 V, таких как ESP32 и Raspberry Pi Pico, лучше всего питать его от пина 3V3: тогда на линии данных никогда не будет 5 V.

Можно ли использовать DHT11 на улице или рядом с водой?

DHT11 не водонепроницаемый: дождь, конденсат и прямое солнце портят датчик или искажают показания. На улице держи его в вентилируемом коробе в тени, а для измерения температуры воды лучше подойдёт водонепроницаемый DS18B20.

Можно ли подключить к Arduino несколько DHT11?

Да, но каждому датчику нужен свой пин данных: общую линию данных они использовать не могут. В коде для каждого создаётся отдельный объект DHT, например DHT dht1(2, DHT11) и DHT dht2(3, DHT11).

Все проекты
Температура и влажность с DHT11
#55Средний

Температура и влажность с DHT11

Насколько тепло в твоей комнате и влажный ли воздух или сухой? Датчик DHT11 измеряет температуру и влажность, а Arduino выводит значения на двухстрочный LCD-экран и обновляет их каждые пару секунд. Ес

4.7(47)
73
Температура и влажность с DHT22 на ESP32 (с LCD-дисплеем)
#117Средний

Температура и влажность с DHT22 на ESP32 (с LCD-дисплеем)

Этот проект измеряет температуру и влажность воздуха датчиком DHT22 и в реальном времени показывает данные на I2C LCD 16x2. Данные читаются с датчика по однопроводному протоколу через библиотеку Adafruit DHT. Проект служит основой для IoT-метеостанций, умного дома или систем мониторинга среды в теплицах. Связь с DHT22 идёт через пин GPIO 4 у ESP32.

4.8(38)
56
Регистратор температуры на ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
#144Продвинутый
Premium

Регистратор температуры на ESP32 (DHT22 + DS1307 RTC + microSD + OLED)

Собери на ESP32 регистратор температуры с отметками времени! Каждую минуту читай температуру и влажность с DHT22, бери реальное время из DS1307 RTC и записывай всё на карту microSD в формате CSV. OLED показывает текущую температуру (крупным шрифтом), влажность в процентах, время и счётчик записей. Файл /temp_log.csv на SD-карте открывается в Excel, Google Sheets или Python pandas — идеально для теплиц, комнат, лабораторий и хранения продуктов.

4.7(7)
12
Часы, календарь и метеостанция на матрице (MAX7219, DS1307)
#85Средний
Premium

Часы, календарь и метеостанция на матрице (MAX7219, DS1307)

Табло с бегущей строкой для стола или стены, которое по очереди показывает время, дату и погоду в комнате. На светодиодном дисплее 8x32 сначала видна температура в градусах Цельсия и Фаренгейта, затем

5.0(50)
66
Измерение температуры с NTC и LCD-дисплеем 2x16
#44Новичок
Premium

Измерение температуры с NTC и LCD-дисплеем 2x16

Измерь температуру вокруг с помощью датчика, похожего на крошечную бусинку. Эта деталь, NTC, при нагреве легче пропускает электричество; Arduino читает это изменение, по формуле переводит его в градус

4.5(33)
44
ESP32 HTTPClient + API погоды (с экраном LCD)
#133Продвинутый
Premium

ESP32 HTTPClient + API погоды (с экраном LCD)

В этом проекте ESP32 через HTTPClient.h делает вызов REST API к сервису погоды (wttr.in) через интернет. Полученный ответ в JSON разбирается с помощью ArduinoJson v7, а город, температура, влажность, погода и ветер выводятся на I2C LCD на турецком и английском. wttr.in бесплатен и не требует ключа API — достаточно указать любое название города, чтобы получить текущую погоду. Данные автоматически обновляются каждые 30 минут.

4.7(13)
20
Умная станция полива
#83Продвинутый
Premium

Умная станция полива

Садовник, который сам поливает растения, чтобы они не засохли, пока ты в отпуске. Датчик влажности почвы измеряет, насколько влажная земля; когда она сохнет, Arduino на несколько секунд включает водян

5.0(42)
57