Giao tiếp Arduino với Arduino bằng MQTT
Trong hướng dẫn này, chúng ta sẽ học:
- Giao tiếp hai chiều giữa hai Arduino qua MQTT
- Ứng dụng ví dụ: Một nút/công tắc được kết nối với Arduino #1 điều khiển một LED được kết nối với Arduino #2 thông qua MQTT

Phần cứng cần chuẩn bị
| 2 | × | Arduino UNO R4 WiFi | ||
| 2 | × | USB Cable Type-C | ||
| 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 Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Về Arduino và MQTT
Chúng tôi có một hướng dẫn chi tiết về cách sử dụng Arduino với MQTT tại đây:
Giao tiếp giữa hai Arduino thông qua MQTT
Hai board Arduino có thể giao tiếp với nhau thông qua một máy chủ MQTT. Nếu bạn muốn hai Arduino giao tiếp trực tiếp mà không sử dụng máy chủ MQTT, vui lòng tham khảo hướng dẫn về Giao tiếp giữa hai Arduino.
Khi Arduino #1 và Arduino #2 trao đổi dữ liệu thông qua một broker MQTT:
- Cả hai Arduino đều kết nối với broker MQTT.
- Để Arduino #2 gửi dữ liệu đến Arduino #1:
- Arduino #1 đăng ký nhận một chủ đề, ví dụ: arduino-1/data.
- Arduino #2 có thể gửi dữ liệu đến Arduino #1 bằng cách phát dữ liệu lên chủ đề mà Arduino #1 đang đăng ký nhận.
- Tương tự, để Arduino #1 gửi dữ liệu đến Arduino #2:
- Arduino #2 đăng ký nhận một chủ đề, ví dụ: arduino-2/data.
- Arduino #1 có thể gửi dữ liệu đến Arduino #2 bằng cách phát dữ liệu lên chủ đề mà Arduino #2 đang đăng ký nhận.
Bằng cách làm theo phương pháp này, hai bộ mạch Arduino có thể trao đổi dữ liệu hai chiều.
Ví dụ về trường hợp sử dụng
Hãy hiện thực hóa ứng dụng sau: một nút hoặc công tắc được kết nối với Arduino #1 sẽ điều khiển một LED được kết nối với Arduino #2 thông qua MQTT.

Như đã đề cập ở trên, có một số giao thức ứng dụng mà chúng ta có thể sử dụng. Trong ví dụ này, để đơn giản, chúng ta sẽ tự định nghĩa một giao thức (một giao thức do chính chúng ta tự định nghĩa).
Giao thức tự định nghĩa
Hãy định nghĩa một giao thức đơn giản:
- Arduino #1 và Arduino #2 kết nối với MQTT Broker (máy chủ MQTT)
- Arduino #1:
- Arduino #1 phát một thông điệp MQTT đến một chủ đề khi trạng thái của công tắc bị thay đổi.
- Khi nút/công tắc được chuyển sang trạng thái bật, nội dung của thông điệp MQTT là 1.
- Khi nút/công tắc được chuyển sang trạng thái tắt, nội dung của thông điệp MQTT là 0.
- Arduino #2:
- Arduino #2 đăng ký nhận tin từ chủ đề
- Nếu Arduino #2 nhận được một thông điệp MQTT có nội dung là 1, nó sẽ bật đèn LED
- Nếu Arduino #2 nhận được một thông điệp MQTT có nội dung là 0, nó sẽ tắt đèn LED
- Arduino #1 - Sơ đồ nối giữa Arduino và nút nhấn
- Arduino số 2 - Sơ đồ nối dây giữa Arduino và LED
Sơ đồ nối dây

This image is created using Fritzing. Click to enlarge image

This image is created using Fritzing. Click to enlarge image
Giao tiếp giữa hai Arduino qua MQTT
Mã Arduino #1
Mã Arduino số 2
Hướng dẫn từng bước
- Nối một nút/nút công tắc vào Arduino #1
- Nối một đèn LED vào Arduino #2
- Mở Arduino IDE (được gọi là Arduino IDE #1)
- Mở một cửa sổ Arduino IDE khác (được gọi là Arduino IDE #2) bằng cách nhấp chuột vào biểu tượng Arduino IDE trên máy tính của bạn (quan trọng!())
- Mở Library Manager bằng cách nhấp vào biểu tượng Trình quản lý thư viện trên thanh điều hướng bên trái của Arduino IDE
- Gõ MQTT vào ô tìm kiếm, sau đó tìm thư viện MQTT của Joel Gaehwiler.
- Nhấp vào nút Cài đặt để cài đặt thư viện MQTT.

- Gõ ezButton vào ô tìm kiếm, sau đó tìm thư viện nút từ ArduinoGetStarted.
- Nhấp vào nút Install để cài đặt thư viện ezButton.

- Kết nối Arduino #1 với PC qua cáp USB và chọn cổng COM của Arduino #1 trên Arduino IDE #1
- Kết nối Arduino #2 với PC qua cáp USB và chọn cổng COM của Arduino #2 trên Arduino IDE #2
- Sao chép mã Arduino #1, dán vào Arduino IDE #1 và lưu nó (được đặt tên Arduino-1)
- Sao chép mã Arduino #2, dán vào Arduino IDE #2 và lưu nó (được đặt tên Arduino-2)
- Thay thế thông tin WiFi (SSID và mật khẩu) trong cả hai mã bằng thông tin của bạn.
- Thay thế địa chỉ broker MQTT trong cả hai mã (tên miền hoặc địa chỉ IP).
- Tải mã Arduino #1 lên Arduino #1
- Tải mã Arduino #2 lên Arduino #2
- Mở Serial Monitor trên Arduino IDE #1
- Mở Serial Monitor trên Arduino IDE #2
- Nhấn và giữ nút trên Arduino #1 → xem trạng thái đèn LED trên Arduino #2 (BẬT)
- Nhả nút trên Arduino #1 → xem trạng thái đèn LED trên Arduino #2 (TẮT)
- Nhấn, giữ và thả nút vài lần.
- Xem đầu ra trên cả hai Serial Monitor
- Serial Monitor của Arduino #1
- Trình theo dõi nối tiếp của Arduino #2