Arduino MQTT
Trong bài hướng dẫn này, chúng ta sẽ học cách sử dụng Arduino để gửi và nhận dữ liệu tới broker MQTT bằng giao thức MQTT. Cụ thể, chúng ta sẽ học:
- Cách kết nối Arduino với máy chủ MQTT
- Cách lập trình Arduino để gửi dữ liệu tới máy chủ MQTT bằng cách phát dữ liệu lên một chủ đề MQTT
- Cách lập trình Arduino để nhận dữ liệu bằng cách đăng ký nhận dữ liệu từ một chủ đề MQTT

Chúng ta sẽ khám phá hai trường hợp sử dụng khác nhau:
- Sử dụng Arduino với một broker MQTT trực tuyến.
- Sử dụng Arduino với broker MQTT được cài đặt trên máy tính của bạn.
Phần cứng cần chuẩn bị
| 1 | × | Arduino UNO R4 WiFi | ||
| 1 | × | Alternatively, DIYables STEM V4 IoT | ||
| 1 | × | (Tùy chọn) DIYables STEM V4 IoT | ||
| 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 Block Shield for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Breadboard Shield for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Enclosure for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Power Splitter for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO |
Or you can buy the following kits:
| 1 | × | DIYables STEM V4 IoT Starter Kit (Arduino included) | ||
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Về Arduino và MQTT
Giả sử bạn đã làm quen với giao thức MQTT. Nếu chưa, vui lòng tra cứu trên Internet. Hướng dẫn này tập trung vào lập trình Arduino để gửi và nhận dữ liệu bằng giao thức MQTT.
Dưới đây là các trường hợp sử dụng của Arduino với MQTT:
- Arduino kết nối với broker MQTT trực tuyến, ví dụ: broker Mosquitto trực tuyến, AWS IoT...
- Arduino kết nối với broker MQTT được cài đặt trên máy tính của bạn, ví dụ: broker Mosquitto, broker HiveMQ
- Arduino kết nối với broker MQTT được cài đặt trên Raspberry Pi của bạn, ví dụ: broker Mosquitto
- Arduino kết nối với broker MQTT được cài đặt trên đám mây: ví dụ: broker 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 nhanh chóng kiểm tra xem Arduino có thể kết nối với một broker Mosquitto trực tuyến hay không. Arduino sẽ phát và đăng ký nhận với broker này qua Internet.
Tiếp theo, chúng ta sẽ tiến hành cài đặt máy chủ Mosquitto trên máy tính của mình. Sau đó, chúng ta sẽ kết nối Arduino với broker MQTT được cài đặt trên máy tính, tiếp tục phát và nhận dữ liệu thông qua broker cục bộ này.
Sau khi bạn hoàn thành bài hướng dẫn này, bạn có thể khám phá thêm bằng cách học về Arduino với MQTT trong các bài hướng dẫn sau:
Kết nối Arduino 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 Arduino với test.mosquitto.org, một broker MQTT trực tuyến do Mosquitto tạo ra. Lưu ý rằng broker này chỉ dành cho mục đích thử nghiệm.
Mã Arduino
Mã Arduino dưới đây thực hiện điều gì:
- Kết nối tới máy chủ 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
- Nếu đây là lần đầu bạn sử dụng Arduino Uno R4, hãy xem Cách bắt đầu với Arduino UNO R4.
- Mở Arduino IDE trên máy tính của bạn
- Mở Quản lý Thư viện bằng cách nhấp vào biểu tượng Quản lý Thư viện ở 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.
- Nhấp vào nút Cài đặt để cài đặt thư viện MQTT.

- Nhập 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 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ã, bạn sẽ thấy từ 'YOUR-NAME' xuất hiện ba lần. Thay thế từ này bằng tên của bạn hoặc ký tự ngẫu nhiên (chỉ ký tự 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 chạy mã này cùng lúc, dẫn đến xung đột do các ID của client MQTT và các chủ đề (topics) 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 Arduino
- Mở Serial Monitor
- Xem kết quả trên Serial Monitor.
Như bạn có thể thấy, Arduino gửi các thông điệp tới máy chủ MQTT (broker), sau đó nhận lại cùng một thông điệp. Đó là vì đoạn mã ở trên đăng ký nhận trên cùng một chủ đề mà nó xuất bản dữ liệu tới. Nếu bạn không muốn Arduino nhận được thông điệp mà nó phát, chỉ cần để cho chủ đề nhận (SUBSCRIBE) khác với chủ đề phát (PUBLISH).
Kết nối Arduino với broker MQTT được cài đặt trên PC 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 sự cố có thể xảy ra.
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 đã cài đặt Mosquitto. Ví dụ: D:\Draft\mosquitto>
- Tạo một tệp 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 lần lượt các lệnh dưới đây:
- Bạn sẽ thấy:
- Mở một cửa sổ Dòng lệnh 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 không
- Mở một cửa sổ Dòng lệnh khác với quyền quản trị trên máy tính của bạn. Hãy 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 thế bằng địa chỉ IP của bạn):
- Mở Command Prompt khác với quyền quản trị viên trên máy tính của bạn. Gọi nó là Cửa sổ Người phát hành
- Đăng một thông điệp lên cùng một chủ đề bằng cách chạy lần lượt các lệnh dưới đây (thay bằng địa chỉ IP của bạn):
- Bạn sẽ thấy:
Bạn sẽ thấy thông điệp được chuyển tiếp tới Cửa sổ người đăng ký như sau:
Bây giờ, bạn đã cài đặt thành công máy chủ MQTT Mosquitto trên máy tính của mình. Vui lòng KHÔNG đóng ba cửa sổ sau: Cửa sổ Broker, Cửa sổ Người đăng ký, và Cửa sổ Người phát. Chúng ta sẽ dùng chúng ở phần sau.
Mã Arduino
Đoạn mã Arduino dưới đây thực hiện:
- Kết nối tới broker MQTT
- Đăng ký nhận tin nhắn từ 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 Arduino
Gửi tin nhắn từ Arduino tới PC qua MQTT
Mã Arduino phát dữ liệu lên chủ đề MQTT arduino-001/send, Cửa sổ người đăng ký trên PC đăng ký chủ đề đó để nhận dữ liệu.
- Mở Serial Monitor, bạn sẽ thấy Arduino đị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 thông điệp được Arduino phát hành như dưới đây:
Gửi tin nhắn từ PC đến Arduino thông qua MQTT
Arduino đăng ký nhận chủ đề arduino-001/receive, Cửa sổ Người xuất bản trên PC sẽ phát một thông điệp tới chủ đề đó để gửi nó đến Arduino.
- Đăng một tin nhắn lên chủ đề mà Arduino đã đăng ký bằng cách chạy lệnh sau trên Publisher Window:
- Bạn sẽ thấy tin nhắn này được Arduino nhận trên Serial Monitor như sau:
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.