Умный дом #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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Двухполярное питание из однополярного

Двухполярное питание из однополярного

Двухполярное питание необходимо для питания операционных усилителей, усилителей мощности и другой те..

Arduino Nano SIM800 SMS команды

Arduino Nano SIM800 SMS команды

Привет, друзья! Мы с каждым разом разбираем все более интересные применения GSM-модуля SIM800. В это..

Умный дом 1. Постановка задачи.

Умный дом 1. Постановка задачи.

Умный дом 1. Постановка задачи. Каждый человек представляет себе свой умный дом в соответствии со с..

MOC3023 оптосимистор

MOC3023 оптосимистор

Оптопара с симисторным выходом для импульсного управления мощным симистором от логических сигналов к..

15.23грн.

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

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

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

44.72грн.