Проект · Энергия · Мониторинг
Видеть каждый ватт, который жжёт дом
Счёт за электричество говорит, сколько вы потратили; живой монитор — когда и на что. PZEM-004T V3 с CT-клещами на 100 А меряет весь дом — напряжение, ток, мощность, накопленные кВт·ч — а ESP32 превращает это в дашборд с бегущим счётчиком стоимости, который смотришь с дивана. Без облака, без подписки — данные остаются дома.
Как это меряется
PZEM-004T — законченный измерительный фронтенд: напряжение сети он сэмплирует напрямую, ток — через разъёмные CT-клещи (защёлкнул вокруг фазы — без разрыва проводки), сам считает активную мощность и отдаёт ESP чистые числа по UART. Микроконтроллер не касается опасного аналогового сигнала — просто спрашивает V, A, W, кВт·ч.
⚠ Правила высоковольтной стороны
Измерительная сторона 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, &s, &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 целиком — коммерческие аналоги с приложением стоят в разы дороже, и, в отличие от них, этот дашборд отдаёт сам чип.
Соберите и настройте весь счётчик на фейковой нагрузке — коробку разведёте, когда будет готово.