Розумний дім #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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Переривання таймера ESP32: hw_timer_t, налаштування обробника та обмеження ISR

Переривання таймера ESP32: hw_timer_t, налаштування обробника та обмеження ISR

Переривання таймера ESP32: hw_timer_t, налаштування обробника та обмеження ISR ESP32 має ап..

Модуль 8 PWM виходів I2C на DIN-рейку без корпусу

Модуль 8 PWM виходів I2C на DIN-рейку без корпусу

Модуль продається без коробкиМодуль восьми ШІМ виходів I2C для побудови домашньої чи промислової сис..

971.42грн.

Модуль 8 — Фінальний проєкт Arduino: ідеї та збірка

Модуль 8 — Фінальний проєкт Arduino: ідеї та збірка

Модуль 8 — Фінальний проєкт (курс для початківців) Мета модуля: застосувати всі отримані знання..

Arduino - що це таке?

Arduino - що це таке?

Arduino це недорога, доступна для покупки електронна плата з мікроконтролером та виводами входів-вих..

Розробка IoT пристроїв під ключ

Розробка IoT пристроїв під ключ

Розробка IoT пристроїв під ключ Потрібен IoT пристрій під ключ — від ідеї..