

The CT PZEM004T is a multifunctional energy meter designed to measure key electrical parameters such as voltage, current, power, energy, frequency, and power factor. It is commonly used in conjunction with a current transformer (CT) to monitor AC electrical systems. This component is ideal for applications requiring real-time energy monitoring, such as home automation, industrial energy management, and renewable energy systems.








The CT PZEM004T is a compact and efficient energy meter with the following key specifications:
| Parameter | Specification |
|---|---|
| Voltage Range | 80V - 260V AC |
| Current Range | 0A - 100A (with external CT) |
| Power Range | 0W - 22kW |
| Energy Range | 0kWh - 9999kWh |
| Frequency Range | 45Hz - 65Hz |
| Power Factor Range | 0.00 - 1.00 |
| Communication Protocol | Modbus RTU (RS485) |
| Baud Rate | 9600 bps |
| Operating Temperature | -10°C to 60°C |
| Dimensions | 71mm x 43mm x 25mm |
| Power Consumption | < 1W |
The CT PZEM004T module has a simple pinout for easy integration into circuits:
| Pin | Name | Description |
|---|---|---|
| 1 | VCC | Power supply input (5V DC) |
| 2 | GND | Ground connection |
| 3 | TX | UART Transmit pin for data communication |
| 4 | RX | UART Receive pin for data communication |
| 5 | RS485-A | RS485 communication line A |
| 6 | RS485-B | RS485 communication line B |
Below is an example Arduino sketch to read data from the CT PZEM004T using UART communication:
#include <SoftwareSerial.h>
// Define RX and TX pins for SoftwareSerial
SoftwareSerial pzemSerial(10, 11); // RX = Pin 10, TX = Pin 11
// Include PZEM004T library (install via Arduino Library Manager)
#include <PZEM004Tv30.h>
// Initialize PZEM004T object
PZEM004Tv30 pzem(&pzemSerial);
void setup() {
Serial.begin(9600); // Initialize Serial Monitor
pzemSerial.begin(9600); // Initialize PZEM communication
Serial.println("PZEM004T Energy Meter Example");
}
void loop() {
// Read voltage
float voltage = pzem.voltage();
if (!isnan(voltage)) {
Serial.print("Voltage: ");
Serial.print(voltage);
Serial.println(" V");
} else {
Serial.println("Error reading voltage!");
}
// Read current
float current = pzem.current();
if (!isnan(current)) {
Serial.print("Current: ");
Serial.print(current);
Serial.println(" A");
} else {
Serial.println("Error reading current!");
}
// Read power
float power = pzem.power();
if (!isnan(power)) {
Serial.print("Power: ");
Serial.print(power);
Serial.println(" W");
} else {
Serial.println("Error reading power!");
}
// Read energy
float energy = pzem.energy();
if (!isnan(energy)) {
Serial.print("Energy: ");
Serial.print(energy);
Serial.println(" kWh");
} else {
Serial.println("Error reading energy!");
}
// Wait 1 second before next reading
delay(1000);
}
No Data Output:
Incorrect Readings:
Communication Errors:
Q: Can the CT PZEM004T measure DC systems?
A: No, the CT PZEM004T is designed for AC systems only.
Q: What is the maximum current it can measure?
A: The module can measure up to 100A when used with the appropriate current transformer.
Q: Can I use multiple PZEM004T modules in the same system?
A: Yes, but each module must have a unique Modbus address to avoid communication conflicts.
Q: How do I reset the energy counter?
A: The energy counter can be reset via a Modbus command. Refer to the module's datasheet for details.
Q: Is the module compatible with 3-phase systems?
A: The CT PZEM004T is designed for single-phase systems. For 3-phase systems, multiple modules can be used, one for each phase.