



Hoje com a Internet das Coisa (Iot) que é a conexão com objetos do dia-a-dia (carros, geladeiras, televisores, luzes, portões etc) fornecendo informações instantânea a todo momento e sendo comandados em qualquer lugar do mundo através da internet faz que exista uma comunicação persistente livre de falhas, porém alguns dispositivo não conseguem alcançar o sinal de Wi-Fi fornecida pelos roteadores deixando esses equipamento off line ou com uma instabilidade muito grande. Uma solução para resolver esse problema, porém não tão barata, é a instalação de mais roteadores gastando mais dinheiro com equipamento e mão de obra para gerenciar toda rede. Mas com a tecnologia Mesh podemos aproveitar os equipamentos já instalados e transformá-los em repetidor de sinal de Wi-Fi sem custos garantindo que o sinal chegue a todos os equipamentos Ao criar uma rede Mesh, nós podemos aproveitar os módulos ESP8266, Esp32 ou esp-01 que já estão controlando equipamentos e atribuir mais uma função que é a ponte para fornecer sinais Wi-Fi para aqueles dispositivos que estão fora do alcance do roteador central.


O desenvolvedor da Biblioteca utilizada para criar a Rede Mesh painlessMesh.h facilitou muito a vida do programador, não sendo preciso se preocupar com a estrutura ou quebra de nó que possa acontecer ou no gerenciamento da rede, tudo ocorre de forma automática. A rede é uma rede Ad-Hoc que não é necessário o gerenciamento de novos dispositivos, a entrada de um novo dispositivo ou o desligamento ocorre de forma automática, se auto organizando sem aviso ou sobre salto ao administrador.
No nossos testes a melhor solução foi instalar a biblioteca painlessMesh através do GitLab, lá encontramos a biblioteca mais atualizada e estável.
A biblioteca instalada vai requerer a instalação de forma automática de outras dependências, assim a IDE Arduino vai solicitar autorização para que isso ocorra. Autorize essa instalação.
Caso não apareça essa solicitação será necessário instalar as seguintes bibliotecas:
#define MESH_PREFIX "whateverYouLike" #define MESH_PASSWORD "somethingSneaky"
// este é um exemplo simples que usa a biblioteca PainlessMesh
#include "painlessMesh.h"
#define MESH_PREFIX "Nome_da_sua_rede" // aqui coloque o nome da sua rede
#define MESH_PASSWORD "Senha" // Senha da sua rede Wi-Fi
#define MESH_PORT 5555
Scheduler userScheduler;
painlessMesh mesh;
void sendMessage() ;
Task taskSendMessage( TASK_SECOND * 1 , TASK_FOREVER, &sendMessage );
void sendMessage() {
String msg = "Hello from node ";
msg += mesh.getNodeId();
mesh.sendBroadcast( msg );
taskSendMessage.setInterval( random( TASK_SECOND * 1, TASK_SECOND * 5 ));
}
void receivedCallback( uint32_t from, String &msg ) {
Serial.printf("startHere: Received from %u msg=%s\n", from, msg.c_str());
}
void newConnectionCallback(uint32_t nodeId) {
Serial.printf("--> startHere: New Connection, nodeId = %u\n", nodeId);
}
void changedConnectionCallback() {
Serial.printf("Changed connections\n");
}
void nodeTimeAdjustedCallback(int32_t offset) {
Serial.printf("Adjusted time %u. Offset = %d\n", mesh.getNodeTime(),offset);
}
void setup() {
Serial.begin(115200);
//mesh.setDebugMsgTypes( ERROR | MESH_STATUS | CONNECTION | SYNC | COMMUNICATION | GENERAL | MSG_TYPES | REMOTE );
mesh.setDebugMsgTypes( ERROR | STARTUP );
mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT );
mesh.onReceive(&receivedCallback);
mesh.onNewConnection(&newConnectionCallback);
mesh.onChangedConnections(&changedConnectionCallback);
mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
userScheduler.addTask( taskSendMessage );
taskSendMessage.enable();
}
void loop() {
mesh.update();
}
Uma boa solução para atualizar os Esp’s e aproveitando que os dispositivos estão ligados em rede e também pela quantidade de dispositivos é a implementação de atualização via OTA (Wi-Fi). Nesse artigo explico o que é atualização OTA, requisitos etc. link: https://blog.eletrogate.com/atualizando-o-esp8266-via-ota-wi-fi/ Aqui um exemplo de sketch com a rede Mesh e ota Juntos com suporte OTA que pode ser atualizado remotamente.
#include "painlessMesh.h"
#define MESH_PREFIX "nome_da_sua_rede_wifi" // Troque para o nome da sua rede
#define MESH_PASSWORD "Senha_Wifi" // coloque a senha da sua rede
#define MESH_PORT 5555
Scheduler userScheduler;
painlessMesh mesh;
void sendMessage(); /
Task taskSendMessage(TASK_SECOND * 1, TASK_FOREVER, &sendMessage);
void sendMessage() {
String msg = "Hello from node ";
msg += mesh.getNodeId();
mesh.sendBroadcast(msg);
taskSendMessage.setInterval(random(TASK_SECOND * 1, TASK_SECOND * 5));
}
// Needed for painless library
void receivedCallback(uint32_t from, String &msg) {
Serial.printf("startHere: Received from %u msg=%s\n", from, msg.c_str());
}
void newConnectionCallback(uint32_t nodeId) {
Serial.printf("--> startHere: New Connection, nodeId = %u\n", nodeId);
}
void changedConnectionCallback() { Serial.printf("Changed connections\n"); }
void nodeTimeAdjustedCallback(int32_t offset) {
Serial.printf("Adjusted time %u. Offset = %d\n", mesh.getNodeTime(), offset);
}
void setup() {
Serial.begin(115200);
// mesh.setDebugMsgTypes( ERROR | MESH_STATUS | CONNECTION | SYNC |
// COMMUNICATION | GENERAL | MSG_TYPES | REMOTE ); // all types on
mesh.setDebugMsgTypes(
ERROR | STARTUP |
DEBUG); // set before init() so that you can see startup messages
mesh.init(MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT);
mesh.onReceive(&receivedCallback);
mesh.onNewConnection(&newConnectionCallback);W
mesh.onChangedConnections(&changedConnectionCallback);
mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
mesh.initOTAReceive("otareceiver");
userScheduler.addTask(taskSendMessage);
taskSendMessage.enable();
}
void loop() {
mesh.update();
} Caso alguns dispositivos não conecte com a rede verifique se o nome SSID e senha foram colocado corretamente;
Faça uma varredura no aplicativo de celular Wifi Analyzer e você verá que toda a rede Mesh compartilha o mesmo canal. A discrepância de canais como roteador entre os Esp impede a troca de dados até que os Esp troquem de canal, isso ocorre de forma automática.
Assim, no intuito de evitar queda da rede e demora nas transmissões dos dados, o usuário deve configurar no roteador para que "NÃO" ocorra a mudança de canal de Wi-Fi de forma automática.

Em testes realizados o tempo para criação da rede Mesh em geral é menor que um minuto. A latência entre salto é de 10 a 30 milissegundos e o tempo dessa latência está diretamente relacionada a quantidade de saltos que existem dentro da rede Mesh. Otimize ao máximo a quantidade de mensagens transmitida/recebidas lembrando que nosso módulos Esp são bem limitados tanto no processamento como na memória assim evitamos quebras das mensagens e da rede. A rede Mesh tem a finalidade na persistência de comunicação, assim não servindo para grande tráfego de informações e velocidade de dados.
|
Saiba como criar sua rede Mesh com o Esp-8266. Muitas vezes algum dispositivo está fora do alcance do Roteador, como resolver? Clique aqui
Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200