17 de ago. de 2026

Esp Now Binary Services (ENBS) - Behind overhead

Por que parei de lutar contra o Wi-Fi e criei o ENBS para ESP32

Por Marcio Denadai • Foco em Performance Raiz

Sendo bem sincero: o Wi-Fi padrão é um vilão silencioso para quem trabalha com sensores a bateria. Você projeta tudo certo, mas o handshake consome milissegundos preciosos que detonam sua autonomia. Quando se usa pilha TCP/IP sob WiFi, o consumo de bateira aumenta, em dispositivos de monitoramento isolado, com bateria, requerem maior atenção, para não ficar com aquele sistema indisponível em função das condições de operação. Fora o envio de bytes desnecessários que uma carga de dados em JSON consome e vive "engasgando" com o overhead, então que decidi implementar a Esp Now Binary Services (ENBS).

O fim da conversa fiada do JSON

Enviar {"temp": 25.5} parece inofensivo, mas são 14 bytes, converter isso para texto e depois fazer a decodificação de texto para dados numéricos do outro lado é um desperdício de CPU. E se pudessemos enviar isso com no máximo 6 ou 8 bytes? Teriamos no mínimo, uma economia de 41% na banda de dados. No ENBS, usamos estruturas packed (empacotadas). O dado sai da memória do sensor e entra na memória do receptor exatamente como ele é. Protocolos modernos são bons, eu os uso, mas quando se trata de economia de banda passante de dados, que dependendo o local principalmente se for isolado, um bit economizado, vale muito!

// Como enviamos dados sem perder tempo:
ClimaPacket cp(SENSOR_ID, 25.5, 60.0);
rede.send(&cp, sizeof(cp)); // Eficiência de rádio pura

Multicore de verdade (Sem travamentos)

Outra dor de cabeça comum é quando o rádio trava a interface visual. No ENBS, a recepção acontece em uma Task do FreeRTOS. Se você tem um display OLED ou processamento pesado, isso roda no Core 1, enquanto o Core 0 fica "vigiando" o rádio. É a forma como o ESP32 foi feito para ser usado, mas que pouca gente aproveita. Isto é ótimo para deixar um núcleo exclusivo para tratar as prioridades conforme o previsto, principalmente em sistemas onde o tempo de atraso pode ser suficiente para causar um defeito ou erro que comprometa o sistema monitorado.

// Receptor não-bloqueante
if (rede.receive(msg, portMAX_DELAY)) {
    // Processa sem parar o resto do sistema
    rede.updateInventory(msg);
}

Código aberto para quem cria, comercial para quem vende

Decidi manter a biblioteca sob GPLv3. Se você está aprendendo ou fazendo algo para a comunidade, o código está lá, aberto e livre. Caso você se interesse em aplicar em projetos comerciais, a DUAL LICENCE, permite que a sua empresa use a biblioteca sem problemas de precisar abrir o código fonte total do seu projeto, que é previsto pela GPLv3. Caso precise de uma licensa comercial, entre em contato para realizarmos um contrato de licensa de uso sem problemas de royaltes.

Para quem quer usar em produtos fechados, a licença comercial garante que o projeto continue evoluindo sem depender apenas de "cafés" esporádicos.

Para exemplos de uso e mais detalhes acesse o código fonte do projeto, no Git Hub, ou me envie um e-mail: marcio.denadai@gmail.com.

Ver Projeto no GitHub
© 2026 Marcio Denadai. ESP-NOW e ESP32 são marcas da Espressif Systems.

Nenhum comentário:

Postar um comentário