Enviar "Hello, World" entre módulos LoRaMESH

Olá!

Sou novo no mundo LoRa e em fóruns, e gostaria de sua ajuda. Estou com dois módulos LoRaMESH adquiridos recentemente para construção de um projeto simples, no qual dois ESP32 trocam mensagens entre si. Estava procurando algum código simples que enviasse mensagens em string entre um módulo e outro, mas não encontrei nenhum exemplo assim, apenas de controle dos GPIOs do módulo. Estava me baseando pela biblioteca https://github.com/Radioenge/LoRaMESH/tree/master.

Alguém poderia mandar um código básico que faça a leitura e o envio de mensagens em string para um outro end device (ESP32), e utilizando a biblioteca referenciada acima (se possível)? Estou um pouco confuso.

No manual é falado sobre duas interfaces UART, a Transparente e de Comandos. Para enviar a mensagem como “Hello, World” para outro ESP32 na rede, qual delas eu preciso utilizar? Preciso usar as duas? Uma para configurar o módulo e outra para envio e recebimento de mensagens? Ou apenas uma é suficiente?

Samuel,
iniciei meus testes com os módulos LoraMesh nesta semana e tive as mesmas dúvidas que voce. Intuitivamente, a melhor e mais fácil implementação do “Hello, World” seria através do uso da porta serial transparente: String in em um rádio, mesmo string out no outro, certo? Mas não é bem assim. A interface serial transparente não é tão transprente como parece. Após ler todas as mensages neste tópico, montei dois módulos aqui no meu lab e verifiquei o seguinte:

  • Uma vez que a configuração dos rádios for programada pela interface serial de comandos (DeviceID, baud rate, parâmetros do LoRa como modulação, banda, etc.), esta interface não precisa mais ser conectada a nada. A programação persiste após power cycles.

  • Injetando um string qualquer (respeitando o tamanho máximo do string definido pela combinação dos parametros de modulação Lora) na interface transparente do módulo designado como Master (Id=0), nada aparece no módulo designado como slave. Isto porque é necessário adicionar Dois bytes no início do string que determinam o endereço do slave!!!

  • Existe a função broadcast mas também é necessário adicionar os 2 bytes do endereço de Broadcast (0x07FF) no inicio do string para que isto aconteça.

  • Após a inserção do preambulo de 2 bytes (endereço do slave) à string original , a transmissão acontece normalmente e a string original aparece na porta serial transparente do slave e nenhuma outra ação ou handshake é requerida por nenhuma das partes. Contudo, o modulo Slave não retirou os 2 bytes do preambulo e a string original está 2 bytes mais longa.

  • Quando injetamos um string na interface transparente do módulo Slave (sem o preambulo de 2 bytes), o string aparece na interface transparente do Master perfeitamente, mas está prefixada de 2 bytes, que é o endereço do rádio Slave.

  • Não achei uma forma de tornar a interface serial transparente realmente transparente, mas posso ter ignorado algum parâmetro.

Em resumo, deve-se editar qualquer string a ser transmitida e recebida pelo Master para se obter a string original. Salvo algum outro setting que nao programei por não ter achado um comando adequado.

Minha aplicação original seria utilizar a interface transparente como simples transporte para pacotes modbus, que é um protocolo multi-point. Mas como o LoraMesh está implementado como Point-to-point, a interface transparente não resolve meu problema a menos que eu adicione um ESPxxx entre o Rádio LoraMesh Slave e meu dispositivo ModBus, e outro ESPxxx entre o Rádio LoraMesh Master e meu Gateway, só para cuidar destes 2 bytes de endereço.

1 Curtida

Olá @rcesar,
Para a comunicação entre os módulos LoRaMESH é sim necessário o envio dos 2 bytes de identificação. Sem este identificador o mestre não consegue reconhecer a origem do pacote, e da mesma forma não conseguiria definir um destino para o envio de mensagens.
Adicionar um ESP parece ser mesmo a solução mais simples pro problema que vc descreveu, mas caso você prefira usar um arduino UNO, nós produzimos um shield próprio pra facilitar a utilização dele com o módulo LoRaMESH:

Oi @Vinicius-Radioenge,
Obrigado por confirmar minhas descobertas. Escolhi escrever minha resposta anterior de forma longa justamente porque não achei nada que descrevesse o comportamento da serial Transparente ou também esclarecesse que a programação dos parâmetros LoRa só é necessária uma única vez, já que estes parâmetros ficam armazenados em memória não volátil. Os tutoriais ea documentação não falam nada a este respeito. Acho que muitas pessoas aqui no fórum tem estas mesmas dúvidas.

Gostaria também de pedir que vocês olhasem com carinho a possibilidade de implementar um flag no master e slave que indicasse modo BROADCAST para a interface transparente. isto eliminaria a necessidade de prefixar as mensagens com o endereço de destino e tornaria a interface realmente transparente. Em muitas aplicações,o master não precisa saber de onde veio a mensagem, bastando que a mesma seja re-transmitida na intregra, sem modificações, na interface serial. É responsabilidade do arquiteto do sistema inserir o ID do slave dentro do payload transmitido, se ouver esta necessidade.

Com o mercado IoT atingindo maturidade, existe uma pressão muito grande para que se baixe os custos de sensores, atuadores, gateways, etc. e quanto menos componentes o produto final tiver, melhor para todo mundo, já que não somente o custo direto cai, mas o cuto de R&D, suporte e logística (Supply chain issues) também cai. Daí a impraticalidade de se adicionar um microcontrolador extra só para cuidar de algo que poderia ser facilmente resolvido com uma mudança (trivial?) no firmware.

O módulo Loramesh da RadioEnge foi uma sacada muito boa e o potencial de vendas é enorme. Especialmente em aplicações que realmente necessitem de uma interface transparente, como se o LoraMesh fosse apenas um cabo serial Null-Modem de 2.5 Km de comprimento. :wink:

Trabalho em uma empresa aqui nos Estados Unidos e gostaria muito de utilizar os seus módulos ( incuindo o LoraWan também) para o mercado Sul Americano e, se um dia o problema da tarifa de importação for resolvida (ou o louco do Trump bater as botas), poderia tamém utillizar-los para o meu mercado local.

Obrigado novamente,

Bem interessante a sua sugestão, Ruy.
Vamos analisar a viabilidade da implementação deste novo modo de broadcast pra a próxima atualização.
Quanto a parte da documentação, agradecemos o seu comentário, este é justamente o intuito de termos criado este fórum, pra que a própria comunidade contribua com o esclarecimento de dúvidas e com a construção de uma documentação cada vez mais completa.

1 Curtida