Умный дом #3: ESP32 + датчик температуры и влажности (DHT22/SHT21)
Контроль температуры и влажности — одна из самых востребованных задач в умном доме. Именно эти параметры определяют комфорт, а также напрямую влияют на здоровье, сохранность продуктов, мебели и электроники. В этой статье мы рассмотрим, как подключить датчики DHT22 или SHT21 к контроллеру ESP32, считать показания и вывести их в браузер, а также передать данные на MQTT брокер для интеграции с системами автоматизации, такими как Home Assistant.
Список оборудования и компонентов
- Модуль ESP32 DevKit (с поддержкой Wi-Fi).
- Датчик температуры и влажности DHT22 (AM2302) или цифровой сенсор SHT21 (I2C).
- Резистор 10 кОм (только для DHT22, как подтягивающий).
- Соединительные провода.
- Блок питания для ESP32 (5 В, 1 А).
- Макетная плата (по желанию).
Схема подключения и принцип работы
Подключение зависит от используемого датчика:
DHT22:
- VCC → 3.3 В ESP32.
- GND → GND ESP32.
- DATA → GPIO 4 (например). Между DATA и VCC ставится подтягивающий резистор 10 кОм.
SHT21:
- VCC → 3.3 В ESP32.
- GND → GND ESP32.
- SDA → GPIO 21.
- SCL → GPIO 22.
Принцип работы прост: датчик измеряет температуру и влажность, ESP32 получает эти данные и выводит их в веб-интерфейсе. При подключении MQTT брокера значения отправляются в облачный сервер или локальную систему автоматизации, что позволяет строить графики, хранить историю и использовать показания в сценариях управления.
Пример кода для ESP32
Ниже приведён пример программы на Arduino IDE, работающей с датчиком DHT22. Код можно адаптировать для SHT21, используя библиотеку Wire.h и специализированные драйверы.
// Подключаем библиотеки
#include <WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
// Параметры Wi-Fi
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
// Параметры MQTT
const char* mqtt_server = "192.168.1.100"; // IP брокера
const int mqtt_port = 1883;
const char* mqtt_topic_temp = "home/livingroom/temperature";
const char* mqtt_topic_hum = "home/livingroom/humidity";
WiFiClient espClient;
PubSubClient client(espClient);
// Настройка DHT22
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Веб-сервер
WiFiServer server(80);
void setup() {
Serial.begin(115200);
dht.begin();
// Подключение к Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWi-Fi подключен!");
Serial.println(WiFi.localIP());
// Настройка MQTT
client.setServer(mqtt_server, mqtt_port);
// Запуск веб-сервера
server.begin();
}
void reconnect() {
while (!client.connected()) {
if (client.connect("ESP32Client")) {
Serial.println("MQTT подключен");
} else {
delay(2000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Чтение данных с датчика
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Ошибка чтения с датчика DHT22");
return;
}
// Публикация в MQTT
client.publish(mqtt_topic_temp, String(t).c_str());
client.publish(mqtt_topic_hum, String(h).c_str());
// Обработка веб-запросов
WiFiClient clientWeb = server.available();
if (clientWeb) {
String request = clientWeb.readStringUntil('\r');
clientWeb.flush();
clientWeb.println("HTTP/1.1 200 OK");
clientWeb.println("Content-type:text/html");
clientWeb.println();
clientWeb.println("<!DOCTYPE html><html>");
clientWeb.println("<head><meta charset='utf-8'><title>Температура и влажность</title></head>");
clientWeb.println("<body style='font-family:Verdana; text-align:center;'>");
clientWeb.println("<h1>Показания датчика DHT22</h1>");
clientWeb.print("<p>Температура: ");
clientWeb.print(t);
clientWeb.println(" °C</p>");
clientWeb.print("<p>Влажность: ");
clientWeb.print(h);
clientWeb.println(" %</p>");
clientWeb.println("</body></html>");
clientWeb.println();
}
delay(5000); // опрос каждые 5 секунд
}
Пояснение кода
Программа выполняет несколько задач одновременно:
- Подключение к Wi-Fi и запуск веб-сервера для отображения данных в браузере.
- Чтение показаний температуры и влажности с датчика DHT22.
- Публикация этих значений в MQTT брокер по заданным топикам.
- Формирование минимального HTML-интерфейса для просмотра данных с любого устройства в сети.
Таким образом, ESP32 выступает в роли моста между физическим миром (датчиком) и цифровыми сервисами (веб и MQTT).
Применение и расширение проекта
- Интеграция в Home Assistant для построения графиков и сценариев управления климатом.
- Добавление датчиков в разных комнатах с публикацией в разные MQTT-топики.
- Сохранение данных на SD-карту или отправка в облако (например, ThingsBoard, InfluxDB, Grafana).
- Расширение веб-интерфейса с историей значений и управлением другими устройствами.
- Создание автоматических сценариев: при высокой влажности включать вентиляцию, при низкой — увлажнитель.
Заключение
В этой статье мы реализовали один из ключевых элементов умного дома — контроль температуры и влажности с помощью ESP32 и датчиков DHT22 или SHT21. Мы подключили датчик, научились считывать показания, отображать их в браузере и передавать на MQTT брокер для дальнейшей интеграции. Такой проект можно использовать как базу для более сложных систем климат-контроля.
Если вам нужен индивидуальный проект на ESP32 — разработка электроники, схемы, печатной платы и программного обеспечения, мы можем помочь. Мы создаём уникальные решения и производим платы под задачи клиентов. Ознакомьтесь с примерами проектов в нашем портфолио.




