Je travaille sur un réseau maillé basé sur ESP8266 et tout semble bien fonctionner en utilisant un exemple de code d' EasyMesh par Coopdis . Dans son exemple, 3 ESP8266 s'inscrivent dans le maillage et servent une interface Web simple. Cela fonctionne parfaitement pour moi aussi.
Cependant, dans ma solution, j'ai besoin que l'un de ces nœuds soit connecté à Internet pour que tout le maillage puisse y accéder (ou au moins le maillage soit accessible). Ceci est également mentionné dans la documentation ESP8266 Mesh User Guid (page 4) d' Espressif . J'ai également trouvé quelques autres documents qu'ils publient tous en parlant de cela car c'est juste normal mais sans aucun exemple de code que je pourrais facilement comprendre.
Comment configurer le maillage pour qu'il se connecte également à un routeur. Est-ce aussi simple que d'utiliser le même SSID et la même clé de passe pour le réseau maillé que j'utilise sur mon routeur Wi-Fi ou dois-je faire quelque chose comme une partie Raspberry Pi du maillage Wi-Fi qui peut ensuite être connecté à mon routeur via la connexion Ethernet? Je ne pense pas que ce dernier devrait être exigé des recherches que j'ai faites.
J'ai besoin de l'exemple de code hello world pour cela. Les commandes AT ne vont pas m'aider, je pense.
la source
Réponses:
Une autre option pour un maillage facile consiste à utiliser painlessMesh par BlackEdder et à y introduire un pont pour faire la navette entre les données et le monde extérieur.
Il y a un problème de connexion à un autre réseau à partir d'un maillage dans painlessMesh gitlab qui explique quatre solutions différentes. Les solutions fonctionnent peut-être aussi dans easyMesh, car le problème a été soulevé au départ, mais à coup sûr dans painlessMesh.
Je les ai regardés et les solutions les plus efficaces nécessitaient à la fois des périphériques supplémentaires au maillage pour gérer la connexion réelle au réseau externe.
Le premier introduirait le quatrième esp8266 pour votre projet. Il serait connecté à Internet et communiquerait avec l'un de vos nœuds via une connexion série.
Un autre serait d'utiliser un appareil Raspberry PI pour collecter les données et se connecter avec une autre carte wifi à un autre réseau.
Les deux autres n'étaient pas bons, l'un était découragé par l'auteur et l'autre si compliqué et limité avec esp8266 que je n'aurais pas pu l'essayer.
Tout le guide dans gitlab .
la source
Je modifierais un peu l'implémentation existante d'EasyMesh, car actuellement il ne semble pas implémenter les rôles de nœuds. Chaque nœud est égal et ils ne peuvent établir des connexions qu'entre eux. Comme je le vois, il n'y a aucun moyen d'ajouter un serveur à leurs tables de routage ni de marquer un enregistrement de connexion spécifique dans les tables connectées à un serveur.
Les nœuds utilisent une liste de connexions pour le routage / transfert de messages. Ce dont vous avez besoin, c'est d'un nœud qui a un enregistrement de connexion pour le serveur, c'est ce que le nœud racine est.
Maintenant, actuellement, lorsqu'un nœud est alimenté, il analyse les points d'accès disponibles (points d'accès), filtre ceux qui ne commencent pas par le préfixe de maillage , puis se connecte à l'AP avec le meilleur RSSI. De plus, chaque nœud crée son propre point d'accès avec un préfixe de maillage de nom + un ID de puce unique de nœud .
Si aucun autre nœud n'est disponible, il attendra simplement que d'autres se connectent. Et c'est le premier point où les changements doivent être appliqués. Vous pouvez coder en dur ou rendre en quelque sorte configurable un AP unique avec un nom comme préfixe de maillage + "Serveur" et si aucun autre AP EasyMesh n'est disponible, le nœud doit se connecter à cet AP et doit stocker un
meshConnectionType
objet prédéfini dans sa liste de connexions.Le dossier de cet objet ne sera pas déterminé par l'échange de messages entre le serveur et le nœud mais peut être des valeurs fixes, à l'exception du
espconn
champ. Celui-là doit être acquis comme dans les autres cas. Dans la structure suivante, vous n'aurez besoin que de la première variable membre.Le
chipId
sera l'adresse du serveur dans le réseau maillé. Vous devez choisir une valeur qui ne peut pas être un identifiant de puce ESP8266.Donc, fondamentalement, le premier nœud à démarrer dans votre réseau sera le nœud "racine". Si d'autres nœuds veulent envoyer des messages au serveur, le message sera envoyé au nœud "racine" sur la base des enregistrements de connexion in-directe (appelés sous-connexions dans le code).
Le nœud "racine" découvrira alors qu'il a une connexion directe avec le serveur (au routeur / Internet) et comme c'est un message au serveur qu'il doit transmettre ce message d'une autre manière (pas comme un maillage) . De toute évidence, des informations supplémentaires sont nécessaires ici, comme l'adresse IP du serveur et le port utilisé par exemple. Ceux-ci doivent également être stockés sur le nœud (sur chaque nœud) par défaut ou par une méthode de configuration.
Donc, enfin, le nœud "racine" enverra un message IP au serveur, vous devez à nouveau l'implémenter.
TL; DR; Conclusion:
destId
) qui sera utilisée dans le réseau maillé lors de l'envoi de messages au serveur. Ces informations doivent être disponibles par défaut pour tous les nœuds.destId
à la liste de connexion du nœud racine.Ce n'est qu'une idée théorique que je trouve en lisant la mise en œuvre d'EasyMesh. J'ai peut-être manqué un fait important qui rendrait cela difficile ou impossible à mettre en œuvre. De plus, ce n'est peut-être pas le moyen le plus efficace de résoudre le problème. Je ne suis pas un expert en réseaux maillés.
Avoir un nœud racine dans le réseau demande "Que se passe-t-il si la racine est déconnectée? Comment une nouvelle racine sera choisie?".
la source