Estoy trabajando en una red de malla basada en ESP8266 y todo parece estar funcionando bien usando el código de muestra de EasyMesh by Coopdis . En su ejemplo, 3 ESP8266 se inscriben en la malla y sirven una interfaz web simple. Esto también funciona perfectamente para mí.
Sin embargo, en mi solución, necesito que uno de estos nodos esté conectado a Internet para que toda la malla pueda acceder a él (o al menos se puede acceder a la malla). Esto también se menciona en la documentación de ESP8266 Mesh User Guid Documentation (página 4) de Espressif . También he encontrado un par de otros documentos que publican, todos hablando de esto, ya que es normal pero sin ningún código de ejemplo que pueda entender fácilmente.
¿Cómo configuro la malla para conectarse también a un enrutador? ¿Es tan simple como usar el mismo SSID y clave de acceso para la red de malla que estoy usando en mi enrutador Wi-Fi o necesito hacer que algo como Raspberry Pi forme parte de la red Wi-Fi que luego se puede conectar? a mi enrutador a través de la conexión Ethernet? Sin embargo, no creo que esto último deba ser requerido por la investigación que he hecho.
Necesito el código de muestra hello world para esto. Los comandos AT no me van a ayudar, creo.
fuente
Respuestas:
Otra opción para la malla fácil es usar el software PainlessMesh by BlackEdder e introducir allí un puente para conmutar los datos al mundo exterior.
Hay un problema al conectarse a otra red desde una malla en indolitible gitlab que explica cuatro soluciones diferentes. Las soluciones tal vez funcionen también en easyMesh, porque el problema se planteó inicialmente allí, pero con seguridad en painlessMesh.
Los miré y la mayoría de las soluciones de trabajo necesitaban dispositivos adicionales a la malla para manejar la conexión real a la red externa.
El primero introduciría el cuarto esp8266 para su proyecto. Se conectaría a Internet y se comunicaría con uno de sus nodos a través de una conexión en serie.
Otro sería usar un dispositivo Raspberry PI para recopilar los datos y conectarse con otra tarjeta wifi a otra red.
Los otros dos no eran buenos, uno estaba desanimado por el autor y otro tan complicado y limitado con esp8266 que no lo intentaría.
Toda la guía en gitlab .
fuente
Modificaría un poco la implementación existente de EasyMesh, ya que actualmente no parece implementar roles de nodo. Cada nodo es igual y pueden construir conexiones solo entre sí. Como veo, no hay forma de agregar un servidor a sus tablas de enrutamiento ni de marcar un registro de conexión específico en las tablas que tiene conectividad a un servidor.
Los nodos usan una lista de conexión para el enrutamiento / reenvío de mensajes. Lo que necesita es un nodo que tenga un registro de conexión para el servidor, esto es lo que es el nodo raíz.
Ahora, cuando se alimenta un nodo, escaneará los AP (puntos de acceso) disponibles, filtrará los que no comiencen con el prefijo de malla y luego se conectará al AP con el mejor RSSI. Además, cada nodo crea su propio AP con un prefijo de malla de nombre + ID de chip único de nodo .
Si no hay otro nodo disponible, simplemente esperará a que otros se conecten. Y este es el primer punto donde se deben aplicar los cambios. Podría codificar o hacer de alguna manera configurable un AP único con un nombre como prefijo de malla + "Servidor" y si no hay otro AP EasyMesh disponible, el nodo debe conectarse a este AP y debe almacenar un
meshConnectionType
objeto predefinido en su lista de conexiones.Este objeto archivado no se determinará mediante el intercambio de mensajes entre el servidor y el nodo, pero puede tener valores fijos, excepto el
espconn
campo. Esa debe ser adquirida como en los otros casos. En la siguiente estructura solo necesitará la primera variable miembro.La
chipId
será la dirección del servidor en la red de malla. Debe elegir un valor que no pueda ser una ID de chip ESP8266.Básicamente, el primer nodo que se encenderá en su red será el nodo "raíz". Si otros nodos desean enviar mensajes al servidor, el mensaje se enviará al nodo "raíz" en función de los registros de conexión directa (llamadas sub-conexiones en el código).
El nodo "raíz" descubrirá que tiene una conexión directa con el servidor (al enrutador / internet) y, como es un mensaje para el servidor, debe reenviar este mensaje de otra manera (no como una malla) . Obviamente, se necesita información adicional aquí, como la dirección IP del servidor y el puerto utilizado, por ejemplo. Estos también deben almacenarse en el nodo (en cada nodo) de forma predeterminada o mediante algún método de configuración.
Así que, por último, el nodo "raíz" enviará un mensaje de IP al servidor, esto debe ser implementado por usted nuevamente.
TL; DR; Conclusión:
destId
) que se utilizará en la red de malla al enviar mensajes al servidor. Esta información debería estar disponible para todos los nodos de forma predeterminada.destId
a la lista de conexiones del nodo raíz.Esta es solo una idea teórica que se me ocurre leyendo la implementación de EasyMesh. Puede que me haya perdido algún hecho importante que haría que esto fuera difícil o imposible de implementar. Además, puede que no sea la forma más eficiente de resolver el problema. No soy un experto en redes de malla.
Tener un nodo raíz en la red pregunta "¿Qué pasará si la raíz se desconecta? ¿Cómo se elegirá una nueva raíz?".
fuente