ESP32 Урок 28/55 - Датчик температуры DHT11 с ЖК-дисплеем | Обучающий набор SunFounder для ESP32 IoT
В этом руководстве мы рассмотрим, как подключить датчик температуры и влажности DHT11 к микроконтроллеру ESP32. Используя эту схему, мы будем измерять температуру и влажность окружающей среды, выводя результаты как на последовательный монитор, так и на ЖК-экран. Кроме того, мы реализуем зуммер, который срабатывает, когда температура превышает определенный порог.
Этот проект не только демонстрирует использование датчика DHT11, но и показывает универсальность ESP32, который включает встроенные возможности Wi-Fi и Bluetooth. К концу этого руководства у вас будет рабочая схема, которая непрерывно отслеживает условия окружающей среды и обеспечивает обратную связь в реальном времени.
Для наглядного руководства посмотрите видео, сопровождающее этот урок (в видео на 00:00). Давайте начнем!
Объяснение аппаратного обеспечения
Основными компонентами, используемыми в этом проекте, являются микроконтроллер ESP32, датчик DHT11 и ЖК-дисплей. ESP32 будет служить мозгом операции, обрабатывая данные с датчика DHT11 и управляя выводом на ЖК-экран.
Датчик DHT11 измеряет влажность и температуру, предоставляя показания через одну линию данных. Он требует источника питания от 3,3 В до 5,5 В и имеет низкое потребление тока, что делает его подходящим для приложений с батарейным питанием. ЖК-дисплей будет отображать значения температуры и влажности в реальном времени.
Детали из технического описания
| Производитель | GROVE |
|---|---|
| Номер детали | DHT11 |
| Логическое/IO напряжение | 3,3 – 5,5 В |
| Напряжение питания | 3,3 В |
| Выходной ток (на канал) | 0,5 мА тип. |
| Пиковый ток (на канал) | 2,5 мА макс. |
| Рекомендации по частоте ШИМ | Н/Д |
| Пороги входной логики | 0,3 ВКК (низкий), 0,7 ВКК (высокий) |
| Падение напряжения / RDS(on) / насыщение | Не применимо |
| Тепловые пределы | 0°C до 60°C |
| Корпус | DIP-4 |
| Примечания / варианты | Разрешение: 1°C / 1% отн. влажности |
- Используйте подтягивающий резистор (рекомендуется 5 кОм) на линии данных.
- Держите провода датчика короткими (менее 20 м), чтобы обеспечить точные показания.
- Питайте DHT11 напряжением 3,3 В для оптимальной производительности.
- Период выборки не должен быть менее 1 секунды.
- Проверьте соединения проводов, если показания не считываются (например, нет подключения, неправильный вывод).
Инструкции по подключению


Чтобы подключить датчик DHT11 к ESP32, начните с соединения вывода VCC датчика DHT11 (самый левый вывод) с выходом 3,3 В на ESP32. Затем подключите вывод заземления (четвертый вывод) к выводу заземления (GND) на ESP32. Вывод данных (второй вывод) должен быть подключен к GPIO-выводу 14 на ESP32.
Для ЖК-дисплея подключите вывод VCC к выходу 5 В на ESP32. Вывод заземления должен быть подключен к выводу заземления на ESP32. Выводы SDA и SCL ЖК-дисплея должны быть подключены к GPIO-выводам 21 и 22 соответственно. Убедитесь, что все соединения надежны, чтобы избежать проблем при чтении данных.
Примеры кода и пояснения
В первой части кода мы инициализируем датчик DHT и устанавливаем номер вывода с помощью #define DHTPIN 14. Этот идентификатор позволяет нам легко ссылаться на вывод, подключенный к линии данных DHT11, на протяжении всего кода.
#include "DHT.h"
#define DHTPIN 14 // Установите вывод, подключенный к выводу данных DHT11
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
}
В функции setup() мы инициализируем последовательную связь для отладки и запускаем датчик DHT. Основной цикл включает задержку в 2 секунды, чтобы гарантировать, что мы не перегружаем датчик запросами.
Затем мы считываем значения влажности и температуры с помощью float humidity = dht.readHumidity(); и float temperature = dht.readTemperature();. Эти идентификаторы сохраняют измеренные значения для последующего использования.
void loop() {
delay(2000);
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
}
Наконец, мы проверяем наличие ошибок чтения и выводим значения на последовательный монитор с помощью Serial.print(). Это позволяет нам наблюдать показания в реальном времени.
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Не удалось прочитать данные с датчика DHT!");
return;
}
Serial.print("Влажность: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Температура: ");
Serial.print(temperature);
Serial.println(" *C");
В коде для ЖК-дисплея мы инициализируем ЖК-дисплей и отображаем температуру и влажность на экране с помощью функции lcd.print(). Это обеспечивает визуальное представление данных, собранных датчиком DHT11.
Демонстрация / Что ожидать
Когда все будет правильно подключено и код загружен в ESP32, вы должны увидеть показания температуры и влажности, отображаемые на последовательном мониторе и ЖК-экране. Если температура превышает 30°C, зуммер активируется, обеспечивая звуковой сигнал.
Будьте осторожны с обратным подключением и убедитесь, что датчик не подвергается воздействию экстремальных условий, так как это может повлиять на показания. Возможно, вам потребуется отрегулировать порог срабатывания зуммера в зависимости от ваших требований (в видео на 15:30).
Временные метки видео
- 00:00 Начало
- 1:57 Введение в DHT11
- 6:18 Подключение DHT11 к ESP32
- 7:67 Объяснение кода Arduino
- 11:49 Выбор платы ESP32 и COM-порта в Arduino IDE
- 13:30 Демонстрация проекта
- 15:32 Получение значения в градусах Фаренгейта
- 16:04 Отображение температуры на LCD с помощью ESP32
- 17:20 Код DHT11 и LCD с ESP32
- 19:49 Демонстрация DHT11 и LCD с ESP32
- 21:33 Реагирование на значение температуры
#include "DHT.h"
#define DHTPIN 14 // Установите пин, подключенный к пину данных DHT11.
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
Serial.println("DHT11 test!");
dht.begin();
}
void loop() {
// Подождите несколько секунд между измерениями.
delay(2000);
// Считывание температуры или влажности занимает около 250 миллисекунд!
// Показания датчика могут быть "старыми" до 2 секунд (это очень медленный датчик)
float humidity = dht.readHumidity();
// Читать температуру в градусах Цельсия (по умолчанию)
float temperature = dht.readTemperature();
// Проверьте, произошли ли сбои при чтении, и завершите работу раньше (чтобы попробовать снова).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Выведите влажность и температуру
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C");
}
/*
* Это код на Arduino для измерения температуры и влажности с использованием DHT11/DHT22 и вывода данных на ЖК-экран, написанный Ахмадом Шамширом для учебного набора ESP32 IoT от SunFounder. Полное видео смотрите по ссылке https://youtu.be/qRUFZX4eDJg. Полный код, схема подключения и другие ресурсы для этого учебника доступны по ссылке https://robojax.com/RJT711.
*/
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 14 // Установите пин, соединенный с выводом данных DHT11.
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
// Инициализируйте объект LCD с адресом I2C 0x27, 16 колонок и 2 строки.
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Начните последовательную коммуникацию на скорости 115200 бод.
Serial.begin(115200);
// Инициализировать dht11
dht.begin();
// Инициализируйте ЖК-дисплей
lcd.init();
lcd.backlight();
// Очистите ЖК-дисплей
lcd.clear();
}
void loop() {
// Подождите несколько секунд между измерениями.
delay(2000);
// Считывание температуры или влажности занимает около 250 миллисекунд!
// Показания датчика могут быть также "старыми" до 2 секунд (это очень медленный датчик)
float humidity = dht.readHumidity();
// Читать температуру в градусах Цельсия (по умолчанию)
float temperature = dht.readTemperature();
// Проверьте, если какие-либо чтения не удались, и завершите программу преждевременно (чтобы попробовать снова).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Отображать температуру и влажность на ЖК-дисплее
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.write(223); // Градусный символ
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humi: ");
lcd.print(humidity);
lcd.print("%");
}
Common Course Links
Common Course Files
Вещи, которые могут вам понадобиться
-
АмазонкаКупите DHT11 на Amazon.amzn.to
-
БанггудКупите модуль DHT11 на Banggood.banggood.com
Ресурсы и ссылки
-
Документация
Файлы📁
Файл Fritzing
-
DHT11 Humitidy and Temperature Sensor (3 pins)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
Руководство пользователя
-
Руководство пользователя DHT11
robojax-DHT11_manual.pdf0.82 MB