Nút mạng lưới ESP8266


11

Tôi đang làm việc trên một mạng lưới dựa trên ESP8266 và tất cả dường như đang hoạt động tốt khi sử dụng mã mẫu từ EasyMesh của Coopdis . Trong ví dụ của anh ấy / cô ấy, 3 ESP8266 đăng ký vào lưới và phục vụ giao diện web đơn giản. Điều này đang làm việc hoàn hảo cho tôi quá.

Tuy nhiên, trong giải pháp của tôi, tôi cần một trong các nút này được kết nối với internet để toàn bộ Lưới có thể truy cập được (hoặc ít nhất là có thể truy cập lưới). Điều này cũng được đề cập trong Tài liệu hướng dẫn người dùng lưới ESP8266 (trang 4) từ Espressif . Tôi cũng đã tìm thấy một vài tài liệu khác mà họ xuất bản đều nói về điều này vì nó chỉ bình thường nhưng không có bất kỳ mã ví dụ nào mà tôi có thể dễ dàng hiểu được.

Làm cách nào để định cấu hình lưới để kết nối với bộ định tuyến. Có đơn giản như sử dụng cùng một khóa SSID và Pass cho mạng lưới như tôi đang sử dụng trên bộ định tuyến Wi-Fi của mình không hoặc tôi có cần tạo một cái gì đó giống như một phần Raspberry Pi của lưới Wi-Fi sau đó có thể được kết nối không đến bộ định tuyến của tôi thông qua kết nối Ethernet? Tôi không nghĩ rằng cái sau nên được yêu cầu từ nghiên cứu tôi đã thực hiện.

Tôi cần mã mẫu hello world cho việc này. Các lệnh AT sẽ không giúp tôi, tôi nghĩ vậy.


1
Về ví dụ 3 nút, bạn có cài đặt và chạy giao diện web không, như giao diện trên điện thoại trong video này ?
Bence Kaulics

1
@BenceKaulics Tôi chưa kiểm tra cụ thể vì tôi đã làm điều này trước đây và đây không phải là vấn đề đối với tôi. Tại sao bạn hỏi Tôi đã nghĩ rằng đây có thể là một tùy chọn dự phòng trong đó "Máy chủ" có thể truy cập mạng Lưới thông qua các cuộc gọi REST được lưu trữ trên mạng, nhưng tôi bị hấp dẫn bởi tùy chọn ROOT NODE, nghe có vẻ như kiến ​​trúc chính xác (IMHO).
Gineer

1
Tôi hiểu rồi. Tôi đã suy nghĩ tương tự rằng nó có thể là một lựa chọn thay thế để truy cập mạng của bạn. Không đề xuất như một giải pháp mặc dù, do đó chỉ là một nhận xét nó là gì. Tôi không biết rằng bạn đã nghĩ về nó. ;)
Bence Kaulics

Câu trả lời:


6

Một tùy chọn khác để dễ dàng tạo lưới là sử dụng p đauMesh của BlackEdder và giới thiệu có một cầu nối để chuyển dữ liệu ra thế giới bên ngoài.

Có một vấn đề về kết nối với mạng khác từ một mạng trong gitlab không đau, giải thích bốn giải pháp khác nhau. Các giải pháp có thể cũng hoạt động trong easyMesh, vì vấn đề ban đầu được nêu ra ở đó, nhưng chắc chắn trong p đauMesh.

Tôi đã xem xét chúng và các giải pháp hiệu quả nhất cần cả hai thiết bị bổ sung vào lưới để xử lý kết nối thực tế với mạng bên ngoài.

Đầu tiên sẽ giới thiệu Esp8266 thứ tư cho dự án của bạn. Nó sẽ được kết nối với Internet và liên lạc với một trong các nút của bạn thông qua kết nối nối tiếp.

Một người khác sẽ sử dụng thiết bị Raspberry PI để thu thập dữ liệu và kết nối với một thẻ wifi khác với mạng khác.

Hai cái còn lại không tốt, một cái đã bị tác giả ngăn cản và cái kia quá phức tạp và bị giới hạn với Esp8266 mà tôi sẽ không thử.

Toàn bộ hướng dẫn trong gitlab .


5

Tôi sẽ sửa đổi một chút việc triển khai EasyMesh hiện có, vì hiện tại nó dường như không thực hiện các vai trò nút. Mỗi nút bằng nhau và họ chỉ có thể xây dựng các kết nối với nhau. Như tôi thấy, không có cách nào để thêm một máy chủ vào các bảng định tuyến của họ cũng như không đánh dấu một bản ghi kết nối cụ thể trong các bảng có kết nối với máy chủ.

Các nút sử dụng một danh sách kết nối để định tuyến / chuyển tiếp tin nhắn. Những gì bạn cần là một nút có bản ghi kết nối cho máy chủ, đây là nút gốc.

Bây giờ, hiện tại khi một nút được cấp nguồn, nó sẽ quét các AP có sẵn (Điểm truy cập), lọc ra các nút không bắt đầu bằng tiền tố lưới và sau đó kết nối với AP bằng RSSI tốt nhất. Ngoài ra mỗi nút tạo AP riêng của mình với tiền tố lưới tên + ID chip duy nhất của nút .

Nếu không có nút nào khác, nó sẽ chỉ chờ người khác kết nối. Và đây là điểm đầu tiên mà những thay đổi nên được áp dụng. Bạn có thể mã hóa hoặc tạo một AP có thể định cấu hình bằng cách nào đó với một tên như tiền tố lưới + "Máy chủ" và nếu không có AP EasyMesh nào khác, nút sẽ kết nối với AP này và nên lưu trữ một meshConnectionTypeđối tượng được xác định trước trong danh sách kết nối của nó.

Đối tượng này của đệ sẽ không được xác định bằng cách trao đổi thông điệp giữa máy chủ và các nút nhưng có thể được cố định giá trị, trừ các espconnlĩnh vực. Đó là một trong những trường hợp khác. Trong cấu trúc sau, bạn sẽ chỉ cần biến đầu tiên cho thành viên.

struct meshConnectionType {
    espconn             *esp_conn;
    uint32_t            chipId = 0;
    String              subConnections;
    timeSync            time;
    uint32_t            lastRecieved = 0;
    bool                newConnection = true;

    (...)
};

Các chipIdsẽ là địa chỉ của máy chủ trong mạng lưới. Bạn nên chọn một giá trị không thể là ID chip ESP8266.

Vì vậy, về cơ bản, nút đầu tiên để tăng sức mạnh trong mạng của bạn sẽ là nút "root". Nếu các nút khác muốn gửi tin nhắn đến máy chủ thì tin nhắn sẽ được gửi đến nút "gốc" dựa trên các bản ghi kết nối trực tiếp (được gọi là kết nối phụ trong mã).

Sau đó, nút "root" sẽ phát hiện ra rằng nó có kết nối trực tiếp đến máy chủ (với bộ định tuyến / internet) và vì nó là một thông báo cho máy chủ rằng nó sẽ chuyển tiếp tin nhắn này theo một cách khác (không phải theo kiểu lưới) . Rõ ràng thông tin bổ sung là cần thiết ở đây như địa chỉ IP của máy chủ và cổng được sử dụng chẳng hạn. Chúng cũng nên được lưu trữ một nút (trên mỗi nút) theo mặc định hoặc theo một số phương thức cấu hình.

Vì vậy, cuối cùng nút "root" sẽ gửi một thông điệp IP đến máy chủ, điều này sẽ được bạn thực hiện lại.


TL; DR; Phần kết luận:

  • Cần có một AP máy chủ và nút đầu tiên (chỉ nút đầu tiên được cấp nguồn) sẽ kết nối với nó, đây sẽ là nút gốc.
  • Máy chủ nên có một địa chỉ ( destId) sẽ được sử dụng trong mạng lưới khi gửi tin nhắn đến máy chủ. Thông tin này nên có sẵn cho tất cả các nút theo mặc định.
  • Nút gốc nên biết rằng nó được kết nối "trực tiếp" với máy chủ / internet. Điều này có thể đạt được bằng cách thêm một bản ghi kết nối với máy chủ destIdvào danh sách kết nối của nút gốc.
  • Nút gốc biết rằng nó được kết nối với máy chủ có thể chuyển tiếp các thông điệp một cách thích hợp thông qua Internet.

Đây chỉ là một ý tưởng lý thuyết mà tôi nghĩ ra bằng cách đọc qua việc thực hiện EasyMesh. Tôi có thể đã bỏ lỡ một số thực tế quan trọng sẽ làm cho điều này trở nên khó khăn hoặc không thể thực hiện được. Ngoài ra nó có thể không phải là cách hiệu quả nhất để giải quyết vấn đề. Tôi không phải là một chuyên gia mạng lưới.

Có một nút gốc trong mạng hỏi "Điều gì xảy ra nếu root bị ngắt kết nối? Làm thế nào một root mới sẽ được chọn?".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.