PZEM04t V3 simple example whitout modbus library
Posted: Fri May 22, 2020 5:46 am
Hi! This is my first post.
Here is my example for use PZEM04t V3 energy monitor without modbus library,
using the default address 0xF8.
Next stop with mqtt.
Regards.
Here is my example for use PZEM04t V3 energy monitor without modbus library,
using the default address 0xF8.
Next stop with mqtt.
Regards.
Code: Select all
'''
Micropython in esp32 simple example for use PZEM04t V3 in default modbus address 0xF8
whitout modbus library. Use UART1 or UART2.
2020-05-22
Jaume Nogues, jnogues@gmail.com
'''
from machine import UART
import time, struct
uart = UART(2, 9600, tx=13, rx=14) #UART2, tx=gpio13 rx=gpio14
count=0
def read_measures():
signed=True
uart.write(b'\xF8\x04\x00\x00\x00\x0A\x64\x64')#read all raw measures
time.sleep(0.1)
payload = uart.read()
payload = payload[3:-2]
response_quantity = int(len(payload) / 2)
fmt = '>' + (('h' if signed else 'H') * response_quantity)
return struct.unpack(fmt, payload)
def reset_energy():
uart.write(b'\xF8\x42\xC2\x41')#reset energy
while True:
try:
#read all measures in one time
all_measures = read_measures()
print(all_measures)
#split and print measues
voltage = all_measures[0]/10.0
print('U = ' + str(voltage) + ' V')
current = ((all_measures[2]<<16) | (all_measures[1]))/1000.0
print('I = ' + str(current) + ' A')
power = ((all_measures[4]<<16) | (all_measures[3]))/10.0
print('P = ' + str(power) + 'W')
energy = ((all_measures[6]<<16) | (all_measures[5]))/1000.0
print('E = ' + str(energy) + 'kWh')
freq = all_measures[7]/10.0
print('freq = ' + str(freq) + ' Hz')
pf = all_measures[8]/10.0
print('power factor = ' + str(pf))
except:
#something wrong
print('pzem04 reading error')
#delay some seconds
time.sleep(5)