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

Шилд 2 реле для Arduino NANO

Шилд для проектів з двома електромеханічними реле під контролер Arduino NANO. Полегшує монтаж та заб..

257.82грн.

Універсальна монтажна плата на 400 отворів

Універсальна монтажна плата на 400 отворів

Макетна плата на 400 отворів для макетування любительських схемотехнічних проектів. Містить 4 лінії ..

85.85грн.

Модуль SHT30 для Wemos D1 mini

Модуль SHT30 для Wemos D1 mini

Шилд датчика температури та вологості на основі SHT30Комунікаційний інтерфейс I2CДіапазон вимірюванн..

102.48грн.

Адаптер для радіо модуля NRF24L01

Адаптер для радіо модуля NRF24L01

Модуль, що полегшує підключення радіо приймача-передавача NRF24L01 до любительських к..

26.73грн.

Термопара K-типу -100...1250°C 5х50мм

Термопара K-типу -100...1250°C 5х50мм

Термопара купить ТХА хромель-алюмель використовується для вимірювання екстремально високих температу..

203.04грн.