Giao Thức MQTT
Cách thiết bị ESP32 giao tiếp với Assistant Core qua MQTT Gateway.
Tổng Quan
Thiết bị ESP32 dùng MQTT Gateway để giữ kết nối thời gian thực với Assistant Core. Gateway đứng giữa thiết bị và nền tảng, giúp thiết bị gửi trạng thái, mở phiên giọng nói, truyền âm thanh và nhận lệnh điều khiển từ trợ lý.
Ở mức khái niệm, kết nối gồm ba phần:
- MQTT: kênh điều khiển cho trạng thái, sự kiện và lệnh.
- UDP audio: kênh truyền âm thanh độ trễ thấp cho phiên giọng nói.
- Kết nối nội bộ tới Assistant Core: gateway chuyển tiếp phiên thiết bị vào hệ thống xử lý hội thoại.
Kiến Trúc Kết Nối

Thiết bị không nói chuyện trực tiếp với toàn bộ hệ thống phía sau. Nó chỉ cần kết nối tới MQTT Gateway; gateway chịu trách nhiệm chuyển tiếp trạng thái, âm thanh và lệnh tới đúng phiên trợ lý.
Luồng Hoạt Động
1. Thiết bị lấy cấu hình kết nối
Khi khởi động, thiết bị kiểm tra OTA để nhận thời gian hệ thống, thông tin firmware, mã kích hoạt nếu chưa liên kết và địa chỉ kết nối tới gateway.
2. Thiết bị mở kênh MQTT
Thiết bị dùng MQTT để báo online, gửi sự kiện và nhận lệnh. Đây là kênh điều khiển chính, không dùng để truyền audio liên tục.
3. Thiết bị bắt đầu phiên giọng nói
Khi người dùng đánh thức thiết bị hoặc nhấn nút nói, thiết bị gửi tín hiệu bắt đầu phiên. Gateway tạo phiên tương ứng trong Assistant Core.
4. Âm thanh đi qua kênh UDP
Trong phiên giọng nói, audio từ micro được gửi qua UDP để giảm độ trễ. Phản hồi TTS từ trợ lý cũng được gửi ngược về thiết bị qua kênh audio.
5. Lệnh điều khiển đi qua MQTT
Các lệnh như đổi trạng thái, cập nhật giao diện, gọi công cụ thiết bị hoặc kết thúc phiên được gửi qua MQTT để thiết bị xử lý.
MQTT Dùng Cho Việc Gì?
| Nhóm dữ liệu | Ví dụ |
|---|---|
| Trạng thái thiết bị | Online/offline, sẵn sàng nói chuyện, đang trong phiên |
| Sự kiện thiết bị | Wake word, nhấn nút, bắt đầu/kết thúc phiên |
| Lệnh từ trợ lý | Hiển thị text, đổi trạng thái, gọi công cụ thiết bị |
| Quản lý phiên | Mở phiên giọng nói, đóng phiên, báo lỗi |
UDP Audio Dùng Cho Việc Gì?
MQTT phù hợp cho tin nhắn điều khiển nhỏ, nhưng không phù hợp để truyền audio liên tục với độ trễ thấp. Vì vậy âm thanh được tách sang kênh UDP:
- Micro của thiết bị gửi audio lên gateway.
- Assistant Core xử lý hội thoại và tạo phản hồi.
- Audio phản hồi được gửi lại thiết bị để phát qua loa.
Thiết kế này giúp phiên giọng nói phản hồi nhanh hơn và tránh làm nghẽn kênh điều khiển MQTT.
Trạng Thái Kết Nối Thường Gặp
| Trạng thái | Ý nghĩa |
|---|---|
| Chưa liên kết | Thiết bị đã lấy được cấu hình nhưng chưa gắn với trợ lý. |
| Online | Thiết bị đã kết nối MQTT Gateway và sẵn sàng nhận lệnh. |
| Đang trong phiên | Thiết bị đang truyền audio và nhận phản hồi từ trợ lý. |
| Offline | Thiết bị mất nguồn, mất mạng hoặc không kết nối được gateway. |
Khi Cần Troubleshoot
- Nếu thiết bị không online, kiểm tra Wi-Fi, nguồn và firmware.
- Nếu thiết bị có mã kích hoạt nhưng chưa dùng được, kiểm tra đã liên kết đúng trợ lý chưa.
- Nếu thiết bị online nhưng không nói chuyện được, kiểm tra giọng nói đã bật cho trợ lý và thiết bị có nhận được cấu hình OTA mới nhất.
- Nếu âm thanh bị trễ hoặc ngắt quãng, kiểm tra chất lượng mạng và firewall có chặn kết nối audio không.
- Nếu lệnh thiết bị không chạy, kiểm tra firmware có hỗ trợ công cụ tương ứng không.
Trang này mô tả kiến trúc giao thức ở mức vận hành. Các chi tiết như chữ ký xác thực, payload JSON đầy đủ hoặc cấu hình Docker là phần dành cho tài liệu triển khai nội bộ.