RisalDash RisalDash

Проект · Энергия · Мониторинг

Видеть каждый ватт, который жжёт дом

Счёт за электричество говорит, сколько вы потратили; живой монитор — когда и на что. PZEM-004T V3 с CT-клещами на 100 А меряет весь дом — напряжение, ток, мощность, накопленные кВт·ч — а ESP32 превращает это в дашборд с бегущим счётчиком стоимости, который смотришь с дивана. Без облака, без подписки — данные остаются дома.

ПроектЭнергияPZEM-004TCT-клещиESP32
Проект домашнего энергомонитора на ESP32: PZEM-004T, CT-клещи 100 А, кВт·ч и стоимость

Как это меряется

PZEM-004T — законченный измерительный фронтенд: напряжение сети он сэмплирует напрямую, ток — через разъёмные CT-клещи (защёлкнул вокруг фазы — без разрыва проводки), сам считает активную мощность и отдаёт ESP чистые числа по UART. Микроконтроллер не касается опасного аналогового сигнала — просто спрашивает V, A, W, кВт·ч.

PZEM-004T подключён к ESP32 по UART: 5V, GND, TX на RX2, RX на TX2
Четыре провода на низковольтной стороне: 5 В, GND, TX→RX2, RX→TX2. Собрано в BoardLab.

⚠ Правила высоковольтной стороны

Измерительная сторона PZEM подключается к живой сети 220 В — уважайте её: всё живёт в закрытой монтажной коробке, вход AC идёт через предохранитель 1 А, все земли общие, а стрелка CT-клещей (S1→S2) смотрит по направлению тока. Перед любым касанием той стороны — выключить автомат. Если работа с сетью не ваше — электрик разведёт коробку за десять минут: всё интересное здесь на низковольтной стороне.

Дашборд — тариф на входе, стоимость на выходе

Пресет pzem004t сам разворачивается в нужные виджеты; number-виджет хранит ваш тариф, стоимость — одно умножение. Скетч ниже работает вообще без сетиRisalFakePower гоняет реалистичную бытовую нагрузку, так что весь счётчик собирается и демонстрируется на столе:

#include <RisalUI.h>
#include <RisalFake.h>               // fake household load — test with no mains at all

RisalUI dash("Energy");
RisalFakePower meter;
float volts = 230, amps = 0, watts = 0, kwh = 0, pf = 0.9f, freq = 50, cost = 0;
int tariff = 12;                     // cents per kWh — tune it live

void setup() {
  dash.layout("Live", RICON_FLASH);
  dash.sensor("pzem004t", &volts, &amps, &watts, &kwh);  // V gauge · A · W chart · kWh
  dash.metric("Power factor", &pf);
  dash.stat("Cost", &cost, "$").decimals(2);
  dash.number("Tariff c/kWh", &tariff, 1, 100, 1);
  dash.beginAP("RisalDash-Power", "12345678");
}

void loop() {
  dash.update();
  meter.update();                    // appliances switch on/off, kWh accumulates
  volts = meter.voltage(); amps = meter.current(); watts = meter.power();
  kwh = meter.energy(); pf = meter.powerFactor();
  cost = kwh * tariff / 100.0f;
}

Когда коробка разведена — меняете фейк на реальный ридер; переменные те же, дашборд не меняется:

// The real reader — PZEM-004T V3 on Serial2 (library: mandulaj/PZEM-004T-v30).
#include <PZEM004Tv30.h>
PZEM004Tv30 pzem(Serial2, 16, 17);   // RX2, TX2

float v = pzem.voltage();
if (!isnan(v)) {                     // NaN = no reading — keep the last good value
  volts = v;
  amps  = pzem.current();
  watts = pzem.power();
  kwh   = pzem.energy();
  pf    = pzem.pf();
}

Обе половины есть как примеры библиотеки: examples/04_Templates/PowerMeter (счётчик) и EnergyMonitor (кВт·ч + стоимость + рубильник). Публикация в MQTT — и он автоматически появляется в энергопанели Home Assistant.

Список компонентов

ДетальРоль~Цена
ESP32 (или ESP8266)мозг + Wi-Fi + дашборд$3–5
PZEM-004T V3 + CT 100 Асобственно счётчик$8–12
HLK-PM01 (AC→5 В)питает ESP из той же коробки$2–3
Предохранитель 1 А + держательзащита входа$1
Монтажная коробка + сальникидержит пальцы подальше от сети$3–5
LCD 16x2 I²C (опц.)локальный экран на коробке$2

Меньше $25 целиком — коммерческие аналоги с приложением стоят в разы дороже, и, в отличие от них, этот дашборд отдаёт сам чип.

Соберите и настройте весь счётчик на фейковой нагрузке — коробку разведёте, когда будет готово.