PZEM-004T v3.0 AC meter
Peacefair PZEM-004T V3.0, 10 A version (shunt inside) · 80–260 V AC · measures V, A, W, Wh, Hz, PF · TTL UART 9600 8N1 through optocouplers, Modbus RTU · powered from the AC side: no mains, no answer

Try it on the benchThe lab drops it on an empty bench and opens its datasheet card.
Typical part: Peacefair PZEM-004T V3.0, 10 A version (internal shunt)
Pins
- L (voltage sense)
- N (voltage sense)
- Current IN (load current enters)
- Current OUT (to the load)
- 5V (TTL side supply)
- RX (← MCU TX)
- TX (→ MCU RX)
- GND (TTL side)
Ratings and limits
| Voltage | 80–260 V AC, 0.1 V resolution, ±0.5 % |
|---|---|
| Current | 0–10 A (this version, internal shunt); the 100 A version uses a split current transformer instead |
| Measures | V, A, W, Wh (energy kept through power loss), Hz (45–65), power factor, plus an over-power alarm |
| Interface | TTL UART 9600 8N1, Modbus RTU, isolated by optocouplers. The TTL side is powered by the MCU (3.3–5 V), but the meter only answers while mains is on its L/N terminals |
| Address | default 0x01; 0xF8 is the general address that any single meter answers (what PZEM004Tv30 uses by default) |
| Registers | input 0x0000 V×10 · 0x0001–2 A×1000 · 0x0003–4 W×10 · 0x0005–6 Wh · 0x0007 Hz×10 · 0x0008 PF×100 · 0x0009 alarm. Function 0x42 resets the energy |
How to use it
Put it between the supply and a load: L/N across the mains, the load current through IN/OUT (or the clamp, on the 100 A version). With PZEM004Tv30: PZEM004Tv30 pzem(Serial2, 16, 17); pzem.voltage(), pzem.current(), pzem.power(), pzem.energy(); a NaN means no answer.
More in connectors & wiring
- Breadboard
- Perfboard
- Via
- Printed circuit board
- DC barrel jack
- USB-A receptacle
- Wall outlet
- Net meter
- Energy sub-meter
- Junction box (PH, PVC)
Sources: Peacefair PZEM-004T V3.0 user manual (register map, function 0x42, address 0xF8); mandulaj/PZEM-004T-v30 Arduino library. Only V3.0 speaks Modbus: older v1/v2 units use a different 7-byte protocol.