Введение
В этой статье расскажу как подключить датчики температуры и влажности DHT11 и DHT22 к микроконтроллеру ESP32 с использованием среды разработки Arduino IDE. Сначала разберем особенности этих сенсоров: их внутреннее устройство, принципы работы, а также схемы физического подключения и сопряжения с платой ESP32. Затем перейдем к программной части — установим необходимую библиотеку для работы с датчиками в среде Arduino IDE.

Необходимые детали
| № | Компонент | Количество | Купить |
|---|---|---|---|
| 1 | Отладочная плата ESP32 | 1 шт | Авито | AliExpress | RobotChip |
| 6 | Модуль DHT11 | 1 шт | Авито | AliExpress | RobotChip |
Описание
Датчики DHT11 и DHT22 представляют собой комбинированные модули для измерения относительной влажности воздуха и температуры. Устройства оснащены откалиброванным на заводе цифровым выходом и используют однопроводной протокол передачи данных (one-wire). Сенсоры относятся к бюджетному сегменту аппаратных решений. DHT22 является улучшенной версией DHT11: он обеспечивает более высокую точность измерений, а также расширенный рабочий диапазон по температуре и влажности.
| DHT22 | DHT11 | |
|---|---|---|
| Температура | от -40 до 80 ºC +/- 0,5ºC | от 0 до 50 ºC +/-2 ºC |
| Влажность | от 0 до 100% +/-2% | от 20 до 90% +/-5% |
| Точность | Влажность: 0,1% Температура: 0,1 ºC | Влажность: 1% Температура: 1ºC |
| Рабочее напряжение | 3-6В | 3-5.5В |
| Частота опроса | 2 секунды | 1 секунды |
Как видно из приведенной выше сравнительной таблицы, DHT22 превосходит DHT11 по точности измерений температуры и влажности, а также обладает более широким рабочим диапазоном. Однако за эти преимущества приходится платить более высокой стоимостью. В свою очередь, DHT11 выигрывает в скорости опроса (частоте дискретизации). Оба сенсора поддерживают напряжение питания 3,3 В, что позволяет подключать их напрямую к выводам VCC микроконтроллеров ESP32 и ESP8266 без использования дополнительных преобразователей логических уровней.
Несмотря на разницу в характеристиках, датчики имеют идентичную распиновку и базовый принцип работы. Это обеспечивает программную взаимозаменяемость: для обоих устройств используется одна и та же библиотека Arduino, где тип датчика (DHT11 или DHT22) задается одной строкой в коде.
Модули поставляются с заводской калибровкой и не требуют внешних компонентов обвязки (в большинстве случаев достаточно подтягивающего резистора на линии данных). Внутри корпуса расположены емкостный датчик относительной влажности и термистор (полупроводниковый резистор, зависящий от температуры), сигналы с которых обрабатываются встроенным микроконтроллером.
Распиновка DHT11/DHT22
Распиновка модуля датчика DHT представлена ниже. Описание контактов соответствует их расположению слева направо при взгляде на рабочую (переднюю) сторону сенсора с отверстиями.
| Контакт | Обозначение | Функция |
|---|---|---|
| 1 | VCC | Питание (+3.3 В или +5 В) |
| 2 | DATA | Шина данных (однопроводной протокол) |
| 3 | NC | Не используется (No Connection) |
| 4 | GND | Земля (Ground) |
Подключение
Интеграция датчиков серии DHT с микроконтроллером ESP32 требует использования внешнего подтягивающего резистора сопротивлением 10 кОм для линии передачи данных. Резистор устанавливается между выводом DATA сенсора и шиной питания VCC. Цепи питания (VCC) и земли (GND) модуля подключаются к соответствующим линиям 3.3-вольтового питания ESP32. Наглядные принципиальные схемы сборки представлены на рисунках далее.
Так же, не забываем что необходимо добавить ESP32 в среду разработки Arduino IDE, рассказывал в прошлой статье

Установка библиотек
Для работы, будем использовать библиотеку «DHT-sensor-library от Adafruit» скачать можно используя интегрированную среду разработки Arduino IDE», для этого откройте «Скетч → Подключение библиотеки → Менеджер библиотек…», так же выложу библиотеки в конце статьи.

Для работы библиотеки необходимо установить зависимые библиотеки, нажимаем «Установить все»

Программа
Ниже приведён исходный код передатчика, загрузите скетч в плату ESP32.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#include "DHT.h" // Подключаем библиотеку DHT #define DHTTYPE DHT11 // Указываем тип датчика const uint8_t DHTPin = 4; // Указываем номер GPIO DHT dht(DHTPin, DHTTYPE); // Создаем объект датчика 'dht' void setup() { Serial.begin(115200); // Запускаем аппаратный последовательный порт pinMode(DHTPin, INPUT_PULLUP); // Настраиваем пин данных как вход dht.begin(); // Инициализируем датчик: Serial.println(F("\nDHT Sensor Test")); // Выводим приветственную надпись } void loop() { delay(1000); // Задержка 1 секунда float h = dht.readHumidity(); // Считываем влажность в процентах (%). float t = dht.readTemperature(); // Считываем температуру в градусах Цельсия (°C) // Проверяем, являются ли числа валидными (не NaN). if (isnan(h) || isnan(t)) { Serial.println(F("Ошибка чтения! Проверьте подключение.")); return; } Serial.print(F("Влажность: ")); Serial.print(h); Serial.print(F("% Температура: ")); Serial.print(t); Serial.println(F("°C ")); } |
Откройте мониторинг порта, где увидим показания с датчика.

Описание программы
В начале программы подключаем библиотеки, указываем что используем датчик DHT11, указываем порт GPIO и создаем объект DHT.
1 2 3 4 |
#include "DHT.h" #define DHTTYPE DHT11 const uint8_t DHTPin = 4; DHT dht(DHTPin, DHTTYPE); |
В функции setup() запускается последовательный порт на скорости 115200 бод, указываем что порт используется как вход и инициализируем датчик.
1 2 3 4 5 6 7 |
void setup() { Serial.begin(115200); pinMode(DHTPin, INPUT_PULLUP); dht.begin(); Serial.println(F("\nDHT Sensor Test")); } |
В функции loop() с паузой 1 секунды, считываем показания температуры и влажности с датчика и все данные отправляем в последовательный порт.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void loop() { delay(1000); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println(F("Ошибка чтения! Проверьте подключение.")); return; } Serial.print(F("Влажность: ")); Serial.print(h); Serial.print(F("% Температура: ")); Serial.print(t); Serial.println(F("°C ")); } |
Полезные ссылки
| № | Описание | Скачать |
|---|---|---|
| 1 | Библиотека Adafruit Unified | Adafruit Unified Sensor v.1.1.15.zip |
| 2 | Библиотека для DHT11 | DHT sensor library v.1.4.7.zip |