Розумний дім #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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Магнітний сенсор A3144. Датчик Холла з дискретним виходом.

Магнітний сенсор A3144. Датчик Холла з дискретним виходом.

Магнітний сенсор A3144 (датчик Холла з дискретним виходом)Магнітний сенсор A3144 — це однополюсний д..

10.10грн.

Що таке Bootloader Arduino UNO ATmega328P — простими словами

Що таке Bootloader Arduino UNO ATmega328P — простими словами

Завантажувач (Bootloader) Arduino UNO — це невелика, але дуже важлива частина прошивки мікроконтроле..

Стабілітрони: принцип роботи, характеристики та застосування в електроніці

Стабілітрони: принцип роботи, характеристики та застосування в електроніці

Стабілітрон: що це таке і як він працює Стабілітрон (англ. Zener diode) — це напівп..

ESP32 Timer Groups: архітектура та використання

ESP32 Timer Groups: архітектура та використання

ESP32 Timer Groups: архітектура та використання Мікроконтролер ESP32 має потужну систему апаратни..

AMS1117-5.0 мікросхема стабілізатор напруги

AMS1117-5.0 мікросхема стабілізатор напруги

Мікросхема - лінійний регулятор напруги застосовується для отримання стабілізованої напруги 5,0 ВВхі..

6.27грн.