1. Giới thiệu về Modbus và PZEM004T
Modbus là giao thức truyền thông công nghiệp phổ biến, cho phép thiết bị như PLC, cảm biến và máy tính trao đổi dữ liệu với nhau. Nó hoạt động theo mô hình Master – Slave (Client – Server), trong đó thiết bị Master gửi yêu cầu và Slave phản hồi dữ liệu.
PZEM004T là module đo điện năng AC có thể đo:
- Điện áp (V)
- Dòng điện (A)
- Công suất (W)
- Điện năng (kWh)
- Tần số (Hz)
- Hệ số công suất
Module này sử dụng Modbus RTU qua UART/RS485 để truyền dữ liệu.
2. Tổng quan giao tiếp Modbus RTU của PZEM004T
Thông số giao tiếp chuẩn
- Baudrate: 9600
- Data bits: 8
- Stop bit: 1
- Parity: None
- Protocol: Modbus RTU
Function Code hỗ trợ
0x04: Read Input Register (đọc dữ liệu đo)0x03: Read Holding Register0x06: Write Single Register0x42: Reset năng lượng
3. Sơ đồ kết nối phần cứng
Thiết bị cần có:
- PZEM004T
- USB to RS485 (hoặc TTL tùy phiên bản)
- Máy tính cài Modbus Poll
Kết nối cơ bản:
- A → A (RS485)
- B → B (RS485)
- VCC, GND đúng nguồn
Lưu ý: PZEM004T V3.0 dùng TTL, cần module chuyển đổi nếu dùng RS485.
4. Cài đặt phần mềm Modbus Poll
Bước 1: Cài Modbus Poll
- Tải và cài đặt phần mềm Modbus Poll trên Windows
Bước 2: Kết nối COM

Vào:
Connection → Connect
Cấu hình:
- Port: COMx
- Baud: 9600
- Data bits: 8
- Parity: None
- Stop bit: 1
5. Cấu hình đọc dữ liệu PZEM004T
Bước 1: Chọn Slave ID
- Default: 1
Bước 2: Thiết lập đọc thanh ghi

Vào:
Setup → Read/Write Definition
Cấu hình:
- Function: 04 Read Input Registers
- Address: 0
- Quantity: 10

6. Bảng thanh ghi PZEM004T (quan trọng)
| Thanh ghi | Ý nghĩa | Công thức |
|---|---|---|
| 0x0000 | Voltage | value / 10 |
| 0x0001-2 | Current | value / 1000 |
| 0x0003-4 | Power | value / 10 |
| 0x0005-6 | Energy | value |
| 0x0007 | Frequency | value / 10 |
| 0x0008 | Power Factor | value / 100 |
📌 Lưu ý:
- Một số giá trị là 32-bit (2 thanh ghi)
- Cần ghép lại (High + Low)
7. Cách đổi Slave ID PZEM004T từ 1 sang 2 hoặc số bất kì

Gửi lệnh đổi ID
Vào:
Setup → Write Single Register
Cấu hình:
- Slave ID: 1 (Địa chỉ hiện tại của Slave)
- Function: 06 (Write Single Register)
- Address: 0x0002 ( Địa chỉ thanh ghi của Slave)
- Value: 2 ( Số Slave cần đổi sang, ví dụ đang là 2, có thể đổi sang 3 4)
Nhấn Send
8. Cách gửi lệnh Modbus thủ công (nâng cao)
Frame đọc dữ liệu:
[Slave ID] [0x04] [Addr Hi] [Addr Lo] [Qty Hi] [Qty Lo] [CRC]
Ví dụ:
01 04 00 00 00 0A CRC
Đây là lệnh đọc 10 thanh ghi từ địa chỉ 0.
9. Lỗi thường gặp khi dùng Modbus Poll
Không nhận dữ liệu
- Sai COM port
- Sai baudrate
- Đấu dây A/B ngược
Timeout / No response
- Sai Slave ID
- Chưa cấp nguồn PZEM
Dữ liệu sai
- Đọc nhầm function code (phải dùng 0x04)
- Chưa scale đúng (chia 10, 100…)
10. Ứng dụng thực tế
- Giám sát điện năng IoT
- Home Assistant
- SCADA mini
- Đo điện nhà xưởng
11. Kết luận
Việc giao tiếp Modbus Poll với PZEM004T khá đơn giản nếu nắm rõ:
- Chuẩn Modbus RTU
- Cấu hình COM đúng
- Mapping thanh ghi chính xác
