Ajuda com código para comunicação LoRA p2p E32-915T30D, Arduino e SoftwareSerial.h

Boa tarde.

Tenho um código para comunicação ponto a ponto utilizando o módulo nrf24L01 de 2.4GHz (em anexo).

Funciona direitinho. É só pra enviar o estado de um botão e no receptor mudar o estado de uma saída.

O módulo em questão usa uma biblioteca específica RF24.h e sua comunicação com o Arduino Uno é via protocolo SPI.

Estou tentando adaptar o mesmo código só que para usar o módulo LoRa E32-915T30D. Este módulo usa a biblioteca SoftwareSerial.h e sua comunicação com o Arduino Uno é via serial.

Como pode-se ver no código estou usando uma estrutura chamada estruturaDadosRF que envio para o receptor via o comando:

radio.write(&dadosRF, sizeof(tipoDadosRF)); //radio é o objeto criado

Tentando adaptar para a biblioteca SoftwareSerial eu tentei enviar a mesma estrutura através do comando:

radio.print(dadosRF); 

Só que o compilador dá o erro:

no matching function for call to 'SoftwareSerial::print(tipoDadosRF&)'

Tentei tb desmanchar a estrutura e enviar as variáveis assim separadamente:

radio.print(ligando, boiaCaixa);

Assim compilou. Só que minha dúvida é de como pegar esses valores no receptor usando o comando radio.read() e guardá-los separadamente em duas variáveis.

Agradeço a ajuda dos Mestres!

Exibições: 707

Anexos

Responder esta

Respostas a este tópico

Olá, Rodrigo!

   Em primeiro lugar, embora a documentação das bibliotecas do Arduino seja muito ruim, eu acho que Serial.print() só aceita strings e dados numéricos. Tua estrutura não é uma coisa nem outra.

   Neste caso, o melhor seria usar Serial.write() que envia bytes "crus" pela seial.

   Claro que, desta forma, você não vai poder mandar diretamente a tua estrutura, mas há um remédio.

   Você pode enviar separadamente dadosRF.ligandodadosRF.boiaCaixa.

   Pouco uso as seriais do Arduino, então não sei se será necessário "partir" em bytes os valores inteiros de dadosRF.ligandodadosRF.boiaCaixa antes de passá-los à função Serial.write().

   Antes que você objete que dadosRF.ligando é booleano e não inteiro, informo que, para o C, booleano é inteiro.

   Há que se fazer testes.

   Do outro lado você lerá os bytes e talvez tenha que "montar" os dados originais. Mas, se for necessário, é bem simples, acredito que não terá dificuldade em fazê-lo.

   Qualquer coisa, voltamos a conversar por aqui.

Bom trabalho.

D.T. Ribeiro.

Obrigado!

Boa tarde.

Descobri a biblioteca EByte_LoRa_E32_library.

https://www.mischianti.org/category/my-libraries/lora-e32-devices/

Nela tem vários exemplos, inclusive um que se chama sendReceiveFixedMessageStructure.

Vou estudar o exemplo e posto os resultados aqui.

Obrigado.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço