Site menu ESP-NOW e HaLow: será que agora vai?

ESP-NOW e HaLow: será que agora vai?

Há alguns anos atrás, investi um bom meio ano num projeto que envolvia Zigbee, era algo que poderia ter virado uma startup. Porém esbarramos em alguns problemas com o chip escolhido e com a pilha Zigbee que rodava nele. Teríamos de arriscar uma pilha nova, mas ninguém queria gastar (de novo) milhares de dólares na versão do compilador IAR que compilava essa pilha. Trocar de chip era difícil pois a alternativa era bem mais cara (a premissa era que o hardware fosse ultra-barato, semi-descartável) e o parceiro já tinha um investimento considerável no chip antigo, que para o nicho dele funcionava bem. Aí faltou ânimo para "pivotar" uma solução alternativa, pois cada um tinha seu day job para tocar.

A sensação que ficou é que o Zigbee é muito mais complicado do que deveria ser. E ainda por cima não entrega muitas promessas, em particular a de interoperabilidade. Tecnicamente é um padrão aberto, porém na prática as pilhas disponíveis são proprietárias e exigem um compilador caríssimo — duas coisas altamente anacrônicas. O Zigbee é baseado num protocolo de enlace padrão e aberto, o IEEE 802.15.4, mas boa sorte tentando encontrar um chip que dê acesso direto ao enlace.

É pena, porque o Zigbee e/ou 802.15.4 poderiam reinar incontestes na seara do IoT. Meu sistema de alarme (AMT 8000 da Intelbras) é sem fio e é baseado em 802.15.4 na banda de 900Mhz, e nesse contexto ele funciona muito bem. (Ajuda o fato de ser 900MHz; o alcance seria muito pior se fosse 2.4GHz.) Adoraria usar essa mesma tecnologia nas minhas idIoTices, mas ela não está disponível para amadores.

O Bluetooth padece de problemas semelhantes, embora tenha melhorado muito na versão Low Energy. Para IoT, existe o Bluetooth Mesh, enquanto padrão; mas cadê a implementação? Cadê os "breakouts" baratinhos para Arduino, para a galera maker experimentar e usar?

Isso, e a ubiquidade da Internet WiFi, fazem com que WiFi acabe sendo largamente utilizado em IoT. É tecnicamente inadequado para IoT. Mas funciona, as pessoas entendem como ele funciona, é um padrão aberto (exceto pelo firmware do modem, mas ninguém além do Richard Stallman se importa com isso), e tem poucos problemas de interoperabilidade.

WiFi não é ideal para IoT pelos seguintes motivos, entre outros:

Quando os gatos se ausentam, os ratos fazem a festa.

ESP-NOW

Comecei a brincar com o protocolo ESP-NOW, da Espressif. Esse é um "rato" mesmo, no sentido pejorativo da palavra. Proprietário, simples até demais, só funciona nos chips da Espressif, documentação não é 100%, a parte de criptografia é meia-boca. Mas tem uma vantagem decisiva: está prontamente disponível para uso. Quem tem um ESP8266 ou ESP32, tem ESP-NOW.

A ideia do ESP-NOW é permitir comunicação direta peer-to-peer sem a necessidade de um access point, com as seguintes vantagens frente ao WiFi convencional:

O ESP-NOW transmite pacotes de até 250 octetos. O endereço de cada peer é o MAC; não há suporte a TCP/IP sobre ESP-NOW. Parece uma comunicação UDP, mas o ESP-NOW é na verdade um protocolo confirmado, embora a janela de confirmação seja de no máximo 25ms. Se uma resiliência mais longa for necessária, tem de ser implementada pela aplicação. (Seria interessante considerar o uso do protocolo MQTT-SN.)

É permitido usar ESP-NOW e WiFi convencional ao mesmo tempo, que seria o caso e.g. de um concentrador que intermedia a comunicação entre sensores e a nuvem. É preciso apenas que ambos usem o mesmo canal, pois diferente do WiFi, o ESP-NOW opera num canal fixo. Se o WiFi associar a um access point cujo canal é diferente do utilizado na sua rede ESP-NOW, haverá problemas "misteriosos" de comunicação.

Para enviar um pacote de dados para alguém, o recipiente deve ser registrado como peer. Há um limite de 20 peers sem criptografia, ou 7 a 17 com criptografia (o padrão é 7). Isto significa que cada dispositivo só pode enviar dados para um punhado de outros, ao mesmo tempo. Pode-se substituir recipientes no registro, então não há limite de recipientes se o envio de dados for escalonado.

Já para receber um pacote de dados, e se não fizer uso de criptografia, não há necessidade de registro. Num sistema simples onde dispositivos periféricos só enviam e um concentrador só recebe, é possível associar inúmeros periféricos a um único concentrador.

Se o sistema exige comunicação bidirecional, então infelizmente ambos os lados têm de registrar sua contraparte como peer, pelo menos durante o tempo de comunicação. Se a comunicação for unidirecional pela maior parte do tempo e bidirecional apenas esporadicamente, o concentrador poderia registrar o periférico apenas quando necessário, e assim continuar supervisionando mais de 20 periféricos mesmo neste caso.

Existe suporte a broadcast, ou seja, envio ao endereço MAC ff:ff:ff:ff:ff:ff, que é recebido por todos os dispositivos ESP-NOW da área, desde que no mesmo canal. Pode ser útil, entre outras situações, para o pareamento inicial entre periférico ao concentrador, onde um não conhece a priori o endereço do outro.

A criptografia opcional embutida do ESP-NOW é meio esquisita. Há uma senha geral (PMK) e outra para cada contraparte (LMK). A senha PMK só é usada para encriptar a LMK (ela não é análoga à senha de uma rede WiFi) então é possível que alguns peers comuniquem-se com criptografia e outros às claras, ao mesmo tempo. Para que a comunicação seja encriptada entre dois peers, ambos têm de registrar a contraparte com a mesma senha LMK, mesmo que a comunicação seja unidirecional.

Isto obsta que um concentrador possa estar associado a inúmeros periféricos usando a criptografia embutida. Se é desejável manter essa possibilidade, é melhor não usar a criptografia do ESP-NOW, e implementar a sua própria na camada de aplicação (o que um produto "sério" teria de fazer de qualquer forma, para implementar pareamento simples e seguro, etc.).

Todo o conhecimento que consegui reunir até agora a respeito do ESP-NOW está concentrado neste módulo que desenvolvi para um caso de uso local: uma balança de botijão GLP. Uma vez que a casinha do gás fica num lugar sem cobertura WiFi, a ideia é a balança em si enviar o peso via ESP-NOW uma vez por dia (o que permitiria usar bateria, ou painel solar, para evitar trazer energia para perto do gás). O receptor dessa informação é outro ESP32 que repassa a informação via MQTT convencional.

Óbvio que é uma solução levemente barroca (seria mais fácil puxar um cabo de 4 vias para levar energia e comunicação serial), mas aí não teria graça... A ideia é ganhar experiência neste caso de uso, para ter a carta na manga quando (ou se) ela for imprescindível.

O ESP-NOW tem potencial de substituir o Zigbee em alguns casos de uso. Não por si mesmo — por ser simples até demais, o protocolo de aplicação tem de trabalhar mais. Mas sua simplicidade deixa todas as opções em aberto. Por exemplo, nada impede de implementar uma rede mesh usando o ESP-NOW — já existe um e outro projeto no GitHub, então nem é preciso começar do zero.

WiFi 802.11ah "HaLow"

O "HaLow" é um padrão de WiFi para a banda de 900MHz. Velocidade menor, alcance muito maior, mais alguns ajustes para economizar energia e suportar a conexão de um número maior de dispositivos.

A propaganda é que o HaLow seria econômico o suficiente para uso em dispositivos movidos a pilha (só acredito vendo). Além da grande penetração em ambientes fechados, outro selling point do HaLow é o longo alcance (até 3km a 1Mbps), suficiente para cobrir grandes propriedades de um jeito que só se considerava possível usando LoRa ou outras tecnologias exóticas.

A velocidade pode ser configurada de 78Mbps até 150kbps, lembrando que dobrar o alcance depende de um ganho de 6dB, que implica em dividir a velocidade por 4. Diferentes velocidades podem conviver em diferentes sub-bandas, então em tese o HaLow pode atender sozinho quase todas as necessidades imagináveis de comunicação de rede.

Sou meio cético com essas tecnologias que prometem demais (alguém lembra do WiMax?) mas é uma proposta tentadora. As vantagens do WiFi e do Zigbee num único pacote!

O padrão já existe desde 2017, mas só ouvi falar dele há uns três meses, porque finalmente começaram a aparecer produtos HaLow na praça. A maioria trata-se de repetidores de longa distância, que não precisam de antena direcional. Há access points e interfaces de rede HaLow, porém raros e caros.

O que falta para o negócio estourar é a Espressif lançar um ESP32-900 ou algo do gênero :)