Giao Tiếp MQTT Giữa ESP32-to-ESP32
Trong hướng dẫn này, chúng ta sẽ đề cập đến các chủ đề sau:
- Giao tiếp hai chiều giữa hai ESP32 sử dụng MQTT.
- Ví dụ ứng dụng thực tế: Sử dụng một nút nhấn hoặc công tắc kết nối với ESP32 #1 để điều khiển một LED kết nối với ESP32 #2 thông qua MQTT.

Linh Kiện Cần Thiết
| 2 | × | mô-đun phát triển ESP-WROOM-32 | ||
| 2 | × | Cáp USB Type-C | ||
| 1 | × | (Khuyến nghị) Screw Terminal Expansion Board for ESP32 | ||
| 1 | × | (Khuyến nghị) Breakout Expansion Board for ESP32 | ||
| 1 | × | (Khuyến nghị) Power Splitter for ESP32 |
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | ||
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Về ESP32 và MQTT
Chúng tôi có một hướng dẫn chi tiết về cách sử dụng ESP32 với MQTT tại đây:
Giao Tiếp Giữa Hai ESP32 Qua MQTT
Hai bo mạch ESP32 có thể giao tiếp với nhau thông qua một MQTT server. Nếu bạn muốn chúng giao tiếp trực tiếp mà không sử dụng MQTT server, hãy tham khảo hướng dẫn về giao tiếp ESP32 to ESP32 TCP Client/Server.
Khi ESP32 #1 và ESP32 #2 trao đổi dữ liệu qua một MQTT broker:
- Cả hai ESP32 kết nối đến MQTT broker.
- Để cho phép ESP32 #2 gửi dữ liệu đến ESP32 #1:
- ESP32 #1 đăng ký (subscribe) một chủ đề (topic), ví dụ: esp32-1/data.
- ESP32 #2 có thể gửi dữ liệu đến ESP32 #1 bằng cách xuất bản (publish) dữ liệu lên topic mà ESP32 #1 đã đăng ký.
- Tương tự, để ESP32 #1 gửi dữ liệu đến ESP32 #2:
- ESP32 #2 đăng ký một topic, chẳng hạn: esp32-2/data.
- ESP32 #1 có thể gửi dữ liệu đến ESP32 #2 bằng cách xuất bản dữ liệu lên topic mà ESP32 #2 đã đăng ký.
Theo cách này, hai ESP32 có thể trao đổi dữ liệu hai chiều.
Ví Dụ Ứng Dụng
Hãy thực hiện ứng dụng sau: Một nút nhấn/công tắc kết nối với ESP32 #1 điều khiển một LED kết nối với ESP32 #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 hóa, chúng ta sẽ tự định nghĩa một giao thức (giao thức tự định nghĩa).
Cách Hoạt Động
Hãy định nghĩa một giao thức đơn giản:
- Cả ESP32 #1 và ESP32 #2 đều kết nối đến một MQTT Broker (MQTT server).
- Đối với ESP32 #1:
- Nó xuất bản một tin nhắn MQTT đến một topic cụ thể bất cứ khi nào trạng thái của công tắc thay đổi.
- Khi nút nhấn/công tắc được bật, payload của tin nhắn MQTT được đặt thành 1.
- Khi nút nhấn/công tắc được tắt, payload của tin nhắn MQTT được đặt thành 0.
- Đối với ESP32 #2:
- Nó đăng ký cùng một topic.
- Nếu ESP32 #2 nhận được tin nhắn MQTT với payload là 1, nó sẽ bật LED.
- Nếu ESP32 #2 nhận được tin nhắn MQTT với payload là 0, nó sẽ tắt LED.
- ESP32 #1 - Sơ đồ kết nối giữa ESP32 và nút nhấn
- ESP32 #2 - Sơ đồ kết nối giữa ESP32 và LED
Sơ Đồ Kết Nối

This image is created using Fritzing. Click to enlarge image
Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

This image is created using Fritzing. Click to enlarge image
Giao Tiếp Giữa Hai ESP32 Qua MQTT
Code ESP32 #1
Code ESP32 #2
Các Bước Thực Hiện
- Nếu đây là lần đầu tiên bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
- Mở hai Arduino IDE trên PC của bạn.
- Kết nối nút nhấn/công tắc với ESP32 #1
- Kết nối LED với ESP32 #2
- Mở Library Manager bằng cách click vào biểu tượng Library Manager trên thanh điều hướng bên trái của Arduino IDE
- Gõ MQTT trong ô tìm kiếm, sau đó tìm thư viện MQTT của Joel Gaehwiler.
- Click nút Install để cài đặt thư viện MQTT.

- Gõ ezButton trong ô tìm kiếm, sau đó tìm thư viện button của ArduinoGetStarted
- Click nút Install để cài đặt thư viện ezButton.

- Chọn bo mạch ESP32 phù hợp (ví dụ: ESP32 Dev Module).
- Kết nối ESP32 #1 với PC qua cáp USB và chọn COM port của ESP32 #1 trên Arduino IDE #1
- Kết nối ESP32 #2 với PC qua cáp USB và chọn COM port của ESP32 #2 trên Arduino IDE #2
- Copy code ESP32 #1, dán vào Arduino IDE #1 và lưu lại (đặt tên ESP32-1)
- Copy code ESP32 #2, dán vào Arduino IDE #2 và lưu lại (đặt tên ESP32-2)
- Thay thế thông tin WiFi (SSID và password) trong cả hai code với thông tin của bạn.
- Thay thế địa chỉ MQTT broker trong cả hai code (tên miền hoặc địa chỉ IP).
- Upload code ESP32 #1 lên ESP32 #1
- Upload code ESP32 #2 lên ESP32 #2
- Mở Serial Monitor trên Arduino IDE #1
- Mở Serial Monitor trên Arduino IDE #2
- Nhấn và giữ nút nhấn trên ESP32 #1 → xem trạng thái LED trên ESP32 #2 (BẬT)
- Thả nút nhấn trên ESP32 #1 → xem trạng thái LED trên ESP32 #2 (TẮT)
- Nhấn, giữ và thả nút nhấn nhiều lần.
- Xem kết quả trên cả hai Serial Monitor
- Serial Monitor của ESP32 #1
- Serial Monitor của ESP32 #2