Giao tiếp giữa hai ESP32
Hướng dẫn này chỉ cho bạn cách thiết lập kết nối giữa hai ESP32 qua TCP/IP trên WiFi và trao đổi dữ liệu. Một ESP32 đóng vai trò là máy khách TCP và ESP32 còn lại đóng vai trò là máy chủ TCP. Chúng ta cũng sẽ tìm hiểu chi tiết thông qua một ví dụ:
- ESP32 #1 kết nối tới một nút nhấn và đóng vai trò là máy khách TCP.
- ESP32 #2 kết nối tới một LED và đóng vai trò là máy chủ TCP.
- Hai ESP32 kết nối với nhau qua Internet.
- Khi nút trên ESP32 #1 được nhấn, đèn LED trên ESP32 #2 sẽ sáng.

Phần cứng cần chuẩn bị
| 2 | × | mô-đun phát triển ESP-WROOM-32 | ||
| 2 | × | Micro USB Cable | ||
| 1 | × | (Tùy chọn) DC Power Jack | ||
| 1 | × | breadboard | ||
| 1 | × | dây jumper | ||
| 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) |
Giao tiếp giữa hai ESP32 - Tổng quan
Có rất nhiều cách để ESP32 #1 giao tiếp với ESP32 #2. Tùy thuộc vào khoảng cách, chúng ta có thể chọn một trong các cách dưới đây:
| Methods | Distance |
|---|---|
| SPI | very short |
| I2C | very short |
| UART (TTL) | very short |
| UART (RS-232/485/422) | short |
| Bluetooth | short |
| LoRa | long |
| WiFi | unlimited(*) |
※ Lưu ý:
(*):
- Nếu chúng ta kết nối cả hai ESP32 với Internet, khoảng cách giao tiếp là vô hạn
- Nếu chúng ta không kết nối cả hai ESP32 với Internet, nhưng chúng ta kết nối chúng với cùng một mạng LAN, khoảng cách giao tiếp bị giới hạn trong mạng LAN
Hướng dẫn này sẽ sử dụng WiFi để giao tiếp giữa hai ESP32.
Giao tiếp giữa hai ESP32 qua WiFi
Hai ESP32 có thể giao tiếp với nhau qua WiFi nếu:
- Hai ESP32 trong cùng một mạng LAN. Chúng không cần kết nối Internet.
- Hai ESP32 ở hai mạng LAN khác nhau. Chúng cần kết nối Internet.
Có hai cách mà hai ESP32 có thể giao tiếp với nhau.
- Hai ESP32 giao tiếp với nhau trực tiếp: một ESP32 là máy khách TCP, ESP32 kia là máy chủ TCP.
- Hai ESP32 giao tiếp với nhau gián tiếp thông qua một máy chủ tập trung (ví dụ máy chủ MQTT): cả hai ESP32 đều là máy khách TCP. Tham khảo hướng dẫn Giao Tiếp MQTT Giữa ESP32-to-ESP32.
Nó cần một giao thức ứng dụng mà hai ESP32 sử dụng để giao tiếp với nhau. Ví dụ:
- Giao thức tự định nghĩa trên TCP thô (trực tiếp)
- Modbus TCP (trực tiếp)
- HTTP (trực tiếp)
- Telnet (trực tiếp)
- SSH (trực tiếp)
- MQTT (gián tiếp qua một máy chủ)
※ Lưu ý:
- Giao thức UDP nằm ngoài phạm vi của hướng dẫn này.
Ứng dụng ví dụ
Hãy thực hiện ứng dụng sau: Một nút hoặc công tắc được kết nối với ESP32 #1 sẽ điều khiển một LED được kết nối với ESP32 #2 qua WiFi.

Để đơn giản, hướng dẫn này sẽ sử dụng một giao thức do chính chúng tôi tự định nghĩa (không có chuẩn).
Giao thức tự định nghĩa
Chúng tôi định nghĩa một giao thức đơn giản như sau:
- Tạo một kết nối TCP giữa ESP32 #1 và ESP32 #2
- ESP32 #1:
- Máy khách TCP: chủ động gửi yêu cầu kết nối TCP tới ESP32 #2
- Nếu trạng thái của công tắc được đổi sang BẬT, ESP32 #1 gửi một byte (lệnh) có giá trị bằng 1 tới ESP32 #2.
- Nếu trạng thái của công tắc được đổi sang TẮT, ESP32 #1 gửi một byte (lệnh) có giá trị bằng 0 tới ESP32 #2.
- ESP32 #2:
- Máy chủ TCP: lắng nghe yêu cầu kết nối TCP từ ESP32 #1. Nếu có yêu cầu TCP, nó chấp nhận và kết nối được tạo.
- Nếu nó nhận được một byte:
- Nếu giá trị là 1, Bật LED
- Nếu giá trị là 0, Tắt LED
- Sơ đồ đấu dây cho ESP32 #1: Máy khách TCP + một nút hoặc công tắc
- Sơ đồ đấu dây cho ESP32 #2: Máy chủ TCP + một đèn LED
- ESP32 - LED - Nhấp Nháy hướng dẫn
- ESP32 - Button (Nút Nhấn) hướng dẫn
- Nếu đây là lần đầu bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
- Kết nối một nút nhấn/công tắc với ESP32 #1
- Kết nối một đèn LED đến ESP32 #2
- Mở Arduino IDE (được gọi là Arduino IDE #1)
- Cài đặt thư viện ezButton trên Arduino IDE
- Kết nối ESP32 #1 với máy tính bằng cáp USB và chọn cổng COM của ESP32 #1 trên 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 máy tính của bạn (quan trọng!())
- Kết nối ESP32 #2 với máy tính bằng cáp USB và chọn cổng COM của ESP32 #2 trên Arduino IDE #2
- Sao chép mã của ESP32 #1, dán vào Arduino IDE #1 và lưu lại (đặt tên ESP321)
- Sao chép mã của ESP32 #2, dán vào Arduino IDE #2 và lưu lại (đặt tên ESP322)
- Tải lên mã của ESP32 #2 lên ESP32 #2 trước
- Mở Serial Monitor trên Arduino IDE #2, lấy địa chỉ IP của máy chủ TCP
- Cập nhật địa chỉ IP của máy chủ TCP trong mã ESP32 #1
- Tải mã ESP32 #1 lên ESP32 #1
- Mở Serial Monitor trên Arduino IDE #1
- Nhấn và giữ nút trên ESP32 #1 → xem trạng thái đèn LED trên ESP32 #2 (BẬT)
- Thả nút trên ESP32 #1 → xem trạng thái đèn LED trên ESP32 #2 (TẮT)
- Thực hiện quy trình trên vài lần.
- Xem đầu ra trên cả hai Serial Monitor
- Serial Monitor của ESP32 #1
- Trình theo dõi nối tiếp của ESP32 #2
- (): Nếu bạn mở cửa sổ Arduino IDE #2 bằng cách "File" → "New" hoặc "Open" từ cửa sổ Arduino IDE #2, bạn sẽ không thể mở hai cửa sổ Serial Monitor cho hai ESP32 trên cùng một máy tính cùng lúc.
- Có một phương án thay thế cho giao thức tự định nghĩa này. Đó là Modbus TCP. Giao thức Modbus được chuẩn hóa, nó có nhiều ưu điểm so với giao thức tự định nghĩa. Xem thêm trong ESP32 - Modbus hướng dẫn.
Sơ đồ đấu dây

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
※ Lưu ý:
Cần phải sử dụng một điện trở cho LED nếu LED không có điện trở tích hợp. Chúng tôi có các hướng dẫn dành riêng cho nút và LED. Bạn có thể tìm hiểu thêm về chúng tại:
Mã ESP32 cho ESP32 #1
Mã ESP32 cho ESP32 số 2
Hướng dẫn từng bước
※ Lưu ý:
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.