Hướng dẫn chi tiết
Bài 6: Xử lý lỗi thường gặp
Tổng hợp các lỗi phổ biến khi upload code, kết nối WiFi/MQTT, scan BLE, và giao tiếp nRF24L01 — kèm cách khắc phục từng bước.
Cập nhật 10/05/2026
Lỗi khi Upload Code
| Lỗi | Nguyên nhân | Cách sửa |
|---|---|---|
Failed to connect to ESP32 |
ESP32 không vào chế độ download | Nhấn giữ nút BOOT trên ESP32 trong khi nhấn Upload |
Sketch too big (Mode BLE) |
Partition scheme quá nhỏ cho BLE library | Tools → Partition Scheme → Huge APP (3MB No OTA) |
undefined reference to ... |
Library chưa cài hoặc sai phiên bản | Cài đủ: PubSubClient, ArduinoJson v7, RF24 |
| Không thấy Port trong menu | Chưa cài driver USB-Serial | Cài driver CP2102 (silabs.com) hoặc CH340 (wch-ic.com) |
Lỗi WiFi
| Triệu chứng | Cách kiểm tra |
|---|---|
| Connection failed liên tục | ① SSID/Password đúng chưa (phân biệt hoa/thường) ② WiFi có phải 2.4GHz không (ESP32 không kết nối 5GHz) ③ Thử hotspot điện thoại |
| Kết nối nhưng bị ngắt thường xuyên | Thêm WiFi.setSleep(false) sau WiFi.mode(WIFI_STA) trong wifi_manager.cpp |
Lỗi MQTT
| State code | Ý nghĩa | Cách sửa |
|---|---|---|
-4 | Timeout, broker không phản hồi | Kiểm tra MQTT_HOST và kết nối mạng |
-2 | Lỗi mạng | Đảm bảo WiFi đã kết nối trước |
4 | Sai username/password | Kiểm tra MQTT_USERNAME, MQTT_PASSWORD |
| Publish failed | Payload quá lớn | Tăng buffer trong mqtt_manager.cpp: mqttClient.setBufferSize(1024) |
Lỗi BLE
- No IoTLabs nodes found: Kiểm tra node đang chạy và thấy log
[BLE] Advertising: IOTL:TH:...| Đặt 2 ESP32 cách nhau <2m - Invalid payload format: Tên BLE phải đúng format
IOTL:TH:n01:285:68:92— đủ 6 phần cách bằng dấu: - Sketch too big khi upload gateway BLE: Đổi Partition → Huge APP
Lỗi nRF24L01
- Init FAILED: Checklist theo thứ tự: ① Nguồn 3.3V chưa? ② Tụ 100uF đã gắn chưa? ③ CE=GPIO4, CSN=GPIO5 đúng chưa? ④ SCK/MOSI/MISO đúng chưa? ⑤ Thử module khác
- Không nhận được data: Gateway và node phải dùng cùng
address="GW001",channel=76,RF24_250KBPSvà structNrfSensorPayloadgiống nhau - Data không ổn định: Tăng tụ lên 470uF, rút ngắn dây SPI (<10cm), thêm
radio.setRetries(5, 15)
Debug chung
- Mở Serial Monitor (115200) — tất cả log có tag:
[WIFI][MQTT][GPIO][BLE][NRF] - Kiểm tra
free_heaptrong MQTT status payload — nếu <50KB thì gateway có thể thiếu RAM - Nhấn nút RESET/EN trên ESP32 nếu gateway bị treo
- Dùng MQTTX subscribe topic gateway để xác nhận broker nhận được data
