Estou trabalhando em uma rede de malha baseada no ESP8266 e tudo parece estar funcionando bem usando o código de exemplo do EasyMesh da Coopdis . No seu exemplo, 3 ESP8266 se registram na malha e servem uma interface web simples. Isso está funcionando perfeitamente para mim também.
Na minha solução, no entanto, preciso que um desses nós esteja conectado à Internet para que todo o Mesh possa acessá-lo (ou pelo menos a malha possa ser acessada). Isso também é mencionado na documentação do ESP8266 Mesh User Guid (página 4) da Espressif . Eu também encontrei alguns outros documentos que eles publicam, todos falando sobre isso, pois é normal, mas sem nenhum código de exemplo que eu pudesse entender facilmente.
Como faço para configurar a malha para também conectar-se a um roteador. É tão simples quanto usar a mesma chave SSID e Pass para a rede de malha que estou usando no meu roteador Wi-Fi ou preciso fazer algo como uma parte do Raspberry Pi da malha de Wi-Fi que pode ser conectada ao meu roteador através da conexão Ethernet? Eu não acho que o último deva ser exigido da pesquisa que eu fiz.
Eu preciso do código de exemplo Olá mundo para isso. Os comandos AT não vão me ajudar, eu acho.
fonte
Respostas:
Outra opção para a malha fácil é usar o painlessMesh da BlackEdder e introduzir uma ponte para os dados para o mundo exterior.
Há um problema na conexão com outra rede a partir de uma malha no indolorMesh gitlab que explica quatro soluções diferentes. As soluções talvez funcionem também no easyMesh, porque o problema foi levantado inicialmente lá, mas com certeza no painlessMesh.
Eu olhei para eles e as soluções mais funcionais precisavam de dois dispositivos extras na malha para lidar com a conexão real com a rede externa.
O primeiro apresentaria o quarto esp8266 para o seu projeto. Ele seria conectado à Internet e se comunicaria com um de nossos nós via conexão serial.
Outro seria usar um dispositivo Raspberry PI para coletar os dados e conectar-se a outro cartão wifi em outra rede.
Os outros dois não eram bons, um foi desencorajado pelo autor e outro tão complicado e limitado pelo esp8266 que eu não tentaria.
O guia inteiro no gitlab .
fonte
Eu modificaria um pouco a implementação existente do EasyMesh, pois atualmente ele não parece implementar funções de nó. Cada nó é igual e eles podem construir conexões apenas entre si. Pelo que vejo, não há como adicionar um servidor às suas tabelas de roteamento nem marcar um registro de conexão específico nas tabelas que possuem conectividade com um servidor.
Os nós usam uma lista de conexões para encaminhamento / encaminhamento de mensagens. O que você precisa é de um nó que tenha um registro de conexão para o servidor, é isso que é o nó raiz.
Agora, atualmente, quando um nó é ligado, ele verifica os pontos de acesso disponíveis (pontos de acesso), filtra aqueles que não começam com o prefixo de malha e, em seguida, se conecta ao ponto de acesso com o melhor RSSI. Além disso, cada nó cria seu próprio AP com um prefixo de malha de nome + ID de chip exclusivo do nó .
Se nenhum outro nó estiver disponível, ele simplesmente aguardará a conexão de outras pessoas. E este é o primeiro ponto em que as mudanças devem ser aplicadas. Você pode codificar ou tornar de alguma forma configurável um AP exclusivo com um nome como prefixo de malha + "Servidor" e, se nenhum outro EasyMesh AP estiver disponível, o nó deve se conectar a esse AP e armazenar um
meshConnectionType
objeto predefinido em sua lista de conexões.O objeto arquivado não será determinado pela troca de mensagens entre o servidor e o nó, mas poderá ter valores fixos, exceto o
espconn
campo. Esse deve ser adquirido como nos outros casos. Na estrutura a seguir, você precisará apenas da primeira variável de membro.O
chipId
será o endereço do servidor na rede mesh. Você deve escolher um valor que não possa ser um ID de chip ESP8266.Então, basicamente, o primeiro nó a ligar na sua rede será o nó "raiz". Se outros nós quiserem enviar mensagens para o servidor, a mensagem será enviada para o nó "raiz" com base nos registros de conexão direta (denominada sub-conexão no código).
O nó "raiz" descobrirá que possui conexão direta com o servidor (para o roteador / internet) e como é uma mensagem para o servidor que deve encaminhar essa mensagem de outra maneira (não como uma malha) . Obviamente, são necessárias informações adicionais aqui, como o endereço IP do servidor e a porta usada, por exemplo. Eles também devem ser armazenados no nó (em todos os nós) por padrão ou por algum método de configuração.
Por fim, o nó "raiz" envia uma mensagem IP para o servidor, que deve ser implementada por você novamente.
TL; DR; Conclusão:
destId
) que será usado na rede mesh ao enviar mensagens para o servidor. Esta informação deve estar disponível para todos os nós por padrão.destId
à lista de conexões do nó raiz.Essa é apenas uma idéia teórica que eu lembro através da implementação do EasyMesh. Posso ter perdido algum fato importante que tornaria isso difícil ou impossível de implementar. Também pode não ser a maneira mais eficiente de resolver o problema. Eu não sou um especialista em redes de malha.
Ter um nó raiz na rede pergunta "O que acontecerá se a raiz for desconectada? Como uma nova raiz será escolhida?".
fonte