Sobre o projeto
AlteriomPainlessMesh é um fork da biblioteca painlessMesh para construção de redes mesh auto-organizáveis em dispositivos ESP8266 e ESP32. Mantém o modelo de rede ad-hoc original — sem necessidade de controlador central ou roteador, nós identificados por IDs de chip de 32 bits, mensagens baseadas em JSON, sincronização de tempo entre nós — e adiciona pacotes estruturados voltados para implantações de IoT.
Comportamento central do mesh
- Rede ad-hoc verdadeira: qualquer conjunto de um ou mais nós se auto-organiza em um mesh; o tamanho é limitado principalmente pela heap disponível para buffers de conexão.
- Mensagens JSON para legibilidade e fácil integração com front-ends web/JavaScript; o README observa algum custo de desempenho e que mensagens binárias seriam uma contribuição possível.
- A rede usa as bibliotecas nativas do SDK ESP32/ESP8266 em vez das bibliotecas WiFi do Arduino, por questões de latência.
- Não é rede IP: as mensagens são transmitidas (broadcast) ou enviadas para um nodeId específico.
- Ressalvas documentadas: evite delay() (use TaskScheduler), cuidado com conflitos de assinatura de eventos WiFi, mantenha taxas de mensagens conservadoras e espere possível perda de mensagens sob tráfego intenso.
Extensões Alteriom
O fork adiciona pacotes tipados com serialização e conversão JSON, alinhados a um mqtt-schema (v0.7.2/v0.7.3) para integração IoT:
- SensorPackage (200): temperatura, umidade, pressão, bateria, ID do sensor, timestamp.
- StatusPackage (202): flags de status, uptime, memória livre, intensidade do WiFi, versão do firmware.
- CommandPackage (400): comandos direcionados com parâmetros JSON e IDs únicos.
- MetricsPackage (204): CPU, saúde da memória, throughput de rede, estatísticas de pacotes, latência, RSSI.
- HealthCheckPackage (605): pontuação de saúde, flags de problemas, análise de tendência de vazamento de memória, manutenção preditiva, rastreamento de falhas/reinicializações.
- MeshNodeListPackage (600), MeshTopologyPackage (601), MeshAlertPackage (602), MeshBridgePackage (603), EnhancedStatusPackage (604): inventário de nós, grafo de topologia com qualidade de link, alertas, ponte de protocolos e estatísticas detalhadas do mesh.
- Pacotes de failover de ponte (610-614): status da ponte, eleição, assumir controle, coordenação e sincronização de horário NTP.
Recursos operacionais
- Distribuição OTA por broadcast: o README afirma uma redução de aproximadamente 98% no tráfego de rede para meshes com mais de 50 nós e atualizações paralelas escalando para mais de 100 nós, habilitada por um único parâmetro.
- Ponte de status MQTT: publica status/topologia do mesh para stacks de monitoramento como Grafana, InfluxDB e Prometheus, com intervalos configuráveis.
- Failover automático de ponte: eleição baseada em RSSI (empates desfeitos por uptime, memória livre, ID do nó), detecção de ponte perdida via heartbeat, acompanhamento de canal após assumir controle, consenso distribuído e prevenção de split-brain por meio de uma eleição por vez, um intervalo de 60 s entre mudanças de função e um RSSI mínimo para candidato isolado.
- Coordenação multi-ponte: múltiplas pontes simultâneas com níveis de prioridade (1-10), funções (primária/secundária/standby), descoberta de pares e estratégias de balanceamento de carga.
- Fila de mensagens para modo offline: enfileiramento baseado em prioridade (CRITICAL/HIGH/NORMAL/LOW) com regras de despejo que protegem mensagens críticas, detecção automática de online/offline e descarga automática.
- Modo gateway compartilhado: todos os nós se conectam ao mesmo roteador e podem retransmitir para a Internet, com eleição de gateway, deduplicação e confirmação de entrega.
Validação de hardware
O README afirma que as mudanças 2.0 em failover, roteamento, acompanhamento de canal e varredura de estação foram validadas em uma bancada hardware-in-the-loop combinando ESP32, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-S3 e ESP8266 com um roteador real, com um critério de liberação de três execuções limpas consecutivas da suíte completa.
Nota sobre capacidade do ESP8266
O README descreve o ESP8266 como adequado para meshes pequenos ou como nó folha, relatando 10-13 KB de heap livre ao atuar como nó interior em um mesh de sete nós, e observa que um único pacote de 8 KB ou uma parte de OTA pode falhar ao alocar nesse nível. Ele sugere configurar o ESP8266 como folha com maxconn = 0 ou 1, e fornece os auxiliares overCapacity() e apChildren() além de uma verificação periódica de memória baixa.
Instalação e dependências
Disponível via Arduino Library Manager como "Alteriom PainlessMesh", via PlatformIO como sparck75/AlteriomPainlessMesh (o README observa que uma entrada com owner alteriom/ para na versão 1.10.0), e no npm como @alteriom/painlessmesh. As dependências incluem ArduinoJson, TaskScheduler e AsyncTCP (ESP32) ou ESPAsyncTCP (ESP8266).
Os exemplos no repositório cobrem um nó sensor básico, ponte para a Internet com detecção automática de canal, failover de ponte, gateway compartilhado, ponte MQTT e um nó sensor Alteriom usando os pacotes estruturados.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.