

The PZEM-004T is a multifunctional energy meter designed for monitoring and measuring key electrical parameters in AC circuits. It provides real-time data on voltage, current, power, energy consumption, frequency, and power factor. This module communicates via UART (Universal Asynchronous Receiver-Transmitter), making it easy to interface with microcontrollers such as the Arduino UNO (manufacturer part ID: UNO).








The PZEM-004T is a compact and efficient energy meter with the following key specifications:
| Parameter | Value |
|---|---|
| Voltage Range | 80V - 260V AC |
| Current Range | 0A - 100A (with external current transformer) |
| Power Range | 0W - 22kW |
| Energy Range | 0kWh - 9999kWh |
| Frequency Range | 45Hz - 65Hz |
| Power Factor Range | 0.00 - 1.00 |
| Communication Protocol | UART (9600 baud rate, 8N1 format) |
| Operating Temperature | -10°C to 60°C |
| Power Supply | Self-powered (from the measured AC line) |
The PZEM-004T module has a simple pinout for easy integration:
| Pin Name | Description |
|---|---|
| V+ | AC voltage input (connect to live wire) |
| V- | AC voltage input (connect to neutral wire) |
| TX | UART transmit pin (connect to RX of microcontroller) |
| RX | UART receive pin (connect to TX of microcontroller) |
| GND | Ground (common ground with microcontroller) |
Connect the Voltage Input:
V+ pin to the live wire of the AC circuit.V- pin to the neutral wire of the AC circuit.Connect the Current Transformer (CT):
Connect to a Microcontroller:
TX pin of the PZEM-004T to the RX pin of the Arduino UNO.RX pin of the PZEM-004T to the TX pin of the Arduino UNO.GND pin of the PZEM-004T to the GND of the Arduino UNO.Power the Module:
Below is an example Arduino sketch to read data from the PZEM-004T:
#include <SoftwareSerial.h>
// Define RX and TX pins for SoftwareSerial
SoftwareSerial pzemSerial(10, 11); // RX = pin 10, TX = pin 11
void setup() {
Serial.begin(9600); // Initialize Serial Monitor
pzemSerial.begin(9600); // Initialize PZEM-004T communication
Serial.println("PZEM-004T Energy Meter Example");
}
void loop() {
// Request data from PZEM-004T
byte request[] = {0x01, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x70, 0x0D};
pzemSerial.write(request, sizeof(request));
delay(100); // Wait for response
// Read response from PZEM-004T
byte response[25];
int len = pzemSerial.readBytes(response, 25);
if (len > 0) {
Serial.print("Response: ");
for (int i = 0; i < len; i++) {
Serial.print(response[i], HEX);
Serial.print(" ");
}
Serial.println();
} else {
Serial.println("No response from PZEM-004T");
}
delay(1000); // Wait 1 second before next request
}
SoftwareSerial library is used to communicate with the PZEM-004T on pins 10 and 11 of the Arduino UNO.No Response from the PZEM-004T:
Incorrect Readings:
V+ and V-) are secure.Communication Errors:
Q: Can the PZEM-004T measure DC circuits?
A: No, the PZEM-004T is designed specifically for AC circuits and cannot measure DC voltage or current.
Q: What is the maximum current the PZEM-004T can measure?
A: The PZEM-004T can measure up to 100A using the included current transformer.
Q: Can I use multiple PZEM-004T modules with one Arduino?
A: Yes, you can use multiple modules by assigning unique Modbus addresses to each PZEM-004T and connecting them to the same UART bus.
Q: Is the PZEM-004T safe to use with high-voltage circuits?
A: Yes, but always follow proper safety precautions and ensure all connections are insulated to prevent electric shock.
This concludes the documentation for the PZEM-004T energy meter. For further assistance, refer to the manufacturer's datasheet or support resources.