ESP32

ESP32 LoRa tutorial simples

esp32 lora

Os rádios subgiga são incríveis – em particular, o LoRa (e mais intrinsecamente, o ESP32 LoRA) . A grande questão é que tudo tem contrapartida; quanto maior a banda, maior a velocidade de transmissão, mas menor alcance. Quanto menor a banda, menor velocidade de transmissão, mas maior alcance.

Um rádio LoRa rodando em 915MHz consegue transferir pouco mais de 37kbps. Não é pouco para mensagem, porém para arquivos binários é algo impactante. Mas ainda que venhamos a utilizar apenas mensagens, devemos ter determinados cuidados para evitar que sobrecarreguemos a banda de transmissão, não apenas do transmissor para o receptor, mas cuidando também para não sobrecarregar o receptor, ainda mais se ele for um concentrador de rádios.

AFMultiRadio Black Edition
Concentrador de rádios LoRa – AFMultiRadio

Crie um protocolo de mensagens

Lhe parece bastante intuitivo uma mensagem como essa abaixo?

Parece um ótimo protocolo. Fazendo split em “,” já temos os campos separados. Depois, só validar os campos e fazer split no sinal “=”. Daí o segundo campo é o valor, a ser convertido para inteiro. Mas vamos às considerações;

de todos esses 43 Bytes, apenas 12 serão utilizados. E pior, poderiam ser apenas 8 (desconsiderando algo importante que falta nessa mensagem).

Usar mensagens nesse formato é péssimo para a transmissão e para o processamento. Se chegar uma mensagem de ruído de outro dispositivo que não pertença à sua rede LoRa, essa mensagem passará por processamento desnecessariamente.

Mais uma coisa importantíssima; esse formato é ótimo para leitura humana, mas quem vai “ver” a mensagem é uma microcontroladora, nada disso é necessário. Depois de recebido, se for necessário exibir para o usuário, então adiciona-se o respectivo texto, fora da transmissão do ESP32 LoRa.

Pode parecer exagero pensando 1 para 1, mas em indústria, agro-negócio, condomínios, muito provavelmente diversos dispositivos poderão estar se comunicando com um concentrador. E pode ser pior.

Imagine se toda a informação do seu dispositivo for enviada para um broker MQTT na nuvem, onde clientes do país inteiro concentram seus dados em um sistema de gerenciamento. Por isso, “menos é mais”. Fui claro?

Vejamos uma mensagem em um formato mais adequado:

Os valores sempre serão posicionais, portanto não há razão para usar identificadores.

Parece bem pequena a mensagem, mas o ideal é mandar os bytes. Desse modo (como mostrado anteriormente), ainda consome-se mais recursos do que o necessário. Então o formato melhorado seria:

“Hummm, aumentou de tamanho!” – Você pode ter pensado.
Se mandarmos em formato literal, cada caractere será 1 Byte, totalizando 13 Bytes. Mandando em Bytes, cada Byte é, bem; 1 Byte.

Não se incomode em ver o formato em hexa. Você não precisará calcular nada disso, o trabalho será todo do programa, como pode ser visto no código mais adiante.

Para finalizar, ainda será necessário garantir a origem da mensagem minimamente. Não podemos ler qualquer coisa que chegar e considerar verdadeira, por isso o ideal é colocar um identificador de início e um de fim de mensagem. Explico.

Voltando ao formato literal, podemos fazer interpretação humana, por isso o fiz na mensagem acima. Repare que ela inicia com “$”. Isso é, se a mensagem que chegar não tiver esse primeiro Byte, descarta-se imediatamente.

Se a mensagem que chegar iniciar com “$”, validamos o último Byte. Se a mensagem não terminar com “\n”, descarta-se a mensagem. Mas antes de tudo, temos que ler o buffer de qualquer maneira, então a primeira validação deveria ser o tamanho da mensagem.

Agora sim, temos um protocolo definido! Vejamos:
0 – início da mensagem
1 – temperatura
2 – umidade
3 – relay 1
4 – relay 2
5, 6, 7 e 8 – leitura do AD, que vai de 0 a 1023, portanto 4 Bytes.
9 – terminador

Desse modo, nossa mensagem final seria parecido com:

Agora podemos escrever nosso código.

Código para comunicação com ESP32 LoRa

As bibliotecas estão disponíveis no repositório do Arduino, portanto não há o que se falar a respeito da instalação. Já em relação à configuração, um pequeno ajuste deve ser feito para funcionar adequadamente o rádio LoRa. Siga esse tutorial, suba o sketch. Tendo funcionado, apenas substitua o código de teste pelo código a seguir:

Repare que no código adicionei comentários nos tratamentos feitos na função loop().

Onde comprar o ESP32 LoRa Paxcounter ?

Esse lindíssimo ESP32 LoRa está disponível na UsinaInfo, e você pode conferir preço e disponibilidade através desse link. Não perca a oportunidade de ter um TTGO, você vai amar!

Sender LoRa

Para fazer os testes, utilizei o AFMultiRadio Black Edition da AFEletronica, desse outro artigo. Essa é outra placa indescritível, a qualidade é espetacular e é a primeira no mundo (pelo menos de todas as pesquisas que fiz) que possui 3 rádios LoRa 1276 e também a primeira do mundo que se comunica com os rádios diretamente pelo barramento SPI. Se quiser dar uma conferida na loja, clique nesse link.