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





