ESP8266 Mesh Network Root Node


11

Я працюю в мережевій мережі на базі ESP8266, і все, здається, працює нормально, використовуючи зразок коду від EasyMesh від Coopdis . У його / її прикладі 3 ESP8266 зареєстровані в сітці та обслуговують простий веб-інтерфейс. Це чудово працює і для мене.

Однак у моєму рішенні мені потрібен один з цих вузлів для підключення до Інтернету, щоб вся Меш отримала доступ до нього (або, принаймні, до мережі можна отримати доступ). Про це також згадується в Документації з користувачем Mesh ESP8266 (стор. 4) від Espressif . Я також знайшов декілька інших документів, які вони публікують, і всі вони говорять про це, як це просто нормально, але без будь-якого прикладу коду, який я міг би легко зрозуміти.

Як налаштувати сітку для підключення до маршрутизатора. Це так просто, як використовувати той самий SSID і ключ передачі для сітчастої мережі, як я використовую на своєму маршрутизаторі Wi-Fi, або мені потрібно зробити щось на зразок Raspberry Pi частини Wi-Fi-мережі, яку потім можна підключити до мого маршрутизатора через Ethernet-з'єднання? Я не думаю, що останнього слід вимагати від проведених нами досліджень.

Для цього мені потрібен привіт зразок світового коду. Команди AT не збираються мені допомагати.


1
Що стосується прикладу 3-х вузлів, чи є у вас і працює веб-інтерфейс, як той, що знаходиться на телефоні у цьому відео ?
Бенс Каулікс

1
@BenceKaulics Я ще не перевіряв це, оскільки я це робив раніше, і це не є проблемою для мене. Чому ти питаєш? Я думав, що це може бути резервний варіант, коли «Сервер» може просто отримати доступ до мережі Mesh через REST-дзвінки, розміщені в мережі, але мене заінтригує варіант ROOT NODE, який звучить як правильна архітектура (IMHO).
Gineer

1
Розумію. Я думав так само, що це може бути альтернативний варіант доступу до вашої мережі. Однак не пропонуючи рішення як рішення, таким чином, просто прокоментуйте, що це було. Я не знав, що ви вже про це думали. ;)
Бенс Каулікс

Відповіді:


6

Ще одним варіантом простої сітки є використання безболісногоMesh від BlackEdder і введення там мосту для переміщення даних у зовнішній світ.

Існує проблема з підключенням до іншої мережі з сітки в безболісному Mesh gitlab, який пояснює чотири різні рішення. Рішення, можливо, працюють і в easyMesh, оскільки це питання піднімалося спочатку там, але точно в безболісному Mesh.

Я переглянув їх, і найбільш робочі рішення потребували як додаткових пристроїв до мережі, щоб обробляти фактичне підключення до зовнішньої мережі.

Перший представив би четвертий esp8266 для вашого проекту. Він би був підключений до Інтернету та спілкувався з одним із ваших вузлів через послідовне з'єднання.

Іншим було б використання пристрою Raspberry PI для збору даних та підключення з іншою мережею Wi-Fi до іншої мережі.

Інші два були непогані, один був відбитий автором, а інші настільки складні та обмежені esp8266, що я б не намагався.

Весь путівник в gitlab .


5

Я би трохи змінив існуючу реалізацію EasyMesh, оскільки, схоже, зараз вона не реалізує ролі вузлів. Кожен вузол рівний, і вони можуть будувати зв’язки лише один з одним. Як я бачу, немає способу додати сервер до їх таблиць маршрутизації, а також не позначити конкретний запис з'єднання в таблицях, які мають підключення до сервера.

Вузли використовують список з'єднань для маршрутизації / переадресації повідомлень. Вам потрібен вузол, який записує з'єднання для сервера, ось що є кореневим вузлом.

Тепер, коли вузол працює від мережі, він скануватиме доступні точки доступу (точки доступу), відфільтровує ті, які не починаються з сіткового префікса, а потім підключається до AP з найкращим RSSI. Також кожен вузол створює власний AP з префіксом mesh mes + унікальний ідентифікатор чіпа .

Якщо іншого вузла немає, він просто чекатиме підключення інших. І це перший пункт, коли слід застосувати зміни. Ви можете твердо кодувати або зробити яким-небудь чином настроюваний унікальний AP з таким ім'ям, як mesh prefix + "Server", і якщо немає жодної іншої програми EasyMesh AP, вузол повинен підключитися до цього AP і повинен зберігати заздалегідь визначений meshConnectionTypeоб'єкт у своєму списку з'єднань.

Поданий об'єкт не визначатиметься обміном повідомленнями між сервером та вузлом, але може бути фіксованим значенням, за винятком espconnполя. Таку треба придбати, як і в інших випадках. У наступній структурі вам знадобиться лише змінна з першим членом.

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

    (...)
};

chipIdБуде адресу сервера в комірчастої мережі. Ви повинні вибрати одне значення, яке не може бути ідентифікатором чіпа ESP8266.

Отже, в основному першим вузлом, що працює у вашій мережі, буде «кореневий» вузол. Якщо інші вузли хочуть надсилати повідомлення на сервер, то повідомлення буде надіслано до "кореневого" вузла на основі записів прямого з'єднання (званих підз'єднаннями в коді).

Тоді "кореневий" вузол виявить, що він має пряме з'єднання з сервером (до маршрутизатора / Інтернету), і оскільки це повідомлення для сервера, що він повинен пересилати це повідомлення іншим способом (не таким, як сітка) . Очевидно, тут потрібна додаткова інформація, наприклад IP-адреса сервера та, наприклад, використовуваний порт. Вони також повинні зберігати вузол (на кожному вузлі) за замовчуванням або деяким способом конфігурації.

Отже, нарешті, "кореневий" вузол надішле IP-повідомлення на сервер, це вам слід знову реалізувати.


TL; DR; Висновок:

  • Має бути AP-сервер, і перший вузол (тільки перший вузол, що підключається) повинен підключитися до нього, це буде кореневий вузол.
  • Сервер повинен мати адресу ( destId), яка буде використовуватися в мережевій мережі при надсиланні повідомлень на сервер. Ця інформація повинна бути доступною для всіх вузлів за замовчуванням.
  • Кореневий вузол повинен знати, що він підключений «безпосередньо» до сервера / Інтернету. Цього можна досягти, додавши запис з'єднання із сервером destIdдо списку з'єднань кореневого вузла.
  • Кореневий вузол, знаючи, що він підключений до сервера, може належним чином пересилати повідомлення через Інтернет.

Це просто теоретична ідея, яку я придумав, читаючи впровадження EasyMesh. Можливо, я пропустив якийсь важливий факт, який би зробив це важким або неможливим для реалізації. Також це може бути не найефективнішим способом вирішення проблеми. Я не експерт із мережевих мереж.

Наявність кореневого вузла в мережі запитує "Що станеться, якщо корінь буде відключена? Як буде обраний новий корінь?".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.