Код для поиска

ESP32 Урок 28/55 - Датчик температуры DHT11 с ЖК-дисплеем | Обучающий набор SunFounder для ESP32 IoT

ESP32 Урок 28/55 - Датчик температуры DHT11 с ЖК-дисплеем | Обучающий набор SunFounder для ESP32 IoT

В этом руководстве мы рассмотрим, как подключить датчик температуры и влажности DHT11 к микроконтроллеру ESP32. Используя эту схему, мы будем измерять температуру и влажность окружающей среды, выводя результаты как на последовательный монитор, так и на ЖК-экран. Кроме того, мы реализуем зуммер, который срабатывает, когда температура превышает определенный порог.

ESP32-28_dht_temperature-sensor-main

Этот проект не только демонстрирует использование датчика 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 секунды.
  • Проверьте соединения проводов, если показания не считываются (например, нет подключения, неправильный вывод).

Инструкции по подключению

ESP32-28_dht_temperature-sensor-wiring
DHT11_with_buzzer

Чтобы подключить датчик 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 Реагирование на значение температуры

Изображения

ESP32-28_dht_temperature-sensor-library
ESP32-28_dht_temperature-sensor-library
ESP32-28_dht_temperature-sensor-schematic
ESP32-28_dht_temperature-sensor-schematic
ESP32-28_dht_temperature-sensor-wiring
ESP32-28_dht_temperature-sensor-wiring
DHT11_with_buzzer
DHT11_with_buzzer
ESP32-28_dht_temperature-sensor-main
ESP32-28_dht_temperature-sensor-main
828-ESP32 Tutorial 28/55- Arduino code for DHT Temperature sensor
Язык: C++
#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");
}

829-ESP32 Tutorial 28/55- Arduino code for DHT Temperature sensor with LCD
Язык: 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("%");
}

Вещи, которые могут вам понадобиться

Файлы📁

Файл Fritzing

Руководство пользователя