Pzem 004t подключение к компьютеру с com портом rs 232 напрямую
Если информация была полезной для вас, вы можете поблагодарить за труды Яндекс деньгами: 41001164449086 или пластиковой картой:
PZEM-004T version V3~
- use I2CScan to detect your device address
- use DeviceAddress XXX (where XXX is the decimal converted address found) to set the I 2 C address
- set TelePeriod 10 to have the display refresh every 10 seconds (you can't go under this value)
- set DisplayModel 1 , and DisplayMode 0
- finally, add a Rule to display values (I choose these):
Software configuration~
Device Template
PZEM-004T version prior to V3:
Hardware connections~
Connect the serial interface of the HW-655 with the serial interface of the PZEM-004T.
As most parts are connected to high voltage AC it is recommended to fit the hardware in a solid enclosure.
Parts needed~
- Wemos D1 Mini
- PZEM-004T
- 1kOhm Resistor (optional - see alternate wiring)
- 5V buck converter power supply (search for "700ma 3.5w 5v" on usual stores. )
- I 2 C 1602 LCD Display (I had issues with green one, I 2 C address 0x3F, while no problems with blue ones, address 0x27)
- Mains Power cable
- Mammuth Clamps
Tasmota Configuration~
It is recommended to use GPIO1/GPIO3 or GPIO13/GPIO15 for the most reliable serial communications. When using other GPIOs software serial will be activated and used.
Не так давно я обозревал модуль Sonoff POW, который позволяет измерять потребление электроэнергии и выдавать данные по WiFi.
Сильно не понравилось отсутствие хоть какого то индикатора, низкий функционал, а так же отсутствие гальванической развязки от сети 220, что может приводить к плачевным результатам.
В конце концов приобрел готовую плату PZEM-004T с целью сборки измерителя мощности самостоятельно.
Tasmota Parameter Configuration~
Device Template
PZEM-004T version prior to V3:
Hardware connections~
As the PZEM-004T RX optocoupler series resistor (1K ohm, R15 for v.1 .0 and R8 for v.3.0 ) is designed for 5V, that resistor value had to be reduced in order to achieve the current for driving the RX optocoupler diode. This can be accomplished by soldering a 1k resistor between the joints shown below (modification works for version v.1.0 and v.3.0). The resistor has to be connected between VDD (5V/3.3V) terminal and the RX opto terminal 1.
PZEM-004T v.1.0
PZEM-004T v.3.0 It can be used a SMD resistor 102 or 1001 (1K) soldered near/parallel with R8 or a normal resistor (THT) similar to that used on the image of v.1.0 The resistor is placed in different place on v.3.0 because the optocouplers RX and TX are reversed compared to v.1.0
Connect the serial interface of the Sonoff Basic with the serial interface of the PZEM-004T. See pictures regarding used colors and connections.
- 3V3/5V Red
- Rx Yellow
- Tx Green
- Gnd Grey
If you need 5V you can use directly from Sonoff (for something else) but do not connect to PZEM logic because this will result in a big flash (kaboom!, the sonoff LIVE line may reach the PZEM NEUTRAL or viceversa). Using 5V from Sonoff for PZEM TTL port is safe but the resistor mod explained above must be undoed and another mod is needed for dropping the PZEM TX line from 5V to 3.3V. So, the simplest way is to use 3.3V from Sonoff to 5V TTL terminal of the PZEM and the resistor mod explained in the above images.
Cut the power cable in two and connect the input wires to both Sonoff Basic and PZEM-004T. Route one of the power output wires through the PZEM-004T core and connect the output wires to the Sonoff Basic output.
As most parts are connected to high voltage AC it is recommended to fit the hardware in a solid enclosure.
Images and Wiring diagram~
DANGER - MAINS VOLTAGE. Be sure to crimp connectors and use heat-shrinking tube wherever possible/needed, and tightly secure any screw.
How it looks, from web GUI:
You can set the contrast using the little trimmer/pot on back of the display. I cut a bit of the corners from the display to have it flush with border, and used two hexagonal plastic standoffs with nuts and bolts to secure it to transparent top.
Mains IN, mains OUT, all sealed:
Wiring Diagram: * Check images below for more information about the 1kOhm resistor needed to use 3.3V instead of 5V for the PZEM-004T serial connection.
PZEM-004T v.1.0
PZEM-004T v.3.0
Характеристики модуля
- Измерение текущего напряжение сети переменного тока 80-260В
- Измерение тока 0 — 100А
- Измерение активной мощности 0 — 22КВт
- Измерение потребленной электроэнергии
- Точность измерения 1%
- Рабочая частота 45-65Гц
- Последовательный интерфейс UART со скоростью 9600
- Напряжение питания 5В
- Возможность подключения LCD или LED дисплеев
Размер платы 31×74мм, диаметр катушки трансформатора тока 33мм
В комплекте идет сам модуль и трансформатор тока
Сердце модуля — микросхема SD3004 от китайской компании SDIC Microelectronics Co., Ltd предназначенная для измерения электроэнергии.
Кроме того на плате видна микросхема EEPROM Atmel 24C02C на 256 байт с миллионом циклов записи и две оптопары PC817, обеспечивающих гальваническую развязку последовательного интерфейса.
Так же на плате есть не распаянный разъем для подключения LED или LCD (судя по описанию микросхемы SD3004)
В интернете я нашел описание модуля PZEM-004T в котором есть схема подключения и протокола обмена с компьютером.
Протокол обмена по UART довольно примитивный, кроме того можно найти готовые ардуиновские библиотеки, работающие как с аппаратным, так и по программным последовательным интерфейсом.
Для теста модуля использовал Arduino Mega 2560 имеющего три аппаратных последовательных шины.
Цепляю RX и TX к 18 и 19 выводам, соответствующим интерфейсу Serial1, чтобы в Serial0 выводить отладочную информацию.
PZEM-004~
The PZEM-004T together with a Sonoff Basic provide a good clamp on energy monitor.
Подведем итог
Модуль полностью оправдал мои ожидания.
Прибор соответствует поставленным требованиям, и имеет большие возможности по доработке.
Трудности, с которыми столкнулся — малой количество информации, очень поверхностные даташиты. Этим грешат многие китайские приборы.
Например, следующая версия будет без экрана, но с возможностью передачи информации на MQTT сервер.
В комплекте идет сам модуль и трансформатор тока
Сердце модуля — микросхема SD3004 от китайской компании SDIC Microelectronics Co., Ltd предназначенная для измерения электроэнергии.
Кроме того на плате видна микросхема EEPROM Atmel 24C02C на 256 байт с миллионом циклов записи и две оптопары PC817, обеспечивающих гальваническую развязку последовательного интерфейса.
Так же на плате есть не распаянный разъем для подключения LED или LCD (судя по описанию микросхемы SD3004)
В интернете я нашел описание модуля PZEM-004T в котором есть схема подключения и протокола обмена с компьютером.
Протокол обмена по UART довольно примитивный, кроме того можно найти готовые ардуиновские библиотеки, работающие как с аппаратным, так и по программным последовательным интерфейсом.
Для теста модуля использовал Arduino Mega 2560 имеющего три аппаратных последовательных шины.
Цепляю RX т TX к 18 и 19 выводам, соответствующим интерфейсу Serial1, чтобы в Serial0 выводить отладочную информацию.
Трансформатор тока надеваю на провод, идущий к розетке
Подключаю розетку к сети
На экране видны показатели напряжения, тока, мощности и потребленной электроэнергии
Показания совпадают с моим прибором VC97 до 3-го знака. Модуль без проблем мерит зарядники с телефоном мощностью около 5Вт.
Прибор, кроме самого PZEM-004, будет состоять из
Модуля ESP826612F
Цветного TFT дисплея 240x320 на контроллере ILI9341
Миниатюрного блока питания на 5В
Ну и небольшого количества навесных деталек, корпуса и материалов, которые обычно есть в наличии у уважающего себя радиолюбителя. Общий бюджет вышел в пределах $20 (цены могли немного измениться с момента покупки)
Схема прибора
Чертеж платы в Sprint Layers
Печатаю на специальной бумаге
Перенос только ламинатором, никаких утюгов
После остывания весь тонер без остатка переносится на плату
Травлю в лимонной кислоте (6 ложек на стакан + 1 ложка поваренной соли для вкуса ))). Обязательно в вертикальной ванночке.
Вместо 5% перекиси водорода использую 30% пергидроль, использующийся для чистки бассейнов. Это гораздо эффективнее и удобнее.
«Добавим волшебных пузырьков»
Травится все 5-30 минут в зависимости от температуры и количества пергидроля
Теперь можно сделать отверстия и обрезать плату по размеру
Плата после лужения
И распаивания деталек
Не обошлось и без доделок на ходу
Модуль не работает с 3-х вольтовой логикой ESP, поэтому резистор 1КОм R17 в цепи оптрона нужно уменьшить. Я просто напаял параллельно еще один резистор 1КОм
Устройство получилось такое
Трансформатор тока влазить в корпус и розетку не захотел. Пришлось оставить снаружи.
Software configuration~
Configure the GPIO's for hardware serial connection as shown below.
IMPORTANT: If using the connections as following, the communication works in all cores due to TASMOTA using hardware serial. If the user wants to use other GPIOs for communication, TASMOTA will emulate a serial interface using software serial. This feature does not work using core 2.3.0 due to insufficient RAM. To use the software serial feature, you must use a core version of 2.4.2 or greater.
Device Template
PZEM-004T version prior to V3:
Preparation~
Install Tasmota on the ESP-01 and confirm it is functional before connecting the PZEM-004T to its serial interface. Use of pins other that the default hardware serial GPIO (01 & 03) in order for TASMOTA to emulate a serial interface using software serial.
Calibration~
Per Theo - As the PZEM is a dedicated energy monitor, device calibration in TASMOTA is currently not supported.
Прошивка
Для работы дисплея выбирал между библиотекой UTFT и Adafruit GFX. Выбрал вторую из за больших возможностей и скорости работы.
Из библиотеки PZEM-004 выкинул поддержку SoftwareSerial, так как из за нее не хотела собираться под ESP8266
Прошивку с правлеными библиотеками выложил на GITHUB
PZEM-016~
DO NOT PERFORM THIS MODIFICATION WITHOUT REMOVING POWER FROM THE PZEM FIRST!
Note: the PZEM-016 TTL output is at 5V signal levels. There are varying schools of thought on whether the ESP82xx has 5V tolerant GPIO. You may want to use a level shifter for the serial communications signals to bring them to the recommended 3.3V.
PZEM-016 modules can be converted from RS485 to TTL serial level devices by simply removing the internal MAX485 chip and adding two internal jumper wires. This will bring the serial port connections out via the four-pin terminal block. Pin A is now TTL serial out (Tx) and pin B TTL serial in (Rx). The modification retains the optical isolation used by the PZEM for safety to ensure no high voltages on the outputs.
You can use a voltage level shifter to power the ESP82xx from the PZEM-016 module's 5V power. This may also require a 470uf 35V capacitor across the 5V line to work reliably.
Требования к измерителю мощности:
- Гальваническая развязка при измерении тока сети 220В
- Информативный дисплей
- Беспроводной подключение к компьютеру
- Возможность сохранения измерения с последующим просмотром или копированием на компьютер.
- Точность не менее 5%
Выбор мой пал на модуль PZEM-004T в виде отдельной платы.
Возможности прошивки:
- Измерение напряжения 80-260В, тока 0-100А, мощности 0-22кВт и потребленной электроэнергии
- Выдача мгновенных показателей на экран (обновление 1 сек)
- Выдача мгновенных показателей в WEB-интерфейс
- Построение графика мощности (150 значений по 2 сек)
- Сохранение всех показателей в журнал (файл) во внутренней памяти EEPROM с настраиваемой дискретностью
- Просмотр, скачивание и удаление журналов
- Синхронизация времени по NTP и привязка значения в журнале к времени
- Сохранение в файл внеочередного значения показателей с маркировкой по нажатию кнопки
- Приостановка и возобновление записи в журнал через WEB-интерфейс или по длительному нажатию кнопки
- Настройка параметров сети через WEB-интерфейс и сохранение конфигурации в EEPROM ESP8266
- Обновление прошивки через WEB-интерфейс
Preparation~
You need to compile your own Tasmota firmware as none of the pre-compiled binaries have support for display and PZEM module.
Set up your preferred IDE as described in wiki
Enable IDE to Use Custom Settings~
Create user_config_override.h in the tasmota folder and paste the contents of this sample configuration file.
PlatformIO~
- Rename platformio_override_sample.ini. to platformio_override.ini
- Enter platformio run -e
Examples: - platformio run -e tasmota-sensors
- platformio run -e tasmota-DE
Arduino IDE~
Flash the binary on the Wemos D1 Mini and confirm it is functional before connecting the PZEM-004T to its serial interface.
Прошивка
Для работы дисплея выбирал между библиотекой UTFT и Adafruit GFX. Выбрал вторую из за больших возможностей и скорости работы.
Из библиотеки PZEM-004 выкинул поддержку SoftwareSerial, так как из за нее не хотела собираться под ESP8266
Прошивку с правлеными библиотеками выложил на GITHUB
Parts needed~
PZEM-004T version V3~
The PZEM-004T together with a HW-655 Relay provide a good clamp-on energy monitor for a 240V clothes dryer.
Parts needed~
- Sonoff Basic
- PZEM-004T
- Resistor 1k
- Power cable
Возможности прошивки:
- Измерение напряжения 80-260В, тока 0-100А, мощности 0-22кВт и потребленной электроэнергии
- Выдача мгновенных показателей на экран (обновление 1 сек)
- Выдача мгновенных показателей в WEB-интерфейс
- Построение графика мощности (150 значений по 2 сек)
- Сохранение всех показателей в журнал (файл) во внутренней памяти EEPROM с настраиваемой дискретностью
- Просмотр, скачивание и удаление журналов
- Синхронизация времени по NTP и привязка значения в журнале к времени
- Сохранение в файл внеочередного значения показателей с маркировкой по нажатию кнопки
- Приостановка и возобновление записи в журнал через WEB-интерфейс или по длительному нажатию кнопки
- Настройка параметров сети через WEB-интерфейс и сохранение конфигурации в EEPROM ESP8266
- Обновление прошивки через WEB-интерфейс
Preparation~
Install Tasmota on the Sonoff Basic and confirm it is functional before connecting the PZEM-004T to its serial interface.
PZEM-004T version V3~
Use the module template to configure the GPIO's for hardware serial connection.
IMPORTANT: If using the connections as following, the communication works in all cores due to TASMOTA using hardware serial. If the user wants to use other GPIOs for communication, TASMOTA will emulate a serial interface using software serial. This feature does not work using core 2.3.0 due to insufficient RAM. To use the software serial feature, you must use a core version of 2.4.2 or greater.
Подведем итог
Модуль полностью оправдал мои ожидания.
Прибор соответствует поставленным требованиям, и имеет большие возможности по доработке.
Трудности, с которыми столкнулся — малой количество информации, очень поверхностные даташиты. Этим грешат многие китайские приборы.
Например, следующая версия будет без экрана, но с возможностью передачи информации на MQTT сервер.
PZEM is a dedicated separate energy monitor, device calibration in Tasmota is not supported.
Работаем с COM портом RS-232 напрямую из PHP для Peacefair pzem-004t
Иногда встречаются экзотические ситуации, когда приходиться работать напрямую с оборудованием используя языки программирования, совсем не предназначенные для этого, как например взаимодействие c COM портом в PHP. Некоторые скажут, что это невозможно, более продвинутые будут использовать посредников, эстеты предпочтут стороннюю библиотеку.
На самом деле всё не так страшно, и я опишу как взаимодействовать c COM RS-232 из PHP без сторонних библиотек и посредников в Linux, на примере вольтметра-амперметра Peacefair pzem-004t.
Сразу оговорюсь, что использовать PHP для работы с оборудованием по протоколу RS-232 далеко не самая лучшая затея, и для этого более предпочтительно использовать, например, C. Но если очень надо, то почему бы и нет?
Небольшое отступление касательно самого Peacefair pzem-004t, это вольтметр-амперметр для измерения параметров электрической сети 220В.
Обмен данными с устройством происходит по протоколу RS-232 TTL, это обычный COM порт, но только не с уровнями +12В -12В, а +5V либо +3.3В (чаще), в зависимости от реализации устройства.
В случае Peacefair pzem-004t TTL уровни +3.3В, однако доп питание +5В.
Для того чтобы подключить подобное устройство достаточно USB-TTL конвертора.
В системе такое устройство будет отображаться как обычный последовательный порт.
Рис. 4.
Ну да мы отвлеклись, работать я буду в консоли Linux на Raspberry Pi 3.
Собственно, простой код, который вы можете в последствии трансформировать в что-то более серьёзное.
function dev($dev, $tx) exec("stty -F $dev 9600 raw -echo");
if ($handle = fopen($dev, "r+")) fwrite($handle, $tx);
$rx = fread($handle, 7 );
fclose($handle);
//echo bin2hex($rx).PHP_EOL;
if (check($rx) === true)
return $rx;
else
return false;
>
else
return false;
>
function check($in) $arr = str_split(bin2hex($in),2);
$summ = 0;
for ($i = 0; $i $summ += hexdec($arr[$i]); //hex to dec
if (substr(dechex($summ),-2) == $arr[6]) //last 2 chr. from hex
return true;
else
return false;
>
//voltage
$arr = str_split(bin2hex(dev($dev,hex2bin('B0C0A80101001A'))),2);
$voltage = hexdec($arr[1].$arr[2]) + hexdec($arr[3])/10;
//current
$arr = str_split(bin2hex(dev($dev,hex2bin('B1C0A80101001B'))),2);
$current = hexdec($arr[2]) + hexdec($arr[3])/100;
//active
$arr = str_split(bin2hex(dev($dev,hex2bin('B2C0A80101001C'))),2);
$active = hexdec($arr[1].$arr[2]);
//energy
$arr = str_split(bin2hex(dev($dev,hex2bin('B3C0A80101001D'))),2);
$energy = hexdec($arr[1].$arr[2].$arr[3]);
echo 'Voltage:'.$voltage.PHP_EOL;
echo 'Current:'.$current.PHP_EOL;
echo 'Active:'.$active.PHP_EOL;
echo 'Energy:'.$energy.PHP_EOL;
?>
Разберём код по порядку:
/dev/ttyUSB0 – устройство с которым я буду работать,
dev($dev, $tx) – функция задачей которой будет принять аргументы: имя устройства и данные для отправки, после чего вернуть принятые данные.
exec("stty -F $dev 9600 raw -echo") – мы настраиваем работу порта, указывая 9600 – скорость , raw – входные и выходные данные передаются напрямую как есть, без обработки, -echo не пересылать себе переданные собой же данные.
Далее мы работаем с устройством как с обычным файлом
fwrite($handle, $tx) – передаём данные
fread($handle, 7 ) – принимаем данные, 7 – поскольку в моём случае на каждый посыл команды меня интересует ответ в 7-мь байт.
Дальнейший код больше относиться к особенностям pzem-004t.
Функйия check($in) – проверяет корректность принятых данных по контрольной сумме байтов с 0-6 которая должна быть равна 7-му. Особой необходимости в ней нет, но если производитель использует контроль целостности, то можно реализовать проверку.
Далее, я поочерёдно посылаю запросы (предварительно переведя их из hex в bin’арные данные) на устройство и принимаю данные для вычисления:
hex: B0C0A80101001A – запрос напряжения
hex: B1C0A80101001B – запрос тока
hex: B2C0A80101001C – запрос текущей потребляемой мощности
hex: B3C0A80101001D – запрос потреблённой электроэнергии
Более подробно узнать о запросах, ответах, и том как их интерпретировать можно в документации: Peacefair pzem-004t specification
Ну и собственно результат выполнения.
Рис.5.
Как видите нет ничего сложного. Все желающие могут использовать этот код, сославшись в случае публикации на первоисточник.
В комплекте идет сам модуль и трансформатор тока
Сердце модуля — микросхема SD3004 от китайской компании SDIC Microelectronics Co., Ltd предназначенная для измерения электроэнергии.
Кроме того на плате видна микросхема EEPROM Atmel 24C02C на 256 байт с миллионом циклов записи и две оптопары PC817, обеспечивающих гальваническую развязку последовательного интерфейса.
Так же на плате есть не распаянный разъем для подключения LED или LCD (судя по описанию микросхемы SD3004)
В интернете я нашел описание модуля PZEM-004T в котором есть схема подключения и протокола обмена с компьютером.
Протокол обмена по UART довольно примитивный, кроме того можно найти готовые ардуиновские библиотеки, работающие как с аппаратным, так и по программным последовательным интерфейсом.
Для теста модуля использовал Arduino Mega 2560 имеющего три аппаратных последовательных шины.
Цепляю RX т TX к 18 и 19 выводам, соответствующим интерфейсу Serial1, чтобы в Serial0 выводить отладочную информацию.
Трансформатор тока надеваю на провод, идущий к розетке
Подключаю розетку к сети
На экране видны показатели напряжения, тока, мощности и потребленной электроэнергии
Показания совпадают с моим прибором VC97 до 3-го знака. Модуль без проблем мерит зарядники с телефоном мощностью около 5Вт.
Прибор, кроме самого PZEM-004, будет состоять из
Модуля ESP826612F
Цветного TFT дисплея 240x320 на контроллере ILI9341
Миниатюрного блока питания на 5В
Ну и небольшого количества навесных деталек, корпуса и материалов, которые обычно есть в наличии у уважающего себя радиолюбителя. Общий бюджет вышел в пределах $20 (цены могли немного измениться с момента покупки)
Схема прибора
Чертеж платы в Sprint Layers
Печатаю на специальной бумаге
Перенос только ламинатором, никаких утюгов
После остывания весь тонер без остатка переносится на плату
Травлю в лимонной кислоте (6 ложек на стакан + 1 ложка поваренной соли для вкуса ))). Обязательно в вертикальной ванночке.
Вместо 5% перекиси водорода использую 30% пергидроль, использующийся для чистки бассейнов. Это гораздо эффективнее и удобнее.
«Добавим волшебных пузырьков»
Травится все 5-30 минут в зависимости от температуры и количества пергидроля
Теперь можно сделать отверстия и обрезать плату по размеру
Плата после лужения
И распаивания деталек
Не обошлось и без доделок на ходу
Модуль не работает с 3-х вольтовой логикой ESP, поэтому резистор 1КОм R17 в цепи оптрона нужно уменьшить. Я просто напаял параллельно еще один резистор 1КОм
Устройство получилось такое
Трансформатор тока влазить в корпус и розетку не захотел. Пришлось оставить снаружи.
Читайте также: