Я работаю над ячеистой сетью на основе ESP8266, и, кажется, все работает нормально, используя пример кода от EasyMesh от Coopdis . В своем примере 3 ESP8266 регистрируются в сетке и обслуживают простой веб-интерфейс. Это работает отлично для меня тоже.
В моем решении, однако, мне нужно, чтобы один из этих узлов был подключен к Интернету, чтобы вся сетка могла получить к нему доступ (или, по крайней мере, получить доступ к сетке). Это также упоминается в Руководстве пользователя ESP8266 Mesh (стр. 4) от Espressif . Я также нашел пару других документов, которые они публикуют, все говорят об этом, поскольку это просто нормально, но без примера кода, который я мог бы легко понять.
Как настроить сетку для подключения к роутеру. Это так же просто, как использовать тот же SSID и ключ доступа для ячеистой сети, что я использую на своем маршрутизаторе Wi-Fi, или мне нужно сделать что-то вроде Raspberry Pi как часть сетки Wi-Fi, которую затем можно подключить к моему маршрутизатору через соединение Ethernet? Я не думаю, что последнее должно требоваться из исследования, которое я сделал, хотя.
Мне нужен пример кода Hello World для этого. AT команды мне не помогут, я думаю.
источник
Ответы:
Другой вариант для легкого создания сетки - это использование painlessMesh от BlackEdder и введение там моста для передачи данных во внешний мир.
Существует проблема при подключении к другой сети из сетки в gestlab без боли, которая объясняет четыре различных решения. Решения могут работать и в easyMesh, потому что проблема была поднята изначально, но наверняка в безболезненном.
Я посмотрел на них, и большинству рабочих решений потребовалось подключить к сети дополнительные устройства, чтобы обеспечить фактическое соединение с внешней сетью.
Сначала представим четвертый esp8266 для вашего проекта. Он будет подключен к Интернету и подключен к одному из ваших узлов через последовательное соединение.
Другой будет использовать устройство Raspberry PI для сбора данных и подключения с другой картой Wi-Fi к другой сети.
Два других не были хорошими, один был обескуражен автором, а другой настолько сложным и ограниченным с esp8266, что я не буду пытаться.
Весь гид в Гитлаб .
источник
Я бы немного изменил существующую реализацию EasyMesh, так как в настоящее время кажется, что она не реализует роли узлов. Каждый узел равен, и они могут строить соединения только друг с другом. Как я вижу, нет способа добавить сервер в свои таблицы маршрутизации или пометить конкретную запись соединения в таблицах, которые имеют подключение к серверу.
Узлы используют список соединений для маршрутизации / пересылки сообщений. Вам нужен узел, у которого есть запись о соединении с сервером, это корневой узел.
Теперь, когда узел включен, он сканирует доступные точки доступа (точки доступа), отфильтровывает те, которые не начинаются с префикса сетки, и затем подключается к точке доступа с лучшим RSSI. Также каждый узел создает свою собственную точку доступа с префиксом имени сетки + уникальный идентификатор чипа узла .
Если другой узел недоступен, он просто будет ждать подключения других. И это первая точка, в которой следует применить изменения. Вы можете жестко закодировать или сделать каким-либо образом настраиваемую уникальную точку доступа с именем, таким как префикс сетки + «Сервер», и если нет другой точки доступа EasyMesh, узел должен подключиться к этой точке доступа и сохранить предварительно определенный
meshConnectionType
объект в своем списке соединений.espconn
Поле этого объекта не будет определяться обменом сообщениями между сервером и узлом, но может иметь фиксированные значения, кроме поля. Это должно быть приобретено как в других случаях. В следующей структуре вам понадобится только первая переменная-член.chipId
Будет адрес сервера в ячеистой сети. Вы должны выбрать одно значение, которое не может быть идентификатором чипа ESP8266.Таким образом, первым узлом, включенным в вашу сеть, будет «корневой» узел. Если другие узлы хотят отправлять сообщения на сервер, то сообщение будет отправлено «корневому» узлу на основе записей прямого соединения (так называемых подсоединений в коде).
Затем «корневой» узел обнаружит, что он имеет прямое подключение к серверу (к маршрутизатору / интернету) и, поскольку это сообщение серверу, что он должен переслать это сообщение другим способом (а не в виде сетки) , Очевидно, что здесь необходима дополнительная информация, например, IP-адрес сервера и используемый порт. Они также должны храниться в узле (на каждом узле) по умолчанию или с помощью какого-либо метода конфигурации.
Таким образом, наконец, «корневой» узел отправит IP-сообщение на сервер, это должно быть реализовано вами снова.
TL; DR; Вывод:
destId
), который будет использоваться в ячеистой сети при отправке сообщений на сервер. Эта информация должна быть доступна для всех узлов по умолчанию.destId
список соединений корневого узла.Это просто теоретическая идея, с которой я столкнулся, прочитав реализацию EasyMesh. Возможно, я упустил какой-то важный факт, который сделал бы это трудным или невозможным для реализации. Также это может быть не самый эффективный способ решения проблемы. Я не эксперт по ячеистой сети.
Наличие корневого узла в сети спрашивает: «Что произойдет, если корень отключится? Как будет выбран новый корень?».
источник