

The CT PZEM-004T 100A is a multifunctional energy meter designed for AC systems. It is capable of measuring key electrical parameters such as voltage, current, power, energy, and frequency. With a maximum current handling capacity of 100A, this device is ideal for monitoring and managing electrical consumption in residential, commercial, and industrial applications. Its compact design and real-time data output make it a popular choice for energy monitoring systems.








Below are the key technical details of the CT PZEM-004T 100A:
| Parameter | Specification |
|---|---|
| Voltage Range | 80V - 260V AC |
| Current Range | 0A - 100A (via external current transformer) |
| Power Range | 0W - 22kW |
| Energy Range | 0kWh - 9999kWh |
| Frequency Range | 45Hz - 65Hz |
| Communication | TTL (UART) |
| Baud Rate | 9600 bps |
| Accuracy | ±0.5% |
| Operating Temperature | -10°C to 60°C |
| Dimensions | 48mm x 29mm x 21mm |
The CT PZEM-004T 100A has a 4-pin interface for communication and power. Below is the pin configuration:
| Pin | Name | Description |
|---|---|---|
| 1 | VCC | Power supply input (5V DC) |
| 2 | GND | Ground |
| 3 | RX | UART Receive (connect to TX of microcontroller) |
| 4 | TX | UART Transmit (connect to RX of microcontroller) |
Below is an example Arduino sketch to read data from the CT PZEM-004T 100A using the SoftwareSerial library:
#include <SoftwareSerial.h>
// Define RX and TX pins for SoftwareSerial
SoftwareSerial pzemSerial(10, 11); // RX = Pin 10, TX = Pin 11
// PZEM-004T communication commands
byte readCommand[] = {0xB0, 0xC0, 0xA8, 0x01, 0x01, 0x00, 0x1A};
// Buffer to store response
byte response[7];
void setup() {
Serial.begin(9600); // Initialize Serial Monitor
pzemSerial.begin(9600); // Initialize PZEM-004T communication
Serial.println("PZEM-004T 100A Energy Meter");
}
void loop() {
// Send read command to PZEM-004T
pzemSerial.write(readCommand, sizeof(readCommand));
delay(100); // Wait for response
// Read response from PZEM-004T
if (pzemSerial.available() >= 7) {
for (int i = 0; i < 7; i++) {
response[i] = pzemSerial.read();
}
// Extract voltage, current, and power from response
float voltage = (response[2] << 8 | response[3]) / 10.0; // Voltage in volts
float current = (response[4] << 8 | response[5]) / 100.0; // Current in amps
float power = (response[6] << 8 | response[7]) / 10.0; // Power in watts
// Print values to Serial Monitor
Serial.print("Voltage: ");
Serial.print(voltage);
Serial.println(" V");
Serial.print("Current: ");
Serial.print(current);
Serial.println(" A");
Serial.print("Power: ");
Serial.print(power);
Serial.println(" W");
Serial.println("-----------------------");
}
delay(1000); // Wait 1 second before next reading
}
10 and 11 in SoftwareSerial pzemSerial(10, 11) with the desired pins for RX and TX on your Arduino.readCommand array accordingly.No Data Received:
Incorrect Readings:
Communication Errors:
Q: Can the PZEM-004T measure DC voltage or current?
A: No, the PZEM-004T is designed specifically for AC systems and cannot measure DC parameters.
Q: How do I reset the energy reading to zero?
A: The energy reading can be reset by sending a specific command via UART. Refer to the PZEM-004T datasheet for the reset command.
Q: Can I use multiple PZEM-004T modules with one microcontroller?
A: Yes, you can use multiple modules by assigning unique addresses to each module and communicating with them sequentially.
Q: Is the PZEM-004T compatible with ESP8266 or ESP32?
A: Yes, the PZEM-004T can be used with ESP8266 or ESP32, but you may need to use hardware or software UART depending on your setup.