Авторизация
Зарегистрироваться

avatar RSS блога Подписка

Подключение монитора электропотребления PZEM-004 к WiFi контролеру NodeMcu Lua ESP8266

  • Цена: US$ 14.77+US$ 8.28

В первую очередь хочу поблагодарить сотрудников интернет магазина. За предоставленные образцы PZEM-004 и ESP8266
В следствии чего, у меня появилась возможность написать этот обзор и поделиться с вами тем что я узнал и сделал с этими замечательными приборами.

Я не буду описывать упаковку и характеристики данных товаров. подобные обзоры уже существуют на Муске. Я попытаюсь рассказать как можно соединить эти приборы и считывать информацию с PZEM-004 на ESP8266.

Данный экземпляр PZEM-004 имеет интерфейс Uart, который я и буду использовать. Первое препятствие на моем пути, стало то, что сигнальное напряжение на UART PZEM-004 5v а на ESP8266 3,3v. Можно конечно использовать модуль согласования напряжения. Но в данном случае я поступил проще и дешевле. Для того что бы UART интерфейс PZEM-004 работал на напряжении 3.3v достаточно впаять одно дополнительное сопротивление на плату PZEM-004.
Делается это так:
откручиваем 4 винта на задней крышке и снимаем лицевую панель


Дальше вытаскиваем плату из корпуса


И вот таким образом припаиваем сопротивление 1ком.


Теперь рабочее напряжение на сигнальных контактах PZEM-004 будет 3.3v.

Следующие препятствие состоит в том что штатные выходы UART ESP8266 который я использую подключены к интерфейсу USB и не могут быть использованы для других целей. Да и штатный USB штука полезная и может пригодиться для логирования и управления контролером через компьютер. Но выход есть.В ESP8266 UART можно переключать на альтернативные контакты.
GPIO13 и GPIO15. Но тут нас ожидает очередная засада.Дело в том что GPIO15 при включении питания контроллера должен находиться в низком уровне и на плате контроллера есть сопротивление которое подтягивает его к земле. Но при подключении этого контакта к RX контакту PZEM-004, он через светодиод оптрона оказывается подключенным к плюсу питания. Это приводит к тому, что если в момент включения питания на контроллере подключен UART интерфейс к PZEM-004, контроллер не запускается и переходит в режим прошивки.
Что бы этого избежать необходимо добавить ключ на транзисторе по схеме с общим коллектором.
На этом электрические заморочки закончены, и можно приступать к программированию.

Так выглядит готовый модуль.


С подключенным дисплеем.


Как-то так, это все работает.


Некоторая разница в показаниях видна из за того, что существует период опроса 2 сек и соответственно задержка в выводе показаний.


Минимальное напряжение при котором PZEM-004 еще работает

В данной конструкции можно использовать более дешевую модификацию без дисплея
PZEM-004t

В этом случае дополнительный резистор для согласования напряжения UART впаивается сюда:


Я делаю устройство которое будет контролировать некий агрегат для нагрева жидкости. Так что я добавил в схему датчик температуры.

Соединяем все детали вместе таким образом:

Подключаем PZEM-004


Подключаем датчик температуры ds18b20


Через модуль согласования уровней подключаем дисплей.
В моем случае LCD 2004


Тут берем скрипты на lua и закачиваем в контролер

В этом обзоре я описывал как прошивать контроллер и закачивать скрипты

Если мовый модуль PZEM-004 не будет отвечать, необходимо подать на него команду «установки адреса»

Это можно сделать так;

В скрипте POWER.lua найти такой кусок кода:

uart.write(0, 0xB0,0xC0,0xA8,0x01,0x01,0x00,0x1A); -- ??????????
--uart.write(0, 0xB4,0xC0,0xA8,0x01,0x01,0x00,0x1E);


И поправить так:
--uart.write(0, 0xB0,0xC0,0xA8,0x01,0x01,0x00,0x1A); -- ??????????
uart.write(0, 0xB4,0xC0,0xA8,0x01,0x01,0x00,0x1E);


Загрузить исправленный скрипт и запустить контроллер и PZEM-004.
После этого исправить текст скрипта обратно как было и снова его загрузить в контроллер.
После этого все должно заработать.

Всем удачи, хорошего настроения и радости от сделанного своими руками.

Товар предоставлен для написания обзора магазином. Обзор опубликован в соответствии с п.18 Правил сайта.
Планирую купить +28 Добавить в избранное +25 +39
свернуть развернуть
Комментарии (51)
RSS
+
avatar
+7
Годно, поскольку читать было интересно. Да и тема в общем раскрыта.
Хотя для новичков, скорей всего, не помешало бы разжевать некоторые пункты.
+
avatar
  • 100rm
  • 07 августа 2016, 15:27
+1
Согласен, хотелось бы больше подробностей, а не только способ подключения! В идеале показать работу на готовом устройстве в работе.
+
avatar
  • barkon
  • 07 августа 2016, 18:26
0
Хорошо. Придется подождать. Сделаю, напишу.
+
avatar
  • Helix59
  • 26 января 2017, 23:09
0
Какая потребляемая мощность самого PZEM-004 устройства? Много ли он сам скушает кВт*час?
+
avatar
  • barkon
  • 27 января 2017, 10:46
0
Даже не представляю. Думаю милливатты.
+
avatar
  • Mplus
  • 06 августа 2016, 08:38
0
А чего то подобного, но на 3 фазы нет?
+
avatar
  • barkon
  • 06 августа 2016, 12:04
+1
Если Вы готовы профинансировать постройку такого прибора, я Вам его сделаю.
+
avatar
  • Mplus
  • 06 августа 2016, 12:30
0
Я про PZEM-004t, но на 3 фазы. Остальное я и сам сделаю
+
avatar
  • barkon
  • 06 августа 2016, 12:59
+1
А если взять 3 PZEM-004t соединить звездой по напряжению.
Поставить логический коммутатор и опрашивать их по очереди.
+
avatar
  • kalobyte
  • 06 августа 2016, 12:45
0
есть 3х фазные счетчики с выходом рс485
+
avatar
  • Z2K
  • 06 августа 2016, 08:57
0
устройство которое будет контролировать некий агрегат для нагрева жидкости
Вы любитель пива собственного приготовления?
+
avatar
  • barkon
  • 06 августа 2016, 09:56
0
Гляди выше:) Ректификационную колонну
+
avatar
  • Z2K
  • 06 августа 2016, 17:22
0
Предполагал, но не стал писать. :) И какая высота?
+
avatar
  • barkon
  • 06 августа 2016, 21:33
0
Царга 1.5 метра:) из 35 медной трубы.
+
avatar
  • Z2K
  • 09 августа 2016, 04:47
0
Сенк.
+
avatar
  • DarkTwin
  • 06 августа 2016, 09:47
0
Господа, а такое же но уже в сборе и желательно на DIN-рейку? Хотя последнее не обязательно.
У меня часто проседает напряжение — срабатывает реле контроля напряжения — включается ИБП — пищит зараза.
Хочу логировать просадки и скачки — найти причину и устранить ее.
+
avatar
  • barkon
  • 06 августа 2016, 10:22
0
Про готовое не знаю. Мне нравиться ручками, самому делать то что необходимо.
+
avatar
  • DarkTwin
  • 06 августа 2016, 18:21
0
Ручками и я люблю, но мне надо то что поставить в щит на коммерческом объекте.
+
avatar
  • barkon
  • 06 августа 2016, 21:32
0
Не вопрос. Корпус под рейку купить не проблема. Основные грабли я описал. Остальное ручками. Я тоже делаю штуки для серьезных ко мерческих проектов. Глаза боятся, руки делают.
+
avatar
  • Um-ka
  • 07 августа 2016, 22:10
0
Я сделал
+
avatar
  • gulin176
  • 06 августа 2016, 09:51
0
Правильно ли я понимаю что прибор ничего не знает о напряжении, а только о токе. Тогда его нельзя считать точным методом
+
avatar
  • barkon
  • 06 августа 2016, 09:54
0
Прибор меряет напряжение, ток, активную мощность и израсходованную мощность.
+
avatar
  • Z2K
  • 06 августа 2016, 17:24
0
израсходованную мощность
— потребленную электроэнергию.
+
avatar
  • barkon
  • 06 августа 2016, 21:27
0
Да.
+
avatar
  • Naevus
  • 06 августа 2016, 10:01
+2
модуль согласования уровней пожалели для uart-а, но для дисплея — использовали только половину модуля :)
На самом деле — дисплей прекрасно управляется уровнями 3,3 (питание естественно, на модуль нужно подавать 5). Модуль согласования там лишний.
+
avatar
  • barkon
  • 06 августа 2016, 10:15
0
Спасибо за пояснение. Надо будет проверить.
+
avatar
  • Naevus
  • 07 августа 2016, 19:29
0
Тут логика такая: Практически все современные цифровые устройства (5-вольтовые) принимают за логическую 1 напряжение выше 3 вольт (соответственно ниже — ноль). Значит, для того, чтобы управлять такими (современными) устройствами — достаточно контроллера с 3,3 логикой.
Но вот если сигнал идет в обе стороны, или — сигнал входящий для контроллера — тогда, 5В логики с внешнего устройства могут оказаться неприемлемыми для контроллера. Вот тут то и нужен модуль согласования (хотя для чисто входящих сигналов можно и резисторным делителем обойтись).
+
avatar
  • kalobyte
  • 06 августа 2016, 12:48
0
китайцы сами дали товар на обзор или ты писал им?
+
avatar
  • barkon
  • 06 августа 2016, 12:57
0
Магазин предложил написать обзор на их товар по моему выбору.
+
avatar
  • serg_mur
  • 06 августа 2016, 15:04
+1
Как ардуинщик ардуинщику — плюс!
+
avatar
  • barkon
  • 06 августа 2016, 21:26
0
Спасибо
+
avatar
0
Какого номинала резистор впаивается?
+
avatar
  • barkon
  • 06 августа 2016, 21:25
+1
1 ком
+
avatar
0
Может кому-то пригодятся идеи по креплению плат и т.д.
zftlab.org/pages/2016050700.html
zftlab.org/pages/2015101400.html
esp8266.flymon.net/?macs=18FE34DE1372,18FE34DE1529,5CCF7F0A74B0&graphs=acvolt,temp,pres,rssi&period=24h#!/
+
avatar
  • Kirillm
  • 08 августа 2016, 00:32
0
Только сегодня заметил что на графиках у нас перепутани надписи AC Power Wt и AC Power/Hours Wt/h.
Надобно исправить
+
avatar
  • GoeZ
  • 08 августа 2016, 10:34
0
Вроде не плохо, но: не понятно для какого напряжения предназначено (укажите спецификацию)? На какую максимальную мощность рассчитано? Если вам сильно лень, то пожалуйста добавьте ссылки на подобные обзоры. Я понимаю, что хочется поделиться своим «рукожопством» (в хорошем смысле), но для кого этот прибор неизвестен будет полезно.
+
avatar
  • Kirillm
  • 08 августа 2016, 14:43
0
Внизу есть ссылки см Похожие публикации
+
avatar
  • barkon
  • 08 августа 2016, 22:56
0
Извини за минус промахнулся. Как можно исправить?
+
avatar
  • Kirillm
  • 09 августа 2016, 00:06
0
Разве плюс чтото меняет тут, видимость)
+
avatar
  • xtmp
  • 11 декабря 2016, 03:26
0
Есть только PZEM и ESP8266(такой же как у автора). Хочу начать с простого, но что-то не идет.
Кто-то может выложить код, на предмет вывода напряжения\тока с PZEM в консоль?
Без подключения модулей экрана и датчика температуры.
Заранее спасибо!
+
avatar
  • barkon
  • 12 декабря 2016, 09:18
0
Попробуйте сделать так:

Если мовый модуль PZEM-004 не будет отвечать, необходимо подать на него команду «установки адреса»

Это можно сделать так;

В скрипте POWER.lua найти такой кусок кода:

uart.write(0, 0xB0,0xC0,0xA8,0x01,0x01,0x00,0x1A); — ??????????
--uart.write(0, 0xB4,0xC0,0xA8,0x01,0x01,0x00,0x1E);

И поправить так:
--uart.write(0, 0xB0,0xC0,0xA8,0x01,0x01,0x00,0x1A); — ??????????
uart.write(0, 0xB4,0xC0,0xA8,0x01,0x01,0x00,0x1E);
+
avatar
  • xtmp
  • 12 декабря 2016, 11:50
0
Это я сделал. Я подключался через usb\uart к pzem, с консоли слал команды запроса напряжения — все ок, pzem отдает значения корректно.
Далее, я подключил pzem к nodemcu, выпилил из луа все, что связано с дисплеем и датчиком температуры, чтобы не мешало. И добавил вывод в консоль (в разных местах тыкал print). (Резюк на 1к и ставил и откидывал).

Не работало. Либо висло, либо принтало (init, exec, exec,exec, или data,data,data_)

init.lua
pastebin.com/tXuxCwKr

script4.lua
pastebin.com/ZQGzFS5L

POWER.lua
pastebin.com/VRXp7fnV

Но потом, я прочитал, что в обвзяке NodeMCU только один usb-uart преобразователь. Соответственно, когда мы переключаемся на резервные пины в консоль мы уже ничего не получим.

Вопрос. Можно ли поправить эти луа скрипты, а в идеале сделать все одним файлом, чтобы получать значения с pzem на веб страничку?
+
avatar
  • barkon
  • 12 декабря 2016, 13:17
+1
Ну да, вызывать print надо только после того как UART будет подключен к USB.
Вряд ли получится одним файлом. Оперативной памяти не хватит. Там вся фишка в множестве файлов в том, что они по очереди загружаются и выгружаются из памяти и ее хватает на всех.
+
avatar
  • xtmp
  • 12 декабря 2016, 16:45
0
Ну, в целом не важно одним или не одним файлом. Хотелось бы понимать, или как-то продебажить, что не срабатывает: — подключение esp к pzem или получение данных в консоль в то время когда esp подключен к pzem.

Поэтому я предположил, что можно в качестве дебага для начала выводить данные в локальный web-сервер, поднятый на esp.

Но в луа пока что не силен. Пробую, методом тыка :) Нид хелп.
+
avatar
  • barkon
  • 12 декабря 2016, 17:20
+1
Ну смотрите. Выполнять принт имеет смысл только после выполнения команды uart.alt(0)
После этого можно проверить глобальную переменную «P»
Если она -1 значит данные не получены и сработал таймаут.
Иначе можно проверить переменные V[1] и V[2] есть ли в них вменяемые значения, потом проверить переменную PWR. Все это можно отправлять в оператор print если P=0 или P=-1
+
avatar
  • xtmp
  • 12 декабря 2016, 17:41
0
спасибо, попробую.
+
avatar
  • xtmp
  • 03 мая 2017, 18:30
0
сделал.



годная штука.
+
avatar
  • Helix59
  • 26 января 2017, 23:09
0
Какая потребляемая мощность самого PZEM-004 устройства? Много ли он сам скушает кВт*час?
+
avatar
  • SergFG
  • 02 февраля 2017, 19:14
0
Купил для дачи эту штуку. Пока не наступил дачный сезон замутил мониторинг холодильника, казалось слишком часто и подолгу работает, решил проверить сколько кВт нажрёт за месяц-два-три (по паспорту 374 в год, но это ясно что при почти идеальных условиях).
Замечаю в графике аномалии по току. Сервер забирает инфу раз в минуту, и на соседних минутах ток на обычном уровне, т.е. аномалия длится менее минуты.
По мощности их нет, может не успевает словить их из-за своей инерционности, хотя попадать запросом прям в начало скачка тока и до увеличения мощности маловероятно. Вот и не пойму толи правда иногда он столько жрёт кратковременно, толи pzem гонит.

Аномалии редки (мониторится с 20.01.17):

2.18 A - 2 фев 2017, 21:55
2.42 A - 2 фев 2017, 1:28
1.94 A - 28 янв 2017, 10:18
1.81 A - 27 янв 2017, 6:49
6.41 A - 24 янв 2017, 11:43




Кто-нибудь замечал такое?

З.Ы. Сейчас контроллер по запросу с инета запрашивает у монитора данные и выдаёт серверу. Думаю сделать запросы монитора раз секунд в 20, три раза с интервалом секунды три. Сравнивать три полученных результата и если есть большие отличия опросить повторно три раза. И так пока данные не будут более-менее близки. Сохранять напряжение-ток-мощность-потреблённую в переменные и по запросу извне отдавать инфу с этих переменных. И только при определённом http-запросе запрашивать у монитора и отдавать с него, мало ли понадобится посмотреть данные на данный момент а не 1-20 секундной давности.
+
avatar
  • Maksym
  • 14 марта 2017, 01:38
0
Может измерение попадает на старт компрессора? Он при старте ток потребляет очень большой, но при этом и очень недолго.
+
avatar
  • xtmp
  • 05 мая 2017, 12:01
0
Есть такая идея.
Теперь зная среднее потребление компрессора холодильника(или, например, бойлера), вы можете с клем компрессора через реле\бп подать сигнал на один из входов esp, таким образом считать время работы компрессора. Далее время умножить на среднюю мощность и посчитать потребление. Таким образом PZEM можно переместить на общий ввод и считать и полное потребление и отдельно холодильника(бойлера, чего то еще).

Кто подскажет схему подключения и пример кода для реализации?

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.