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.