Розумний дім #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 SIM800 CBC рівень заряду

Arduino SIM800 CBC рівень заряду

Привіт друзі! SIM800L має аналого-цифровий перетворювач, який призначений для вимірювання напруги жи..

Цикли 1 — Вступ до циклів Arduino

Цикли 1 — Вступ до циклів Arduino

Цикли 1 — Вступ до циклів Arduino Вступ Цикли — це важливий інструмент у програмуванні, ..

Роз'ємний штекер мама-папа 2,54мм на 2, 3, 4, 5 пінів

Роз'ємний штекер мама-папа 2,54мм на 2, 3, 4, 5 пінів

Пластмасовий корпус для роз'єму 2,54мм без струмопровідної вставки..

1.01грн.

Роз'ємний конектор під гвинт на плату 2 контакти

Роз'ємний конектор під гвинт на плату 2 контакти

Подвійний роз'ємний гвинтовий конектор без повороту для монтажу на друковану плату.Використовується ..

25.96грн.

Радіатор для транзистора 21х15х10мм

Радіатор для транзистора 21х15х10мм

Радіатор алюмінієвий для пасивного охолодження різноманітних напівпровідникових силових компонентів:..

13.58грн.