The PZEM-016 is a multifunctional energy meter designed for monitoring and measuring key electrical parameters in AC circuits. Manufactured by PZEM, this device provides accurate readings of voltage, current, power, energy, and frequency. It is equipped with a digital display for real-time monitoring and supports UART communication for data logging and remote monitoring applications.
The following table outlines the key technical specifications of the PZEM-016:
Parameter | Specification |
---|---|
Voltage Range | 80V - 260V AC |
Current Range | 0A - 100A (requires 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 (via UART interface) |
Accuracy | ±0.5% |
Operating Temperature | -10°C to 60°C |
Dimensions | 96mm x 58mm x 24mm |
The PZEM-016 has a simple pinout for both power and communication. The table below describes the pin configuration:
Pin Name | Description |
---|---|
V+ | AC voltage input (live wire) |
V- | AC voltage input (neutral wire) |
I+ | Current transformer input (live wire) |
I- | Current transformer input (neutral wire) |
TX | UART transmit pin (connect to RX of microcontroller) |
RX | UART receive pin (connect to TX of microcontroller) |
GND | Ground (common ground for UART and power supply) |
5V | 5V DC power input for the module |
Below is an example Arduino sketch to read data from the PZEM-016 using UART communication:
#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 UART communication with PZEM-016
Serial.println("PZEM-016 Energy Meter Example");
}
void loop() {
// Request data from PZEM-016
byte request[] = {0x01, 0x04, 0x00, 0x00, 0x00, 0x0A, 0x70, 0x0D};
pzemSerial.write(request, sizeof(request));
delay(100); // Wait for response
// Read response from PZEM-016
if (pzemSerial.available()) {
Serial.print("Data received: ");
while (pzemSerial.available()) {
byte data = pzemSerial.read();
Serial.print(data, HEX);
Serial.print(" ");
}
Serial.println();
}
delay(1000); // Wait 1 second before next request
}
Note: The above code sends a Modbus RTU request to the PZEM-016 and prints the raw response. You will need to parse the response to extract voltage, current, power, etc., based on the Modbus protocol.
No Data Received via UART:
Inaccurate Readings:
Communication Errors:
Module Not Powering On:
Q: Can the PZEM-016 measure DC circuits?
A: No, the PZEM-016 is designed specifically for AC circuits and cannot measure DC parameters.
Q: Can I use the PZEM-016 with a Raspberry Pi?
A: Yes, but you will need a USB-to-UART adapter or GPIO UART pins and a logic level converter if the Raspberry Pi operates at 3.3V logic.
Q: How do I reset the energy counter?
A: The energy counter can be reset via a specific Modbus command. Refer to the manufacturer's Modbus protocol documentation for details.
Q: Is the PZEM-016 waterproof?
A: No, the PZEM-016 is not waterproof and should be used in a dry environment.