ESP8266 MQTT
Trong hướng dẫn này, chúng ta sẽ khám phá cách sử dụng ESP8266 để gửi và nhận dữ liệu với một broker MQTT sử dụng giao thức MQTT. Cụ thể, chúng ta sẽ đề cập đến những nội dung sau:
- Thiết lập kết nối giữa ESP8266 và một broker MQTT.
- Lập trình ESP8266 để truyền dữ liệu tới broker MQTT bằng cách xuất bản dữ liệu lên một chủ đề MQTT.
- Lập trình ESP8266 để nhận dữ liệu bằng cách đăng ký nhận một chủ đề MQTT.

Chúng ta sẽ đi sâu vào hai tình huống riêng biệt:
- Sử dụng ESP8266 với một broker MQTT trực tuyến.
- Sử dụng ESP8266 với một broker MQTT được cài đặt trên máy tính cá nhân của bạn.
Phần cứng cần chuẩn bị
| 1 | × | ESP8266 NodeMCU ESP-12E | ||
| 1 | × | Recommended: ESP8266 NodeMCU ESP-12E (Uno-form) | ||
| 1 | × | USB Cable Type-A to Type-C (for USB-A PC) | ||
| 1 | × | USB Cable Type-C to Type-C (for USB-C PC) | ||
| 1 | × | (Khuyến nghị) Screw Terminal Expansion Board for ESP8266 | ||
| 1 | × | (Khuyến nghị) Power Splitter for ESP8266 Type-C |
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Về ESP8266 và MQTT
Nếu bạn chưa quen với giao thức MQTT, bạn có thể tìm thông tin về nó trên mạng. Bài hướng dẫn này tập trung vào việc sử dụng ESP8266 để gửi và nhận dữ liệu thông qua MQTT.
Dưới đây là một số cách ESP8266 có thể được sử dụng với MQTT:
- Bạn có thể kết nối ESP8266 với một broker MQTT trực tuyến như Mosquitto hoặc AWS IoT.
- Ngoài ra, bạn có thể kết nối ESP8266 với một broker MQTT được cài đặt trên máy tính của bạn, như Mosquitto hoặc HiveMQ.
- Nếu bạn có Raspberry Pi, ESP8266 có thể kết nối với một broker MQTT đang chạy trên thiết bị đó, ví dụ Mosquitto.
- Ngoài ra, ESP8266 có thể kết nối với một broker MQTT dựa trên đám mây, chẳng hạn như Mosquitto hoặc HiveMQ trên AWS EC2.
Trong bài hướng dẫn này, chúng ta sẽ bắt đầu bằng cách kiểm tra xem ESP8266 có thể kết nối với một broker Mosquitto trực tuyến hay không. Chúng ta sẽ chứng minh khả năng của ESP8266 trong việc gửi và nhận dữ liệu thông qua broker này trên Internet.
Tiếp theo, chúng tôi sẽ hướng dẫn bạn cách thiết lập máy chủ Mosquitto trên máy tính của bạn. ESP8266 sau đó sẽ kết nối với máy chủ này, cho phép bạn tiếp tục gửi và nhận dữ liệu.
Sau khi bạn hoàn thành hướng dẫn này, bạn có thể đào sâu hơn bằng cách khám phá các bài hướng dẫn bổ sung này:
Những nguồn tài nguyên này sẽ cung cấp thêm cái nhìn sâu sắc về các chủ đề liên quan.
Kết nối ESP8266 với một máy chủ MQTT trực tuyến
Trong phần này, chúng ta sẽ học cách kết nối ESP8266 với test.mosquitto.org, một broker MQTT trực tuyến do Mosquitto thành lập. Lưu ý rằng broker này chỉ nên được sử dụng cho mục đích thử nghiệm.
Mã ESP8266
Đoạn mã ESP8266 dưới đây thực hiện những gì:
- Kết nối tới broker MQTT
- Đăng ký một chủ đề
- Định kỳ phát tin nhắn tới cùng một chủ đề mà nó đã đăng ký
Hướng dẫn từng bước
Để bắt đầu với ESP8266 trên Arduino IDE, hãy làm theo các bước sau:
- Xem hướng dẫn ESP8266 - Cài đặt phần mềm nếu đây là lần đầu bạn sử dụng ESP8266.
- Kết nối bo mạch ESP8266 với máy tính của bạn bằng cáp USB.
- Mở Arduino IDE trên máy tính của bạn.
- Chọn bo mạch ESP8266 phù hợp, chẳng hạn như (ví dụ NodeMCU 1.0 (ESP-12E Module)), và cổng COM tương ứng của nó.
- Mở Trình quản lý thư viện bằng cách nhấp vào biểu tượng ở thanh điều hướng bên trái của Arduino IDE.
- Nhập MQTT vào hộp tìm kiếm, sau đó tìm thư viện MQTT do Joel Gaehwiler phát hành.
- Nhấp nút Cài đặt để cài đặt thư viện MQTT.

- Gõ ArduinoJson vào ô tìm kiếm, sau đó tìm thư viện ArduinoJson của Benoit Blanchon.
- Nhấn nút Cài đặt để cài đặt thư viện ArduinoJson.

- Sao chép đoạn mã ở trên và mở bằng Arduino IDE.
- Thay thế thông tin WiFi (SSID và mật khẩu) trong mã bằng của bạn.
- Trong mã sẽ có từ 'YOUR-NAME' xuất hiện ba lần. Thay chữ này bằng tên của bạn hoặc ký tự ngẫu nhiên (chỉ chữ cái, không có khoảng trắng). Điều này là cần thiết vì nếu bạn không thực hiện thay đổi, có thể có nhiều người cùng chạy mã này một lúc, điều này có thể gây xung đột vì ID client MQTT và các chủ đề (topics) sẽ giống nhau cho mọi người.
- Nhấn nút Tải lên trên Arduino IDE để tải mã lên ESP8266.
- Mở Serial Monitor.
- Xem kết quả trên Serial Monitor.
Như bạn có thể thấy, ESP8266 gửi tin nhắn tới broker MQTT, rồi nhận lại đúng tin nhắn đó. Đó là vì mã ở trên đăng ký nhận (subscribe) cùng một chủ đề mà nó phát dữ liệu tới (publish). Nếu bạn không muốn ESP8266 nhận được tin nhắn mà nó phát, chỉ cần làm cho chủ đề SUBSCRIBE khác với chủ đề PUBLISH.
Kết nối ESP8266 với broker MQTT được cài đặt trên máy tính của bạn
Cài đặt máy chủ MQTT Mosquitto
- Tải xuống Mosquitto MQTT Broker
- Cài đặt nó trên ổ đĩa D: thay vì ổ đĩa C:. Tránh cài đặt broker Mosquitto trên ổ đĩa C: để ngăn ngừa các vấn đề tiềm ẩn.
Chạy máy chủ MQTT Mosquitto
Bây giờ, hãy kiểm tra xem broker MQTT có hoạt động đúng hay không bằng cách làm theo các bước sau:
- Đi đến thư mục nơi Mosquitto được cài đặt. Ví dụ: D:\mqtt\mosquitto>
- Tạo một tệp tin mới có tên test.conf, sao chép nội dung dưới đây và lưu nó vào thư mục đó:
- Chạy Command Prompt với quyền quản trị trên máy tính của bạn. Hãy gọi nó là Broker Window. Không đóng nó cho đến khi kết thúc bài hướng dẫn

- Chạy các lệnh dưới đây lần lượt:
- Bạn sẽ thấy:
- Mở một Command Prompt khác ở chế độ Quản trị viên trên máy tính của bạn.
- Tìm địa chỉ IP của máy tính của bạn bằng cách chạy lệnh dưới đây:
- Ghi lại địa chỉ IP để dùng sau. Trong ví dụ ở trên: 192.168.0.26
Kiểm tra xem Mosquitto Broker có hoạt động hay không
- Mở một Command Prompt khác trên máy tính của bạn với quyền quản trị. Gọi nó là Cửa sổ người đăng ký
- Đăng ký một chủ đề bằng cách chạy các lệnh dưới đây lần lượt (thay bằng địa chỉ IP của bạn):
- Mở một cửa sổ Command Prompt khác với quyền quản trị trên máy tính của bạn. Gọi nó là Cửa sổ Nhà phát hành
- Đăng một thông điệp lên cùng một chủ đề bằng cách lần lượt chạy các lệnh dưới đây (thay thế bằng địa chỉ IP của bạn):
- Bạn sẽ thấy:
Bạn sẽ thấy tin nhắn đó được chuyển tiếp đến Subscriber Window như sau:
Bây giờ, bạn đã cài đặt thành công broker MQTT Mosquitto trên máy tính của bạn. Vui lòng KHÔNG đóng ba cửa sổ: Cửa sổ Broker, Cửa sổ Người đăng ký, và Cửa sổ Người xuất bản. Chúng ta sẽ sử dụng chúng ở phần tiếp theo.
Mã ESP8266
Mã ESP8266 dưới đây thực hiện những gì:
- Kết nối với máy chủ MQTT
- Đăng ký nhận một chủ đề
- Định kỳ phát tin nhắn đến một chủ đề khác
Hướng dẫn từng bước
- Sao chép mã ở trên và mở bằng Arduino IDE
- Thay thế thông tin WiFi (SSID và mật khẩu) trong mã bằng của bạn.
- Thay thế địa chỉ broker MQTT trong mã (tên miền hoặc địa chỉ IP).
- Nhấp vào nút Tải lên trên Arduino IDE để tải mã lên ESP8266
Gửi tin nhắn từ ESP8266 đến PC qua MQTT
Mã ESP8266 phát dữ liệu tới chủ đề MQTT esp8266-001/send, Cửa sổ người nhận trên PC đăng ký nhận chủ đề đó để nhận dữ liệu.
- Mở Serial Monitor, bạn sẽ thấy ESP8266 định kỳ phát một tin nhắn lên một chủ đề.
- Kiểm tra Cửa sổ người đăng ký, bạn sẽ thấy nó nhận được tin nhắn do ESP8266 phát hành như dưới đây:
Gửi tin nhắn từ PC đến ESP8266 qua MQTT
ESP8266 đăng ký nhận chủ đề esp8266-001/receive, Cửa sổ Người phát hành trên PC, gửi một tin nhắn tới chủ đề đó để gửi nó tới ESP8266.
- Phát một thông điệp tới chủ đề mà ESP8266 đã đăng ký bằng cách chạy lệnh sau trên Cửa sổ Người phát hành:
- Bạn sẽ thấy thông điệp này được ESP8266 nhận trên Serial Monitor như dưới đây:
Video Tutorial
Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.