Умный дом #4: Умная розетка на ESP32

Умная розетка — один из наиболее востребованных элементов систем домашней автоматизации. Она позволяет не только включать и выключать бытовые приборы через Wi-Fi, но и контролировать потребление электроэнергии. В этой статье мы рассмотрим, как реализовать умную розетку на базе ESP32 с использованием модулей измерения мощности HLW8012 или INA219. Мы также создадим веб-интерфейс для управления нагрузкой и построения простого графика энергопотребления.

Список оборудования и компонентов

  • Контроллер ESP32 DevKit.
  • Модуль реле 220 В (с оптронами для безопасности).
  • Модуль измерения мощности HLW8012 или INA219.
  • Розетка 220 В (корпус для сборки проекта).
  • Лампочка, обогреватель или другой бытовой прибор для тестов.
  • Блок питания 5 В для ESP32 (рекомендуется импульсный).
  • Соединительные провода и макетная плата (для тестовой сборки).

Схема подключения и принцип работы

Система состоит из трёх ключевых частей:

  • ESP32 — выполняет роль управляющего модуля, обрабатывает данные с датчиков и формирует веб-интерфейс.
  • Модуль реле — разрывает или замыкает фазный провод розетки, управляя нагрузкой.
  • Измерительный модуль — регистрирует ток, напряжение и вычисляет мощность.

Пример подключения HLW8012:

  • CF → GPIO 25 (вывод импульсов активной мощности).
  • CF1 → GPIO 26 (вывод импульсов напряжения/тока).
  • SEL → GPIO 27 (переключение режима измерений).
  • VCC → 3.3 В ESP32.
  • GND → GND ESP32.

Пример подключения INA219 (I2C):

  • SDA → GPIO 21.
  • SCL → GPIO 22.
  • VCC → 3.3 В ESP32.
  • GND → GND ESP32.

В реальном устройстве все компоненты размещаются в корпусе с розеткой, а реле подключается к фазе сети. ESP32 управляет реле и собирает данные об энергопотреблении.

Пример кода для ESP32

Ниже приведён пример для модуля INA219. С HLW8012 принцип работы аналогичен, но используется другая библиотека.


// Подключаем библиотеки
#include <WiFi.h>
#include <WebServer.h>
#include <Wire.h>
#include <Adafruit_INA219.h>

// Параметры Wi-Fi
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

// Настройка сервера
WebServer server(80);

// Настройка реле
const int relayPin = 23;

// INA219 объект
Adafruit_INA219 ina219;

// Хранение последних данных
float busVoltage = 0;
float current_mA = 0;
float power_mW = 0;

void handleRoot() {
  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>";
  html += "<title>Умная розетка ESP32</title></head><body style='font-family:Verdana;text-align:center;'>";
  html += "<h1>Умная розетка ESP32</h1>";
  html += "<p>Напряжение: " + String(busVoltage) + " В</p>";
  html += "<p>Ток: " + String(current_mA) + " мА</p>";
  html += "<p>Мощность: " + String(power_mW/1000) + " Вт</p>";
  html += "<p><a href='/on'><button style='padding:10px;font-size:16px;'>Включить</button></a>";
  html += "<a href='/off'><button style='padding:10px;font-size:16px;'>Выключить</button></a></p>";
  html += "</body></html>";
  server.send(200, "text/html", html);
}

void handleOn() {
  digitalWrite(relayPin, LOW); // Включить реле
  handleRoot();
}

void handleOff() {
  digitalWrite(relayPin, HIGH); // Выключить реле
  handleRoot();
}

void setup() {
  Serial.begin(115200);

  pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin, HIGH); // по умолчанию выключено

  // Подключение к Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWi-Fi подключен!");
  Serial.println(WiFi.localIP());

  // Запуск сервера
  server.on("/", handleRoot);
  server.on("/on", handleOn);
  server.on("/off", handleOff);
  server.begin();

  // Инициализация INA219
  if (!ina219.begin()) {
    Serial.println("Ошибка подключения INA219");
    while (1) { delay(10); }
  }
}

void loop() {
  // Обновление данных с INA219
  busVoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getPower_mW();

  // Обработка веб-запросов
  server.handleClient();

  delay(2000); // обновление каждые 2 секунды
}

Пояснение кода

Программа подключается к Wi-Fi и запускает веб-сервер на ESP32. Веб-страница отображает напряжение, ток и мощность, измеренные INA219. Дополнительно доступны кнопки для включения и выключения реле. Измерения обновляются каждые 2 секунды. Такой подход позволяет удалённо контролировать нагрузку и видеть текущее энергопотребление в реальном времени.

Применение и расширение проекта

  • Мониторинг потребления бытовой техники (обогреватели, холодильники, насосы).
  • Создание системы учёта энергии в умном доме.
  • Передача данных в MQTT брокер и интеграция с Home Assistant или OpenHAB.
  • Визуализация данных в Grafana или ThingsBoard с построением долгосрочных графиков.
  • Автоматизация: отключение нагрузки при превышении заданного лимита мощности.
  • Расширение проекта до многоканальной системы с несколькими розетками.

Заключение

Умная розетка на базе ESP32 с функцией измерения потребляемой мощности — это практичный и полезный проект для систем автоматизации. Она позволяет не только управлять нагрузкой дистанционно, но и анализировать энергопотребление для повышения эффективности. Такой модуль можно использовать в быту, на производстве или в исследовательских целях.

Если вам нужен индивидуальный проект на ESP32 — разработка электроники, схемы, печатной платы и программного обеспечения, мы можем помочь. Мы разрабатываем и производим платы под задачи клиентов. Ознакомьтесь с примерами проектов в нашем портфолио.

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

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

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

Стерео усилитель мощности 15Втх2 на TDA7297

Двухканальный усилитель звуковой частоты на основе микросхемы TDA7297Имеет защиту от перегрузки..

125.21грн.

Разъемный коннектор JST SM

Разъемный коннектор JST SM

Служит для быстроразъемного соединения. Например, для монтажа  датчиков, исполнительных механиз..

31.09грн.

Умный дом #11: Коммуникационные сети

Умный дом #11: Коммуникационные сети

Умный дом #11: Коммуникационные сети Любая система умного дома невозможна без надежной ..

Создание простого таймера на ESP32: пример периодического вызова функции

Создание простого таймера на ESP32: пример периодического вызова функции

Создание простого таймера на ESP32: пример периодического вызова функции При разработке проектов ..

Модуль 8 — Финальный проект Arduino: идеи и сборка

Модуль 8 — Финальный проект Arduino: идеи и сборка

Модуль 8 — Финальный проект (курс для начинающих) Цель модуля: применить все полученные знани..