Giao tiếp giữa hai ESP8266
Hướng dẫn này cho bạn biết cách thiết lập kết nối giữa hai thiết bị ESP8266 bằng TCP/IP qua WiFi và trao đổi dữ liệu. Một ESP8266 sẽ hoạt động như một máy khách TCP, trong khi thiết bị còn lại sẽ đóng vai trò là một máy chủ TCP. Chúng ta sẽ đi sâu vào quá trình này thông qua một ví dụ:
- ESP8266 #1 sẽ kết nối tới một nút nhấn và hoạt động như máy khách TCP.
- ESP8266 #2 sẽ kết nối tới một đèn LED và hoạt động như máy chủ TCP.
- Cả hai thiết bị ESP8266 sẽ kết nối với nhau thông qua Internet.
- Khi nút trên ESP8266 #1 được nhấn, nó sẽ làm cho LED trên ESP8266 #2 sáng lên.
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) |
Giao tiếp giữa hai ESP8266 - Tổng quan
Hãy xem xét một ví dụ cụ thể: ESP8266 số 1 giao tiếp với ESP8266 số 2. Có nhiều cách để thiết lập liên lạc giữa hai ESP8266. Chúng ta có thể chọn một trong số chúng dựa trên khoảng cách giao tiếp. Bảng dưới đây hiển thị một số phương pháp và phạm vi giao tiếp tương ứng.
| Methods | Range |
|---|---|
| I2C | very short |
| SPI | very short |
| UART (TTL) | very short |
| UART (RS-232/485/422) | short |
| Bluetooth | short |
| LoRa | long |
| Ethernet/WiFi | unlimited(*) |
※ Lưu ý:
- Nếu hai ESP8266 được kết nối với Internet, phạm vi giao tiếp là không giới hạn.
- Tuy nhiên, nếu hai ESP8266 không được kết nối với Internet mà được kết nối trong cùng một mạng LAN, phạm vi giao tiếp của chúng bị giới hạn trong mạng cục bộ đó.
Trong số các phương pháp được đề cập ở trên, bài hướng dẫn này sử dụng WiFi để cho phép giao tiếp giữa hai ESP8266, vì nó cho phép phạm vi giao tiếp không bị giới hạn.
Giao tiếp giữa hai ESP8266 qua mạng LAN cục bộ hoặc Internet
Hai ESP8266 có thể giao tiếp với nhau qua WiFi khi:
- Họ ở cùng một Mạng cục bộ (Local Area Network - LAN), và không cần kết nối Internet
- Họ ở các LAN khác nhau, và cần kết nối Internet
Dù hai ESP8266 được kết nối trong một mạng LAN cục bộ hay qua Internet, có hai cách giao tiếp:
- Trực tiếp giữa hai ESP8266
- Thông qua một máy chủ tập trung (ví dụ: một máy chủ MQTT). Tham khảo Giao tiếp MQTT giữa ESP8266 và ESP8266
Khi nói đến giao tiếp trực tiếp, thông thường một ESP8266 là máy khách TCP và thiết bị còn lại là máy chủ TCP.
Trong trường hợp sử dụng một máy chủ tập trung để giao tiếp, thông thường cả hai ESP8266 đóng vai trò là các máy khách TCP.
Khi quyết định giao thức ứng dụng cho việc giao tiếp giữa hai ESP8266, chúng ta có một số lựa chọn để chọn:
- Giao thức tự định nghĩa trên TCP thô
- Modbus TCP
- HTTP
- Telnet
- SSH
- MQTT (yêu cầu một máy chủ tập trung)
Ứng dụng ví dụ
Hãy biến chương trình sau đây thành hiện thực: Một nút bấm hoặc công tắc được gắn vào ESP8266 #1 sẽ được dùng để bật và tắt một LED được kết nối với ESP8266 #2 thông qua WiFi.

Như đã nêu trước đây, có một số giao thức ứng dụng có sẵn. Để đơn giản hóa ví dụ này, chúng ta sẽ tự tạo ra một giao thức riêng của chính mình (một giao thức do chúng ta tự định nghĩa).
Giao thức tự định nghĩa
Hãy thiết lập một giao thức đơn giản:
- Thiết lập một kết nối TCP giữa ESP8266 #1 và ESP8266 #2
- ESP8266 #1:
- Hoạt động như một client TCP, khởi tạo kết nối TCP tới ESP8266 #2
- Khi công tắc được bật lên (ON), gửi một byte (lệnh) có giá trị 1 tới ESP8266 #2.
- Khi công tắc được gạt xuống (OFF), gửi một byte (lệnh) có giá trị 0 tới ESP8266 #2.
- ESP8266 #2:
- Đảm nhận vai trò máy chủ TCP, lắng nghe các yêu cầu kết nối TCP từ ESP8266 #1
- Nếu byte nhận được là 1, bật LED
- Nếu nhận được là 0, tắt LED
- ESP8266 #1 - Sơ đồ nối giữa ESP8266 và nút nhấn
- ESP8266 #2 - Sơ đồ đấu nối giữa ESP8266 và LED
- Xem hướng dẫn 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 hai bo mạch ESP8266 với máy tính của bạn bằng cáp USB.
- Mở Arduino IDE (được gọi là Arduino IDE #1).
- Mở Arduino IDE (được gọi là Arduino IDE #2).
- Chọn bo mạch ESP8266 phù hợp, chẳng hạn như (ví dụ NodeMCU 1.0 (ESP-12E Module)), và cổng COM tương ứng của nó.
- Cài đặt thư viện ezButton trên Arduino IDE.
- Sao chép mã ESP8266 #1, dán vào Arduino IDE #1 và lưu lại (đặt tên ESP8266-1).
- Sao chép mã ESP8266 #2, dán vào Arduino IDE #2 và lưu lại (đặt tên ESP8266-2).
- Tải mã ESP8266 #2 lên ESP8266 #2 trước.
- Mở Serial Monitor trên Arduino IDE #2, lấy địa chỉ IP của máy chủ TCP.
- Thay đổi địa chỉ IP của máy chủ TCP trong mã của ESP8266 #1.
- Tải mã ESP8266 #1 lên ESP8266 #1.
- Mở Serial Monitor trên Arduino IDE #1.
- Nhấn và giữ nút trên ESP8266 #1 và quan sát trạng thái của LED trên ESP8266 #2 (nó nên ở trạng thái BẬT).
- Thả nút trên ESP8266 #1 và quan sát trạng thái của LED trên ESP8266 #2 (nó nên ở trạng thái TẮT).
- Nhấn, giữ và thả nút vài lần.
- Kiểm tra đầu ra trên Serial Monitor #1:
- Kiểm tra đầu ra trên Serial Monitor #2:
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
Mã ESP8266 cho ESP8266 #1
Mã ESP8266 cho ESP8266 #2
Hướng dẫn từng bước
Để bắt đầu với ESP8266 trên Arduino IDE, hãy làm theo các bước 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.
Cách kết nối hai ESP8266 qua Internet
Có hai loại địa chỉ IP: riêng tư và công khai. Địa chỉ IP thường được sử dụng trong mạng gia đình là địa chỉ riêng tư.
Việc nhận diện địa chỉ IP riêng rất dễ. Có ba định dạng địa chỉ IP riêng: 10.x.x.x, 172.16.x.x, 192.168.x.x
Việc sử dụng địa chỉ IP riêng không quan trọng trong các tình huống sau:
- Khi hai ESP8266 nằm trong cùng một mạng cục bộ (LAN), bất kể chúng giao tiếp trực tiếp hay thông qua một máy chủ tập trung, và bất kể mạng LAN có được kết nối với Internet hay không.
- Khi hai ESP8266 nằm ở hai mạng cục bộ riêng biệt và giao tiếp với nhau thông qua một máy chủ tập trung.
Trong trường hợp hai ESP8266 ở hai mạng LAN khác nhau và giao tiếp với nhau trực tiếp, máy khách TCP ESP8266 có thể sử dụng một địa chỉ IP riêng. Tuy nhiên, máy chủ TCP ESP8266 phải sử dụng một trong các tùy chọn sau:
- Một địa chỉ IP công khai
- Một địa chỉ IP riêng với "Chuyển tiếp cổng" trên Router/Điểm truy cập
Kỹ thuật 'Chuyển tiếp cổng' khác nhau giữa các router/AP. Hướng dẫn này không đề cập đến chủ đề này.