Giao tiếp MQTT giữa ESP8266 và ESP8266
Trong bài hướng dẫn này, chúng ta sẽ đề cập đến:
- Cách bật giao tiếp hai chiều giữa hai ESP8266 bằng MQTT.
- Ví dụ: Sử dụng một nút bấm hoặc công tắc được kết nối với ESP8266 #1 để điều khiển một đèn LED được kết nối với ESP8266 #2 thông qua MQTT.

Phần cứng cần chuẩn bị
| 2 | × | ESP8266 NodeMCU | ||
| 2 | × | Micro USB Cable | ||
| 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
Chúng tôi có một hướng dẫn chi tiết về cách sử dụng ESP8266 với MQTT ở đây:
Giao tiếp giữa hai ESP8266 thông qua MQTT
Hai mạch ESP8266 có thể giao tiếp với nhau bằng cách sử dụng một máy chủ MQTT. Nếu bạn thích giao tiếp trực tiếp giữa hai ESP8266 mà không dựa vào một máy chủ MQTT, vui lòng xem hướng dẫn về Giao tiếp giữa hai ESP8266.
Khi ESP8266 #1 và ESP8266 #2 trao đổi dữ liệu thông qua một broker MQTT:
- Cả hai ESP8266 đều kết nối với broker MQTT.
- Để cho ESP8266 #2 gửi dữ liệu tới ESP8266 #1:
- ESP8266 #1 đăng ký một chủ đề, ví dụ: esp8266-1/data.
- ESP8266 #2 có thể truyền dữ liệu tới ESP8266 #1 bằng cách phát nó tới chủ đề mà ESP8266 #1 đang đăng ký nhận.
- Tương tự, để cho ESP8266 #1 gửi dữ liệu tới ESP8266 #2:
- ESP8266 #2 đăng ký một chủ đề, ví dụ: esp8266-2/data.
- ESP8266 #1 có thể gửi dữ liệu tới ESP8266 #2 bằng cách phát nó tới chủ đề mà ESP8266 #2 đang đăng ký nhận.
Bằng cách thực hiện cách tiếp cận này, hai ESP8266 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/bộ chuyển đổi được kết nối với ESP8266 #1 điều khiển một LED được kết nối với ESP8266 #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 cho riêng mình (một giao thức do chính chúng ta tự định nghĩa).
Cách thức hoạt động
Hãy định nghĩa một giao thức đơn giản:
- Cả ESP8266 #1 và ESP8266 #2 đều kết nối tới một máy chủ MQTT (máy chủ MQTT).
- Đối với ESP8266 #1:
- ESP8266 #1 xuất bản một thông điệp MQTT tới một chủ đề cụ thể bất cứ khi nào trạng thái của công tắc thay đổi.
- Khi nút/công tắc được bật, nội dung tin nhắn MQTT được đặt thành 1.
- Khi nút/công tắc được tắt, nội dung tin nhắn MQTT được đặt thành 0.
- Đối với ESP8266 #2:
- ESP8266 #2 đăng ký nhận từ cùng một chủ đề.
- Nếu ESP8266 #2 nhận được một tin nhắn MQTT có nội dung là 1, nó kích hoạt LED.
- Nếu ESP8266 #2 nhận được một tin nhắn MQTT có nội dung là 0, nó vô hiệu hóa LED.
- ESP8266 #1 - Sơ đồ mạch giữa ESP8266 và nút nhấn
- ESP8266 số 2 - Sơ đồ kết nối giữa ESP8266 và LED
Sơ đồ nối dây

This image is created using Fritzing. Click to enlarge image
Xem thêm Sơ đồ chân ESP8266 và Cách cấp nguồn cho ESP8266.

This image is created using Fritzing. Click to enlarge image
Giao tiếp giữa hai ESP8266 thông qua MQTT
Mã ESP8266 số 1
Mã ESP8266 #2
Hướng dẫn từng bước
Để bắt đầu với ESP8266 trong Arduino IDE, làm theo các bước sau:
- Hãy xem ESP8266 - Cài đặt phần mềm nếu đây là lần đầu bạn sử dụng ESP8266.
- Nối các thành phần như được hiển thị trong sơ đồ.
- 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 đúng, ví dụ (ví dụ NodeMCU 1.0 (ESP-12E Module)), và cổng COM tương ứng của nó.
- Nối một nút/nút bật đến ESP8266 #1
- Nối một LED đến ESP8266 #2
- Mở Arduino IDE (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 nhấp vào biểu tượng Arduino IDE trên PC của bạn (quan trọng!())
- Mở Library Manager bằng cách nhấp vào biểu tượng Library Manager ở thanh điều hướng bên trái của Arduino IDE
- Nhập MQTT vào ô tìm kiếm, sau đó tìm thư viện MQTT của Joel Gaehwiler.
- Nhấp vào nút Install để cài đặt thư viện MQTT.

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

- Kết nối ESP8266 #1 với máy tính bằng cáp USB và chọn cổng COM của ESP8266 #1 trên Arduino IDE #1
- Kết nối ESP8266 #2 với máy tính bằng cáp USB và chọn cổng COM của ESP8266 #2 trên Arduino IDE #2
- Sao chép mã ESP8266 #1, dán vào Arduino IDE #1 và lưu nó (đặt tên ESP8266-1)
- Sao chép mã ESP8266 #2, dán vào Arduino IDE #2 và lưu nó (đặt tên ESP8266-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ỉ MQTT broker trong cả hai mã (tên miền hoặc địa chỉ IP).
- Tải mã ESP8266 #1 lên ESP8266 #1
- Tải mã ESP8266 #2 lên ESP8266 #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 ESP8266 #1 → xem trạng thái LED trên ESP8266 #2 (ON)
- Thả nút trên ESP8266 #1 → xem trạng thái LED trên ESP8266 #2 (OFF)
- Nhấn, giữ và thả nút vài lần.
- Xem đầu ra trên cả hai Serial Monitor
- Serial Monitor của ESP8266 #1
- Trình theo dõi nối tiếp của ESP8266 #2