Розумний дім #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 — розробка електроніки, схеми, друкованої плати та програмного забезпечення, ми можемо допомогти. Ми створюємо унікальні рішення та виготовляємо плати під завдання клієнтів. Ознайомтеся з прикладами проєктів у нашому портфоліо.





