Wi-Fi энергомонитор на PZEM-004t и ESP-12F

Доброго времени суток!

Давно хотел сделать измерение потребления электричества в квартире. Подумывал о разных приспособах, но все они как-то не вызывали доверия.

Датчики вроде ACS712 как-то не вызывали доверия (уж слишком хлипкими выглядели),  SCT-013-000 казались громоздкими.

И совершенно случайно мне попалась на глаза замечательная вещь - PZEM-004T:

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

(Кстати, есть версия с индикацией, подробнее обо всём на буржуйском сайте ).

Возможности модуля (подробнее можно посмотреть в даташите ):

Измеряемое напряжение: 60 - 280 В переменки;

Ток: до 100 А / 22 кВт;

Частота: 45-65 Гц;

По запросу может выдавать значение напряжения (В), тока (А), активную мощность (Вт), потребленную энергию (Вт*час). Еще можно выставлять сигнализацию на определенную мощность (в кВт), но, похоже, это касается только разновидности с экраном.

Киловатт-часы хранятся до 99 999 Вт*ч, потом идёт сброс в 0.

Есть кнопка сброса значения Вт*ч, ее нужно подержать 5 сек. В этот момент модуль не отвечает по TTL.

Схема подключения проста:

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост
А вот с управлением всё несколько печальнее.

Для получения данных нужно выставить адрес командой в порт "B4 C0 A8 01 01 00 1E", где B4 - собственно команда, C0 A8 01 01 это адрес 192.168.1.1, 00 просто плейсхолдер (используется только при задании значения мощности сигнализации), Е1 - контрольная сумма.

Для получения значения напряжения нужно отправить команду "B0 C0 A8 01 01 00 1A", где В1 - команда, потом опять адрес и контрольная сумма.

Нам придет ответ вида R = A0 00 E6 02 00 00 88, где А0 - метка ответа, Е6 - старший разряд (230 Вольт), 02 - младший (2 Вольта), 88 - контрольная сумма. Напряжение тут R[2]  + R[3] = 232 В.

Подробнее в даташите.

Использовал вот эту  библиотеку.

Добавляем энергомер в скетч:

#include "pzem-004t.h"

PZEM_004T pzem(10,11); // для общения используется SoftwareSerial, т.е. в случае ESP-12F можно использовать пины 0-5 и 12-15


void setup()

{

while(!pzem.setAddress(192,168,1,1)); // инициализируем. С любым адресом, лишь бы они отличались, если PZEM-ок несколько.

}

void loop()

{

float V = pzem.getVoltage(); //меряем напряжение

if (V > 0) Serial.println("V = " + (String)V + " Volts"); // значение "-1" это ошибка получения данных

delay(1000);

}

TTL-логика у PZEM-004T 5 В, вполне можно спалить порт ESP-шки, поэтому я, не выпендриваясь, сделал делитель напряжений на резисторах (рассчитать можно здесь):

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Кстати, у меня PZEM  +5В не давал, пришлось использовать отдельный БП на 5 В (для PZEM) и понижать до 3.3 В (для ESP) с помощью AMS -1117-3.3 и пары кондёров.

Для удобства решил еще добавить OLED-дисплей SSD1306 разрешением 128 х 64 с I2C:

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Библиотеку брал отсюда.

Если ESP его не видит, попробуйте поменять местами SDA и SCL или прогнать I2C device scanner, иногда заявленный адрес не соответствует фактическому.

Умеет даже в скролл и прогрессбар.

Команды, в принципе, в комментариях не нуждаются

display.init();

display.setTextAlignment(TEXT_ALIGN_LEFT);

display.setFont(ArialMT_Plain_16);

Шрифт любого размера можно сделать тут и добавить в "...\Arduino\libraries\esp8266-oled-ssd1306-master\src\OLEDDisplayFonts.h"

Лично у меня шрифт 50 размера для удобства чтения издалека.

На экран выводится потребление в Вт (999) или в кВт (1.8к), в зависимости от текущей нагрузки.

Чтобы не "гуляли" ноги, заодно приделал термометр Dallas DS18B20.

Ну и куда же, естественно, без IoT?)

Данные с энергомера будем выгружать в https://thingspeak.com/. Как с ним работать, я уже как-то  писал.

Все устройство поместилось в корпус на DIN-рейку на две позиции (или как оно называется?).

В тестовом варианте выглядело всё вот так:

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

ТТ висит на фазе удлинителя где-то за границами фото.

Полная съема выглядит так (да, мне всё еще лень рисовать нормальные схемы. Надеюсь, ничего не забыл)

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Традиционным методом ЛУТ сделана (не без косяков) плата (размеры примерно 30*58 мм, с вырезами под болты корпуса)

Слишком тонкая дорожка слева-снизу почти сразу оторвалась.

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Полностью собранный, но еще не отмытый счетчик (на том этапе еще показывал напряжения и ток. Что информативней показывать активную мощность, я решил позже):

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Готовое устройство на рейке выглядит так (включен комп + свет)

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Тут еще добавился чайник (на котором написано 2 кВт).

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Засёк также:

Комп (i3, 1060, 2 HDD, 20" TFT-моник) - 89 Вт в без нагрузки, 130 Вт в WoT / Dota 2

Комп в спящем режиме - 10 Вт;

Четыре 5 Вт LED лампы Е14 - 22 Вт;

Пылесос в холостую - 1,37 кВт (мощность 350 Вт / 1800 МАХ);

Комп на ночь выключается из розетки, ночью в темноте потребление около 12 - 15 Вт (не морозящий холодильник, роутер, может, зарядное).


В течении дня напряжение меняется примерно так (данные отсылаются каждые 5 минут). Можно заодно отслеживать качество напряжения в доме.

Wi-Fi энергомонитор на PZEM-004t и ESP-12F Arduino, Wi-Fi, Thingspeak, Pzem-004t, Oled, SSD, Esp8266, Тег, Длиннопост

Скетч, фотки и библиотеки в гугл-диске

Вроде бы ничего не забыл.

Если что, спрашивайте ;)

Спасибо за внимание!

Arduino & Pi

1.4K постов20.6K подписчика

Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Вы смотрите срез комментариев. Показать все
7
Автор поста оценил этот комментарий

Есть кнопка сброса значения Вт*ч, ее нужно подержать 5 сек. В этот момент модуль не отвечает по TTL.

Для сброса кнопку надо держать 5 сек, потом отпустить и кратковременно нажать 1 раз. TTL при этом должен быть отключён, иначе не сбросится.

TTL-логика у PZEM-004T 5 В, вполне можно спалить порт ESP-шки, поэтому я, не выпендриваясь, сделал делитель напряжений на резисторах

Вот это вообще непонятно зачем. Логика у PZEM не имеет собственного питания. Питания идёт от контроллера. Рассчитана она на 5В, для 3.3В ESP достаточно просто поменять на PZEM R17 с 1кОм на 500 Ом.


Кстати, у меня PZEM +5В не давал, пришлось использовать отдельный БП на 5 В (для PZEM) и понижать до 3.3 В (для ESP) с помощью AMS -1117-3.3 и пары кондёров.

5В будут только когда PZEM подключена к источнику тока и токовый трансформатор подключён к PZEM. Питать её отдельно не надо. Вы таким образом связали гальванически датчик и ESP. А там специально сделана гальваническая развязка разъёма TTL. Вы рискуете получить бабах.


Сам недавно делал мониторинг на PZEM. Только делал на 3 фазы, чип Ардуино нано, а вывод информации через блинк. И сделал программный сброс показаний.

Вот можно на мой проект глянуть. https://github.com/dodther/Energomonitor

раскрыть ветку (13)
Автор поста оценил этот комментарий

upd. если убрать питание пзем, его не видит есп.

раскрыть ветку (11)
2
Автор поста оценил этот комментарий

А на TTL подаешь питание?

раскрыть ветку (10)
Автор поста оценил этот комментарий
на разъем пзем идут rx, tx, gnd - не видит.

добавить +5 - видит.

раскрыть ветку (9)
2
Автор поста оценил этот комментарий

Вот такая схема подключения должна быть. Никаких дополнительных БП. Питание на TTL разъём PZEM идет напрямую от ESP. От этого питания работают только оптореле и ничего более. Таки образом обеспечивается гальваническая развязка от сети 220В. Можно не выпаивать а сверху параллельно припаять точно такой-же и тогда 1кОм + 1кОм в параллели дадут 500 Ом.

Иллюстрация к комментарию
раскрыть ветку (8)
Автор поста оценил этот комментарий

Вот теперь ясно.

5В будут только когда PZEM подключена к источнику тока и токовый трансформатор подключён к PZEM.

Я почему-то подумал, что пзем выдаст питание +5, а на него можно будет повесить есп.

раскрыть ветку (4)
1
Автор поста оценил этот комментарий

Я неудачно сформулировал. 5В будет на самой микросхеме PZEM. А на разъёме TTL нет. Можно взять 5В с разъёма для экрана, но делать это крайне не рекомендуется. Никакой связи проводами между левой и правой частями быть не должно.

Иллюстрация к комментарию
раскрыть ветку (3)
Автор поста оценил этот комментарий
Ясно. Кстати, отверстия под перемычку с буквой W рядом с кнопкой не параллельно этой кнопке, вы не в курсе?
раскрыть ветку (2)
2
Автор поста оценил этот комментарий

Не параллельно. Один контакт общий ( к которому широкая дорожка идёт), это "-". А второй идёт на отдельную ногу микрухи. Вот картинка увеличенная, должно быть видно. Я, когда делал сброс программный, паял оптрон прям к ногам кнопки.

Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий
Понятно.
Спасибо!
Автор поста оценил этот комментарий

Увы, манипуляции с сопротивлениями на самой пзем превращают её в кирпич. Вернул делитель напряжения.

раскрыть ветку (2)
2
Автор поста оценил этот комментарий

А на каких пинах подключена PZEM? У меня работает не на каждом порту. Завелось только на 0,5. меняем R17 на 500 Ом, и вместо 5В с бп подаём 3,3 с ESP. И всё изумительно пашет. Вот схема порта на PZEM. Ясно видно что R15 это подтягивающее питанию сопротивление, а R17 ограничивает ток идущий на оптореле. Так что тут нет никаких препятствий для работы с логикой любого уровня. Хоть 3.3, хоть 5. Главное верный номинал R17.  А вот почему программный сериал работает не на всех ногах я хз.

Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий

Ну схему я среверсил такую же, а вот порты не менял. Нужно попробовать

Автор поста оценил этот комментарий
На 99% уверен, что напряжения пзем не выдавал, но обязательно проверю, когда будет возможность.
Про ресет подумывал, но не стал заморачиваться. Посчитал , что проще будет обрабатывать показания на серваке.
Про R17 знаю, но решил не трогать плату пзем, хотя впоследствии пришлось выпаивать некоторые элементы, сверлить отверстия под крепления и припаивать обратно.
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку