

The CT PZEM004T is a multifunctional energy meter designed to measure key electrical parameters such as voltage, current, power, energy, and frequency. 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 versatile module 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 |
| Communication Protocol | UART (TTL level) |
| Baud Rate | 9600 bps |
| Power Supply | 5V DC (external power required) |
| Accuracy | ±0.5% |
| Dimensions | 48mm x 29mm x 22mm |
The CT PZEM004T module has a simple pinout for easy integration into circuits:
| Pin | Name | Description |
|---|---|---|
| 1 | VCC | 5V DC power supply input |
| 2 | GND | Ground connection |
| 3 | RX | UART Receive pin (connect to TX of microcontroller) |
| 4 | TX | UART Transmit pin (connect to RX of microcontroller) |
| 5 | AC Input (L) | Live wire connection for AC voltage measurement |
| 6 | AC Input (N) | Neutral wire connection for AC voltage measurement |
| 7 | CT Input (S1) | Current transformer input (primary side of CT) |
| 8 | CT Input (S2) | Current transformer input (secondary side of CT, typically connected to ground) |
Below is an example of how to interface the CT PZEM004T with an Arduino UNO using a library:
#include <PZEM004Tv30.h> // Include the PZEM004T library
// Define RX and TX pins for communication with the PZEM004T
#define RX_PIN 10
#define TX_PIN 11
// Create a PZEM004T object
PZEM004Tv30 pzem(&Serial1); // Use hardware serial (or SoftwareSerial if needed)
void setup() {
Serial.begin(9600); // Initialize serial monitor
Serial1.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN); // Initialize UART for PZEM004T
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!");
}
// Read frequency
float frequency = pzem.frequency();
if (!isnan(frequency)) {
Serial.print("Frequency: ");
Serial.print(frequency);
Serial.println(" Hz");
} else {
Serial.println("Error reading frequency!");
}
delay(1000); // Wait 1 second before the next reading
}
No Data Output:
Incorrect Readings:
Module Not Responding:
Error Messages in Code:
Q: Can the PZEM004T measure DC voltage or current?
A: No, the PZEM004T is designed specifically for AC systems and cannot measure DC parameters.
Q: What is the maximum current the module can measure?
A: The module can measure up to 100A when used with a compatible 100A current transformer.
Q: Can I use multiple PZEM004T modules with one microcontroller?
A: Yes, you can use multiple modules by assigning unique addresses to each module and using a multiplexer or separate UART channels.
Q: Is the module safe for high-voltage applications?
A: The module is designed for 80V-260V AC systems. Ensure proper insulation and safety precautions when working with high voltages.