Mục lục:

Giao tiếp dữ liệu trực tiếp ESP8266: 3 bước
Giao tiếp dữ liệu trực tiếp ESP8266: 3 bước

Video: Giao tiếp dữ liệu trực tiếp ESP8266: 3 bước

Video: Giao tiếp dữ liệu trực tiếp ESP8266: 3 bước
Video: Hướng dẫn giao tiếp giữa hai kít esp8266 qua wifi sử dụng websocket - Tự học lập trình IOT 2024, Tháng mười một
Anonim
Giao tiếp dữ liệu trực tiếp ESP8266
Giao tiếp dữ liệu trực tiếp ESP8266

Giới thiệu

Trong khi thực hiện một số dự án với mô-đun Arduinos và nRF24l01, tôi đã tự hỏi liệu tôi có thể tiết kiệm một chút công sức bằng cách sử dụng mô-đun ESP8266 thay thế hay không. Ưu điểm của mô-đun ESP8266 là nó chứa bộ điều khiển vi mô trên bo mạch, do đó không cần thêm bo mạch Arduino. Ngoài ra, kích thước bộ nhớ của ESP8266 lớn hơn nhiều và về tốc độ, ESP8266 chạy ở tốc độ tối đa 160MHz thay vì 16MHz của Arduino. Tất nhiên là có một số mặt tiêu cực.

ESP8266 chỉ chạy trên 3.3V, có ít chân hơn và thiếu các đầu vào tương tự tốt đẹp mà Arduino có (nó có một, nhưng chỉ dành cho 1.0V chứ không phải 3.3V). Ngoài ra, có nhiều ví dụ mã khác cho Arduino + nRF24l01, sau đó là cho ESP8266, đặc biệt là khi nói đến truyền dữ liệu trực tiếp.

Vì vậy, với một dự án trong tâm trí, tôi đã xem xét chủ đề truyền dữ liệu nhanh và nhẹ giữa hai ESP8266 mà không có tất cả các thứ WWW và

Trong khi tìm kiếm các ví dụ trên Internet (hầu hết các mã dưới đây được chọn từ mạng ở nhiều nơi khác nhau), tôi đã gặp nhiều câu hỏi làm thế nào để thực hiện truyền dữ liệu trực tiếp mà không có các ví dụ "hãy làm như vậy". Có một số mã ví dụ, nhưng chủ yếu là câu hỏi tại sao nó không hoạt động.

Vì vậy, sau khi đọc và cố gắng hiểu, tôi đã tạo các ví dụ dưới đây cho phép truyền dữ liệu nhanh chóng và đơn giản giữa hai ESP8266.

Bước 1: Ranh giới và Nền (TCP Vs. UDP)

Để đạt được điều đó, một số ranh giới phải được làm rõ so với nRF24l01.

Để sử dụng ESP8266 trong môi trường Arduino, thư viện cơ bản để sử dụng là ESP8266WiFi.h. Có thể là những cái khác nhau, nhưng hầu hết các ví dụ đều sử dụng cái được đề cập ở trên. Khi sử dụng điều này, bạn cần đưa kết nối của mình đến mức WiFi.

Vì vậy, để giao tiếp cần có ít nhất một điểm truy cập (AP) / máy chủ và một máy khách. AP cung cấp tên của mạng và các địa chỉ IP và máy khách sẽ kết nối với máy chủ này.

Vì vậy, so với nRF24l01, trong đó mã ở cả hai đầu ít nhiều giống nhau (ngoại trừ các kênh truyền), mã của ESP8266 về cơ bản là khác nhau, vì một mã được định cấu hình là AP và mã còn lại là máy khách.

Chủ đề tiếp theo là, thay vì chỉ gửi một số byte đến nRF24l01, đối với các giao thức truyền ESP8266 cần phải được quan sát.

Có hai giao thức được sử dụng phổ biến: TCP và UDP.

TCP (Transmission Control Protocol) là một giao thức cho phép truyền không mất dữ liệu giữa máy chủ và máy khách. Giao thức kết hợp "bắt tay" (rất nhiều cờ và thẻ nhớ được gửi giữa hai bên) và đánh số và phát hiện gói để xác định và truyền lại các gói bị mất. Ngoài ra, bằng cách sử dụng tất cả những cái bắt tay này, giao thức ngăn chặn dữ liệu bị mất do nhiều gói được gửi cùng một lúc trong mạng. Các gói dữ liệu đợi cho đến khi chúng có thể được nhận.

UDP (User Datagram Protocol) thiếu tất cả các thao tác bắt tay, đánh số gói và truyền lại. Do đó, chi phí của nó nhỏ hơn và không cần tất cả các lần bắt tay để duy trì kết nối. UDP kết hợp một số phát hiện lỗi cơ bản, nhưng không có sửa chữa (gói bị hỏng chỉ bị loại bỏ). Dữ liệu được gửi mà không cần biết nếu bên nhận được tự do nhận dữ liệu. Đồng thời, nhiều gói có thể xung đột, vì mỗi bên sẽ gửi dữ liệu bất cứ khi nào cần. Bằng cách bỏ qua tất cả các lần bắt tay, có một tính năng bổ sung tuyệt vời của UDP được gọi là “multicast” và “broadcast”. Trong trường hợp "đa hướng", các gói dữ liệu được gửi đến một nhóm thành viên được xác định trước, trong một "quảng bá" các gói dữ liệu được gửi đến tất cả các thành viên được kết nối. Điều này làm giảm đáng kể việc truyền dữ liệu trong trường hợp các luồng được nhận bởi nhiều thành viên (ví dụ: bằng cách gửi nguồn cấp dữ liệu video đến nhiều máy thu hoặc bằng cách gửi thời gian hiện tại đến nhiều thiết bị được kết nối).

Có một số video tốt trên Youtube giải thích nó thậm chí còn tốt hơn.

Vì vậy, khi gửi dữ liệu, điều quan trọng là phải biết nhu cầu của bạn:

  • dữ liệu không bị hỏng, quản lý nhiều đồng nghiệp bằng cách bắt tay → TCP
  • dữ liệu thời gian thực, kết nối nhanh → UDP

Lần đầu tiên tôi bắt đầu với việc triển khai giao tiếp dựa trên TCP (giữa một Máy chủ và một Máy khách). Trong khi thử nghiệm nó, tôi đã gặp sự cố bị đình trệ trong đường truyền. Lúc đầu, dữ liệu được trao đổi nhanh, sau đó một thời gian tốc độ giảm đột ngột. Tôi kết luận rằng đây là một vấn đề điển hình của cách tiếp cận TCP (đã sai!), Vì vậy sau đó chuyển sang giải pháp dựa trên UDP. Cuối cùng thì tôi cũng đã làm việc cho cả hai. Vì vậy, cả hai giải pháp sẽ được cung cấp.

Các bản phác thảo bên dưới có điểm chung cho TCP và UDP là chúng:

  • độc lập với bất kỳ mạng WiFi hiện có nào. Vì vậy, nó sẽ hoạt động ở bất kỳ đâu xa internet và các bộ định tuyến được kết nối.
  • đang gửi dữ liệu ASCII để được in qua màn hình nối tiếp.
  • đang gửi dữ liệu thu được bởi hàm millis () -, để phân tích tốc độ truyền.
  • không được kiểm tra cho nhiều máy khách (do có phần cứng để thiết lập mạng ngay bây giờ)

Bước 2: Phần cứng

Phần cứng
Phần cứng
Phần cứng
Phần cứng
Phần cứng
Phần cứng
Phần cứng
Phần cứng

Để kiểm tra toàn bộ thiết lập, tôi đã sử dụng hai mô-đun ESP8266. Một mô-đun là bộ chuyển đổi ESP-01 + USB-to-UART. Mô-đun còn lại là mô-đun dựa trên ESP-12 kết hợp kết nối USB, Bộ điều chỉnh điện áp và một số công cụ thú vị như công tắc, LDR và đèn LED nhiều màu.

Mô-đun USB-to-UART cho ESP-01 cần được sửa đổi một chút để có thể sử dụng nó như một lập trình viên (lại là Youtube của Csongor Varga).

Để chạy các bản phác thảo, bạn cần cài đặt các thư viện ESP8266 (như được mô tả ở nhiều nơi trên internet). Trong cả hai trường hợp (TCP và UDP) đều có một bản phác thảo máy chủ và máy khách. Bản phác thảo nào được tải vào mô-đun nào không quan trọng.

Sự nhìn nhận

Như đã đề cập, các bản phác thảo dựa trên nhiều mảnh ghép mà tôi tìm thấy trên web. Tôi không còn nhớ nữa nơi tôi đã tìm thấy những gì, và mã gốc là gì hoặc những gì tôi đã thay đổi. Vì vậy, tôi chỉ muốn cảm ơn cộng đồng lớn nói chung ngoài kia đã xuất bản tất cả những ví dụ tuyệt vời.

Bước 3: Bản phác thảo

Code bao gồm hai bản phác thảo, mỗi bản phác thảo (như đã giải thích), bản phác thảo máy chủ và bản phác thảo máy khách, cho TCP và UDP mỗi bản phác thảo.

Đề xuất: