Saltar al contenido
IDE libre

← Componentes

Medidor de energía PZEM-004T v3.0 (10 A)

Medidor de energía de la red eléctrica (corriente alterna): mide tensión, corriente, potencia, energía acumulada, frecuencia y factor de potencia, y envía los valores por la UART con el protocolo Modbus RTU (9600 baudios, 8N1). El programa envía un pedido con CRC y comprueba el CRC de la respuesta antes de usar los números. En la mesa de trabajo la carga (potencia, factor de potencia, tensión de la red) se elige en el panel de la pieza. En el módulo de verdad el lado de la red tiene 127/220 V: móntalo solo con tu profesor.

Distribución de pines

PZEM-004T5VRXTXGNDcarga: 100 W5VRXTXGND
PinConectar aObservación
5VVIN (5 V)el conector TTL es pasivo: necesita 5 V de afuera
RXTX de la UART (ej.: TX2, GPIO17)el pedido Modbus entra por aquí
TXRX de la UART (ej.: RX2, GPIO16)la respuesta sale por aquí
GNDGNDsin los 4 cables conectados no se comunica
FastMindAsistente de IA local

La IA que recuerda tu vida y vive en tu ordenador

  • Memoria a largo plazo con la fuente de cada respuesta
  • Funciona sin conexión: tus datos se quedan en tu PC
  • Lee PDF, diapositivas, fotos y grabaciones de reuniones
Descargar gratis para Windows

Plan Esencial gratis para siempre

Ejemplo en MicroPython

from machine import UART
import struct, time

# RX del PZEM al TX2 (GPIO17), TX del PZEM al RX2 (GPIO16), 5V a VIN, GND a GND
# timeout_char mayor que los 26 ms de la respuesta de 25 bytes a 9600 baudios
uart = UART(2, 9600, tx=17, rx=16, timeout=200, timeout_char=50)

def crc16(dados):
    crc = 0xFFFF
    for b in dados:
        crc ^= b
        for _ in range(8):
            crc = (crc >> 1) ^ 0xA001 if crc & 1 else crc >> 1
    return crc

def ler_medidas(endereco=0x01):
    pedido = bytes([endereco, 0x04, 0, 0, 0, 10])  # 10 registros desde el 0x0000
    c = crc16(pedido)
    uart.write(pedido + bytes([c & 0xFF, c >> 8]))  # CRC: byte bajo primero
    r = uart.read(25)
    if r is None or len(r) != 25 or crc16(r[:-2]) != r[-2] | r[-1] << 8:
        return None  # sin respuesta o CRC incorrecto: se descarta
    v = struct.unpack('>10H', r[3:23])
    return {'V': v[0] / 10, 'A': (v[1] | v[2] << 16) / 1000, 'W': (v[3] | v[4] << 16) / 10,
            'Wh': v[5] | v[6] << 16, 'Hz': v[7] / 10, 'FP': v[8] / 100}

while True:
    print(ler_medidas())
    time.sleep(2)

Especificaciones

ElementoValorFuente
Comunicación9600 baudios, 8 bits, sin paridad, 1 bit de parada; Modbus RTUManual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Conector TTL5V, RX, TX, GND; pasivo, necesita 5 V de afuera; los 4 conectadosManual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Direcciones0x01–0xF7; 0x00 = broadcast (sin respuesta); 0xF8 = general (un solo aparato en la línea)Manual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Funciones0x04 lee medidas, 0x03 lee parámetros, 0x06 graba un parámetro, 0x42 pone la energía en cero, 0x41 calibraciónManual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Registros de medida (0x04)0x0000 tensión (0,1 V); 0x0001–0x0002 corriente (1 mA); 0x0003–0x0004 potencia (0,1 W); 0x0005–0x0006 energía (1 Wh); 0x0007 frecuencia (0,1 Hz); 0x0008 FP (0,01); 0x0009 alarma (0xFFFF)Manual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Parámetros (0x03/0x06)0x0001 límite de la alarma (1 W); 0x0002 dirección (0x0001–0x00F7)Manual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Rangos (modelo de 10 A)80–260 V; 0–10 A (mide desde 0,01 A); 0–2,3 kW (desde 0,4 W); 45–65 Hz; FP 0,00–1,00; 0–9999,99 kWhManual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
Erroresfunción + 0x80 y el código: 0x01 función, 0x02 dirección, 0x03 dato, 0x04 esclavoManual "PZEM-004T V3.0 User Manual" (AC communication module), narodmon.com/img/sens/PZEM-004Tv3.pdf
CRCCRC-16, polinomio 0xA001, byte bajo primeroMODBUS over Serial Line V1.02 (modbus.org), secciones 2.5.1 y 6.2.2; github.com/mandulaj/PZEM-004T-v30 (src/PZEM004Tv30.cpp, setCRC) — En verificación: las tablas del manual ponen el byte alto primero
Leer la respuesta25 bytes tardan ≈ 26 ms a 9600 baudios: usa un timeout_char mayor (ej.: 50 ms)MicroPython v1.29.0: ports/esp32/machine_uart.c (mp_machine_uart_read)
Tiempo de respuesta y de actualizaciónno están en el manual; aquí responde 3,5 caracteres después del fin del pedido y mide en el momentoMODBUS over Serial Line V1.02 (modbus.org), secciones 2.5.1 y 6.2.2 — En verificación: medir en el módulo
Dirección y límite de fábrica0x01 y 2300 W en el simuladorCatálogo de componentes de PyPlaca — En verificación: el manual no da los valores de fábrica
Fallas en la mesasin respuesta, CRC inválido, respuesta de otra dirección: simulan la línea, no el aparatoCatálogo de componentes de PyPlaca

Los valores con "En verificación" todavía se comprobarán en las piezas del laboratorio.

FastTeacherPara profesores

Del programa al semestre planificado

  • Plan de enseñanza y calendario montados solos
  • Diario de clases listo para pegar en el SIGA
  • Diapositivas y listas de ejercicios con solucionario
Conocer FastTeacher

Versión Community gratis · Windows

FastMindAsistente de IA local

La IA que recuerda tu vida y vive en tu ordenador

  • Memoria a largo plazo con la fuente de cada respuesta
  • Funciona sin conexión: tus datos se quedan en tu PC
  • Lee PDF, diapositivas, fotos y grabaciones de reuniones
Descargar gratis para Windows

Plan Esencial gratis para siempre

FastTeacherPara profesores

Del programa al semestre planificado

  • Plan de enseñanza y calendario montados solos
  • Diario de clases listo para pegar en el SIGA
  • Diapositivas y listas de ejercicios con solucionario
Conocer FastTeacher

Versión Community gratis · Windows