

The PZEM-017 is a power monitoring module designed for measuring key electrical parameters in AC circuits. It can measure voltage, current, power, energy, and frequency, providing real-time data for energy management and monitoring applications. The module communicates via UART, making it easy to integrate with microcontrollers and other systems. Its compact design and reliable performance make it ideal for use in smart homes, industrial automation, and energy monitoring systems.








The PZEM-017 module is designed to operate in AC circuits and provides accurate measurements of electrical parameters. Below are the key technical details:
| Parameter | Specification |
|---|---|
| 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 |
| Communication Interface | UART (9600 baud rate) |
| Power Supply | 5V DC |
| Accuracy | ±0.5% |
| Operating Temperature | -10°C to 60°C |
| Dimensions | 70mm x 40mm x 20mm |
The PZEM-017 module has a simple pinout for easy integration. Below is the pin configuration:
| Pin Name | Description |
|---|---|
| VCC | 5V DC power supply input |
| GND | Ground |
| TX | UART Transmit (connect to RX of microcontroller) |
| RX | UART Receive (connect to TX of microcontroller) |
| AC-IN | AC voltage input (connect to live and neutral wires) |
| CT-IN | Current transformer input (connect to external CT sensor) |
Below is an example Arduino sketch to interface the PZEM-017 with an Arduino UNO using UART communication:
#include <SoftwareSerial.h>
// Define RX and TX pins for SoftwareSerial
SoftwareSerial pzemSerial(10, 11); // RX = Pin 10, TX = Pin 11
// Command to read voltage (example command for PZEM-017)
byte readVoltageCmd[] = {0xB0, 0xC0, 0xA8, 0x01, 0x01, 0x00, 0x1A};
// Function to send command and read response
void sendCommand(byte* cmd, int cmdLength) {
pzemSerial.write(cmd, cmdLength); // Send command to PZEM
delay(100); // Wait for response
while (pzemSerial.available()) {
byte response = pzemSerial.read(); // Read response byte by byte
Serial.print(response, HEX); // Print response in HEX format
Serial.print(" ");
}
Serial.println();
}
void setup() {
Serial.begin(9600); // Initialize Serial Monitor
pzemSerial.begin(9600); // Initialize SoftwareSerial for PZEM
Serial.println("PZEM-017 Power Monitoring Module");
}
void loop() {
Serial.print("Reading Voltage: ");
sendCommand(readVoltageCmd, sizeof(readVoltageCmd)); // Send voltage read command
delay(2000); // Wait 2 seconds before next reading
}
readVoltageCmd with appropriate commands to read other parameters (e.g., current, power).No Data Received from the Module
Incorrect Voltage or Current Readings
Module Not Powering On
Can the PZEM-017 measure DC circuits?
What is the maximum current the module can measure?
Can I use the PZEM-017 with a Raspberry Pi?
How do I reset the energy counter?
By following this documentation, you can effectively integrate the PZEM-017 into your projects for accurate power monitoring and energy management.