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





