Phần 4: Lập trình ESP32 đo năng lượng và gửi dữ liệu MQTT
Cài thư viện, cấu hình Wi-Fi, MQTT topic, đọc INA219, đọc pin qua ADC, gửi telemetry và nhận lệnh điều khiển tải DC.
Phần 4: Lập trình ESP32 để đo và gửi dữ liệu MQTT
Firmware của ESP32 có bốn nhiệm vụ chính: kết nối Wi-Fi, đọc INA219, đọc điện áp pin qua ADC và gửi dữ liệu lên MQTT. Ngoài ra ESP32 cũng nhận lệnh điều khiển tải từ MQTT.
Thư viện cần cài
| Thư viện | Mục đích |
|---|---|
| WiFi | Kết nối ESP32 vào mạng Wi-Fi ở chế độ STA. |
| PubSubClient | Kết nối MQTT broker, publish telemetry và subscribe lệnh điều khiển. |
| Wire | Giao tiếp I2C. |
| Adafruit INA219 | Đọc điện áp, dòng điện và công suất từ INA219. |
Topic MQTT
| Topic | Chiều dữ liệu | Ý nghĩa |
|---|---|---|
| iotlabs/solar01/telemetry | ESP32 gửi lên | Dữ liệu điện áp, dòng, công suất, điện áp pin, trạng thái tải. |
| iotlabs/solar01/status | ESP32 gửi lên | Trạng thái ONLINE hoặc OFFLINE. |
| iotlabs/solar01/cmd/load | Dashboard gửi xuống | Lệnh ON, OFF hoặc AUTO. |
| iotlabs/solar01/alert | ESP32 gửi lên | Cảnh báo pin yếu hoặc không cho bật tải. |
Payload telemetry mẫu
{
"pv_voltage": 12.60,
"pv_current_ma": 320.0,
"pv_power_mw": 4032.0,
"battery_voltage": 12.10,
"load": true,
"mode": "AUTO"
}Logic bảo vệ pin
Khi ở chế độ AUTO, ESP32 sẽ tắt tải nếu điện áp pin thấp hơn ngưỡng LOAD_OFF_VOLTAGE. Tải chỉ được bật lại khi điện áp pin cao hơn LOAD_ON_VOLTAGE. Cách dùng hai ngưỡng khác nhau gọi là hysteresis, giúp tránh relay bật tắt liên tục khi điện áp dao động.
| Tham số | Vai trò |
|---|---|
| LOAD_OFF_VOLTAGE | Ngưỡng tắt tải khi pin yếu. |
| LOAD_ON_VOLTAGE | Ngưỡng cho phép bật lại tải khi pin phục hồi. |
| BATTERY_CALIBRATION | Hệ số hiệu chỉnh điện áp pin sau khi so sánh với đồng hồ đo. |
⚠️ Ngưỡng pin trong code chỉ là ví dụ cho mô hình 12V. Với pin lithium, LiFePO4 hoặc ắc quy chì, cần đặt ngưỡng theo datasheet pin, BMS và bộ sạc đang dùng.
Code firmware
Code mẫu nằm trong phần Code mẫu của project. Trước khi nạp, cần thay Wi-Fi, MQTT host, username, password và kiểm tra mức active của relay.
✅ Sau khi nạp code, mở Serial Monitor ở 115200 baud để kiểm tra ESP32 kết nối Wi-Fi, MQTT và đọc dữ liệu cảm biến.
