Умный дом #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(" &deg;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 — разработка электроники, схемы, печатной платы и программного обеспечения, мы можем помочь. Мы создаём уникальные решения и производим платы под задачи клиентов. Ознакомьтесь с примерами проектов в нашем портфолио.

<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Модуль повербанка 4,2В на 2 USB выхода

Модуль повербанка 4,2В на 2 USB выхода

К данному модулю нужно только подключить литий-ионный аккумулятор 3,7-4,2В, закрыть в корпус и повер..

133.25грн.

Джойстик двухосевой

Джойстик двухосевой

Двухосевой джойстик с кнопкой — это удобный модуль управления для проектов на Arduino, ESP32 и други..

44.72грн.

ESP32 WiFi модуль на DIN-рейку без корпуса

ESP32 WiFi модуль на DIN-рейку без корпуса

Плата продаётся без корпусаГлавный модуль для построения домашней или промышленной системы автоматич..

772.57грн.

Контроллер ESP32-WROOM-32D

Контроллер ESP32-WROOM-32D

ESP32-WROOM-32D - это мощный универсальный модуль Wi-Fi + BT + BLE MCU, предназначенный для широкого..

230.96грн.

Понижающий преобразователь напряжения с ограничением по току 8...36В в 1,25...32В 5А

Понижающий преобразователь напряжения с ограничением по току 8...36В в 1,25...32В 5А

Импульсный преобразователь напряжения постоянного тока с 8 ... 36В в 1,25 ... 32В на основе мик..

99.70грн.