LoRa da Ebyte: Aprenda tudo sobre esses módulos

Os LoRa da Ebyte são ótimos para quem busca uma introdução simplificada a modulação LoRa ou pretende ter um hardware mais simples para ser usado em comunicação ponto a ponto (P2P).

1 O que é LoRa?

LoRa um acrônimo das palavras Long Range e se trata de uma modulação de rede área ampla de baixa potência que deriva da tecnologia chip spread spectrum (CSS). 

Por se tratar de uma transmissão de baixo consumo e com alta imunidade a ruído se tornando ideal para aplicações de IoT, porém para se tornar ainda mais ideal para IoT, foi criado dois protocolos que melhoram a comunicação ao ponto de ter inúmeros dispositivos conectados e cada um com um endereço único na rede.

1.1 LoRaWAN

Dessas duas variações a mais conhecida e mais usada em IoT é o LoRaWAN que basicamente atua com inúmeros dispositivos que se comunicam com um gateway e o gateway se comunica com um servidor que comumente é usado a internet.

1.2 LoRa Mesh

O outro protocolo LoRa não muito conhecido, mas também utilizado é o LoRa Mesh que atua em uma estrutura de malha onde cada dispositivo consegue atuar como um repetidor de qualquer dispositivo dentro da própria rede e todos os devices é gerido por um único master.

2 Por que usar LoRa da Ebyte ao invés do chip SX1276?

Existem alguns chips que fazem a comunicação do LoRa, o mais comum é o SX12xx, porém sua comunicação é SPI e a depender do nível do seu nível de conhecimento, fazer uma integração com essa interface pode ser trabalhosa demais para o tipo de projeto que você esteja fazendo. 

No caso do uso do Arduino IDE esse processo fica muito fácil, basta baixar uma biblioteca para o SX12xx e usar, porém você terá que fazer algumas configurações manuais no chip que exigirá certo conhecimento em interpretação de datasheet. 

Há bibliotecas que já deixam algumas configurações disponíveis para uso, porém se por algum acaso precisar usar um LoRa em outros microcontroladores ou até microprocessadores, haverá um trabalho extenso para montar uma comunicação estável via SPI com o SX12xx. 

No caso dos módulos da Ebyte eles atuam como um facilitador, facilitando todo o trabalho que você teria para estabelecer uma comunicação, reduzindo o grau de dificuldade de SPI para UART. 

LoRa E32915T30D

E com apenas 3 pinos, dois de entrada e um de saída é possível definir modos de operação como se fosse ligar um LED por exemplo. Por isso, é extremamente simples usar esse módulo e por se comportar como uma interface serial, é possível utilizar o módulo sem biblioteca inclusive.

Por outro lado, você jamais terá a mesma liberdade que usar diretamente o chip SX12xx e isso vale para praticamente qualquer outro módulo LoRa do mercado. 

3 Como é a comunicação desse módulo?

Toda comunicação é feita dentro de um identificador, algo muito similar ao LoRa Mesh da Radioenge, porém você só define uma vez no registrador e isso fica salvo de forma permanente ou volátil. Podendo realizar comunicações com módulos de mesmo ID ou receber de um ID especifico ou enviar para um outro ID.

Caso o identificador seja diferente do que está salvo no registrador, o módulo simplesmente ignora a mensagem, uma operação muito simples que no caso do uso direto com o SX12xx teria que ser estruturado do zero.

Comunicação P2P LoRa da Ebyte

Esses módulos são destinados a comunicação ponto a ponto (P2P), ou seja, cada dispositivo consegue atuar de forma independente sem a necessidade de um dispositivo central que gerencie essas comunicações.

Além disso toda a comunicação é criptografada, o que é de se esperar de qualquer módulo LoRa do mercado, é uma característica comum desse tipo de produto.

4 Características dos módulos de comunicação UART da Ebyte

A Ebyte tem uma serie de módulos que trabalham com a comunicação UART e todos eles seguem uma regra de operação, porém abordaremos especificamente os módulos de rádio, neste caso o LoRa, você verá que tudo aqui irá valer para todos os modelos.

Não será possível abordar tecnicamente cada modelo, pois todos eles são muito parecidos, mudando apenas alguns parâmetros como faixa de frequência e canal, por isso toda a abordagem será o mais generalista possível, porém será usado alguns modelos mais populares para ajudar entender melhor.

4. 1 Ebyte LoRa Pinout

Antes de mais nada, precisamos ter um bom entendimento da pinagem desses módulos LoRa da Ebyte para que não haja confusão no uso.

Pinout LoRa da Ebyte

4.1.1 Auxiliar

O auxiliar ou AUX é um pino de saída que da um feedback para o microcontrolador, através dele que é possível saber se o módulo está inicializando, se tem buffer de recebimento ou buffer de envio e toda vez que o AUX estiver em nível lógico baixo significa que ele está ocupado, então o microcontrolador deve aguardar a curva de subida para realizar a operação que desejar.

O sinal do AUX é sempre positiva e em caso de algum evento o sinal vai para GND, não é necessário por resistor de pull up, porém em alguns microcontroladores podem não interpretar um sinal de entrada de 3V3 como nível alto, por isso é recomendado por um pull up no TXD e no AUX do módulo.

Sugestão para adição de um resistor de 4k7 do pino AUX do LoRa da Ebyte

4.1.1.1 Inicialização

Durante o processo de inicialização, saída de um modo de operação ou reset de instruções o pino auxiliar se mantem em GND por um breve período de tempo. Na inicialização do microcontrolador é interessante consultar o AUX para ver se o módulo foi inicializado, ou simplesmente por um delay de 5ms.

Pino AUX indicando inicialização do módulo LoRa da Ebyte

4.1.1.2 Transmissão

Nesta operação o auxiliar vai simplesmente trabalhar como umas espécie de flag que vai falar quando pode enviar novos bytes (AUX = 1) ou não (AUX = 0).

Aviso de envio de bytes na serial do LoRa da Ebyte

4.1.1.3 Recebimento

Antes mesmo do módulo transmitir o valor recebido, o AUX avisa 2ms antes de transmitir na serial, essa operação é interessante para gerar interrupção no microcontrolador para parar o que estiver fazendo e ler a serial.

Aviso de envio de bytes na serial do LoRa da Ebyte

4.1.2 M0 e M1

Esses dois pinos são extremantes importantes pois através deles que é definido os modos de operação do módulo LoRa da Ebyte, são um total de quatro modos, sendo eles:

LoRa da Ebyte modo de operação

4.1.2.1 Normal M0 = 0 e M1 = 0

Neste modo o módulo LoRa fica aberto, podendo receber pacotes a qualquer momento e consegue transmitir também. O interessante é que essa configuração você pode usar em qualquer microcontrolador mesmo não havendo biblioteca, de modo que consiga usar tanto para transmitir como também para receber, apenas escrevendo e lendo a serial e sem o uso do AUX. Inclusive há um exemplo seguindo esse mesmo principio, porém usando o Maix bit e LoRa E32915T30D.

4.1.2.2 Recebendo M0 = 1 e M1 = 0

Aqui só há recebimento de dados tanto via rádio como também na serial, sendo impossível transmitir qualquer coisa, pois o RX da serial do módulo está bloqueada.

4.1.2.3 Economia de energia M0 = 0 e M1 = 1

O modo de economia de energia mantém todo o módulo em baixo consumo de modo que apenas aceite receber um preambulo que desperta o LoRa por um curto período de tempo para receber o pacote e volta a dormir..

4.1.2.4 Sleep e modo de programação M0 = 1 e M1 = 1

No modo sleep o módulo fica completamente em baixo consumo de energia com o chip LoRa desativado, apenas o microcontrolador que já é Ultra Low Power (ULP) que fica acordado e por isso é possível configurar o módulo durante esse momento. Toda a configuração neste modo ocorre com um baudrate de 9600 isso independe de qual baudrate você definiu para se comunicar com ele.

4. 2 Níveis de tensão dos módulos LoRa da Ebyte

Como o consumo de amperagem varia de módulo para módulo, não será abordado. Por outro lado, a tensão é estável em diferentes modelos, pois esses LoRa’s trabalham com 3V3 e pode ser alimentado também com até 5V5. Porém há uma indicação de alimentar com 5V, pois pode aumentar a performance, ou seja, não é garantido que vai aumentar a performance.

Essa recomendação é para evitar oscilações de tensão durante a transmissão, pois alimentar diretamente com 3V3 pode haver pequenas quedas que prejudicam o bom funcionamento do módulo. Tanto é que se o módulo estiver abaixo da tensão de 3V3 alguns parâmetros como modelo, versão, características, entre outras. Não são carregadas, quando isso ocorrer saiba que o problema é alimentação.

4.2.1 Tensão dos pinos de comunicação

Todos os pinos do módulo trabalham com 3V3 e a comunicação serial opera em níveis TTL, porém a respeito das entradas M0 e M1 não há nenhuma informação se também suportam 5V. Ao fazer um teste com Arduino nano tudo funcionou perfeitamente.

Porém essa questão é extremamente complicada, pois hora o datasheet da a entender que só pode 3V3, depois fala que níveis TTL pode queimar o módulo e por fim ainda diz que suporta níveis TTL na UART e no AUX, mas em nenhum momento fala sobre a tensão do M0 e M1.

Inclusive o datasheet recomenda o uso de pull-up externos no pino AUX e TXD para garantir que alguns microcontroladores que trabalham com 5V consigam enxergar os bit’s, pois em alguns microcontroladores o 3V3 é considerado bit 0. Caso você não saiba se seu microcontrolador enxerga o 3V3 como bit 1 faça um código de leitura digital e coloca para imprimir o valor na serial e ingente 3V3 na entrada programada e se a impressão for 1, ele enxerga.

4.3 Módulos que são LoRa e módulos que não são

A Ebyte segue um padrão em seus produtos e por isso muitos de seus produtos são idênticos e no caso dos LoRa’s também, se não prestar atenção você poderá comprar um módulo achando que é uma coisa e na verdade é outra. Dificilmente sem o datasheet você vai notar alguma diferença no uso, pois se comportará da mesma forma, são pequenos detalhes que os diferenciam.

Os módulos que tem chip AX5243 por exemplo e que são pertencentes a serie E31 não são LoRa, e sim uma modulação GFSK. Essa placa abaixo é o modelo E31433T33D e tem o dobro da potência em relação a outros módulos e pode chegar até 8km, porém o modelo E32915T30D consegue ter o mesmo alcance com a metade do consumo do modelo anterior.

4.3.1 Como identificar a modulação pelo datasheet

Ao baixar qualquer datasheet logo na primeira página é possível saber se é LoRa ou é outra coisa, se for LoRa vai aparecer que o chip é SX12xx ou o LLCC86, sendo diferente disso não é LoRa.

Como saber se os módulos da Ebyte é LoRa ou não

Caso tenha alguma dúvida se de fato é LoRa ou não, passe as páginas do datasheet até encontrar o tópico de ‘Features’, nesse tópico vem dizendo qual é a modulação e alguns casos ainda fala do alcance e ainda diz o LoRa é melhor do que o tradicional GFSK.

Comprovando se o módulo da Ebyte é LoRa ou não

4.4 Parâmetros de configuração do LoRa da Ebyte

Para configurar o módulo é necessário enviar 6 bytes de vez, contendo todas os parâmetros dos tópicos a seguir e para que tudo seja de fato gravado o módulo terá que estar em modo de programação. Além disso toda comunicação relacionada a configurações terão que ser feitas com o baudrate de 9600, mesmo que você tenha trocado para outro baudrate.

4.4.1 Head

Um dos fatores que mais gostei nesse módulos é que é possível gravar parâmetros de forma temporária (0xC0), ou seja, após a reinicialização do LoRa os parâmetros voltarão aos padrões de fabrica. Também tem como gravar de forma permanente (0xC2) de modo que as configurações fiquem retidas no módulo mesmo após a ausência de alimentação.

4.4.2 Add’s

O interessante desses módulos é que você consegue enviar para um endereço e receber de outro e limitar a comunicação, mas como ele é destinado a comunicação ponto a ponto, se for para aplicações com várias comunicações bilaterais já fica ruim.

Para múltiplas comunicações bilaterais é interessante definir o mesmo ID para todos e adicionar uma camada interna na rede para diferenciar cada dispositivo dentro da mesma rede.

O endereço vai de 0x00 a 0xFFFF que em decimal ficaria de 0 a 65535, por isso há dois slotes de bytes para configurar, o primeiro representa o byte mais significativo (ADDH) e o ouro representa o byte menos significativo (ADDL). Para definir um valor de endereço é necessário separar esses bytes para enviar ao módulo na ordem correta, para isso precisamos basta realizar a seguinte operação de bitwise:

ADDH[0] = ADD % 256;
ADDL[1] = (ADD / 256) & 0xFF;

Então na hora de gravar as configurações do módulo o endereço vai consumir dois bytes, o primeiro endereço é o byte mais significativo (ADDH) e o outro é o menos significativo (ADDL).

4.4.3 Speed

Nessa configuração temos três configurações embutidas, tudo encapsulado em um único byte, esta imagem abaixo ajuda a entender quantos bits cada sub configuração usa e qual pertence a qual.

4.4.3.1 Bit de paridade UART

O bit de pariedade é uma configuração que talvez você nem use, por padrão usamos o 8N1, mas caso queria modificar, basta seguir essa tabela a baixo:

4.4.3.2 Baudrate

Por padrão todos os módulos da Ebyte que se comunicam através da serial, usam por padrão o baudrate de 9600, porém é possível mudar entre as mais 7 opções disponíveis.

É importante ressaltar que essa configuração de baudrate só é válido para comunicações de pacotes transferidos e recebidos entre o LoRa e o microcontrolador, em caso de definição ou leitura das configurações do módulo sempre será 9600.

4.4.3.3 Taxa de dados de transmissão

Diferentemente do LoRa Mesh da Radioenge que usa fatores parâmetros bandwidth (BW), spreading factor (SF) e coding rate (CR). A Ebyte disponibilizou apenas a taxa de dados resultante, ou seja, os outros 3 parâmetros já são feitos internamente, pois todo LoRa usa os mesmos 3 parâmetros para definir a taxa de transmissão de dados. 

Se você quiser ter um maior alcance na comunicação é necessário reduzir o “Air data rate” para a menor configuração possível, pois a relação é inversamente proporcional como diz no artigo “An Adaptive Spreading Factor Selection Scheme for a Single Channel LoRa Modem”.

No datasheet a Ebyte também fala o alcance de cada módulo e é sempre usando configurações padrões, a taxa de dados de transmissão sempre é de 2.4kbps por padrão, mas é possível escolher todas essas opções da tabela abaixo:

4.4.4 Canais

Esses módulos têm várias opções de configuração de canal, porém para os modelos E32915T30D, E32868T30D e E32433T30D o canal vai de 0 a 31 e cada canal representa uma variação de 1MHz a mais na frequência base, que pode ser representado dessa forma:

  1. E32915T30D: 900MHz + canal * 1MHz;
  2. E32868T30D: 862MHz + canal * 1MHz;
  3. E32433T30D: 410MHz + canal * 1MHz.

Por padrão, cada placa já vem com um canal predefinido que basicamente já é o valor escrito na placa, se for por exemplo E32433T30D o canal padrão é 23, ou seja, basta pegar o valor escrito e subtrair pela frequência base. 

Porém nem todos os modelos seguem as mesmas regras ,por isso é interessante consultar o datasheet de cada um. Por exemplo :O modelo E22230T30S tem um total de 65 canais e cada canal representa 0.25MHz.

4.4.4.1 Quanto mais canais melhor

A Ebyte tem muitos modelos no mercado e alguns modelos nem compensam tanto a aquisição, pois variam pequenas coisas e como já disse nesse artigo, módulos LoRa te trarão maior facilidade no uso, porém em compensação vai limitar a liberdade de explorar ao máximo o que o chip tem a oferecer.

Então na hora de escolher, busque por modelos que permite uma maior quantidade de canais e uma ampla faixa de frequência, desse modo você conseguirá se necessário, ajustar a frequência para melhorar a comunicação em determinada aplicação.

Um exemplo que mostra que há pequenas variações entre os modelos dos módulos LoRa da Ebyte é o E32915T30D e o E32900T30D, visualmente são iguais e muito possivelmente o hardware também, o que muda é que o primeiro tem uma frequência base de 900MHz e tem 31 canais chagando até 931MHz, enquanto o segundo tem uma frequência base de 862MHz e tem 69 canais chegando até 931MHz.

4.4.5 Opções

Este parâmetro é para configurações mais especificas, em aplicações comuns não será necessário fazer nenhuma modificação nos 5 sub parâmetros. Assim como o tópico “Speed”, este também tem as sub configurações ocupando alguns bits, neste caso as divisões são maiores.

4.4.5.1 Ativar ou desativar transmissão fixa

Basicamente esse parâmetro mantem ou não o endereço definido no módulo, em caso da configuração transparente o LoRa vai transmitir para um endereço especifico, mas volta a ficar modo transparente.

4.4.5.2 Modo de IO

Por padrão os pinos TXD e AUX estão conectados a um push pull internos e o RXD está conectado a um resistor de pull up interno, porém é possível deixar todas as IO abertas.

4.4.5.3 Despertar sem fio

Cada tempo dessa tabela significa o tempo em que o módulo ficará acordado após ser despertado pelo preambulo, durante esse tempo o pacote é recebido e em seguida volta a dormir. Para tudo isso acontecer, é necessário que o módulo esteja em modo de economia de energia.

A relação do consumo e o tempo são proporcionais, então quanto maior for o tempo maior será o consumo também. Claro que não será tão econômico como o modo de operação 3, mas vai ser o suficiente para fazer algumas aplicações inteligentes com IoT.

4.4.5.4 Ativar ou desativar FEC

O Forward Error Correction (FEC) é um sistema de controle de erros para transmissão de dados e sua função é basicamente tratar a informação recebida e tentar corrigir os erros, evitando assim a necessidade de retransmissão. Por padrão o FEC vem ativado e sua desativação reduz significativamente o alcance da comunicação e ambos os módulos devem estar com a mesma configuração para funcionar.

4.4.5.5 Potência de Transmissão

Cada módulo tem uma configuração de potência, por isso os valores dessa tabela pode variar de modelo para modelo, mas a quantidade de bits usados se manterão.

4.5 Comandos complementares

Além dos parâmetros de configurações, há também mais 3 parâmetros que complementam a comunicação do módulo com o microcontrolador e para qualquer um dos comandos abaixo funcionar é necessário está em modo sleep/programação

4.5.1 Leitura de parâmetros

Tão importante quanto o a gravação, a leitura é fundamental para obter as configurações atuais do módulo e ser utilizado até como feedback de confirmação se uma configuração foi feita adequadamente. Para dar esse comando basta enviar o valor hexadecimal 0xC1 três vezes, ao fazer isso o módulo retornará todos os 6 bytes de configuração.

4.5.2 Versão do módulo

A Ebyte tem muitos modelos e alguns desses modelos sofreram melhorias ao longo do tempo e podem ter novas melhorias, por isso a existência desse parâmetro. Para obter informações sobre a versão basta enviar o valor hexadecimal 0xC3 três vezes e o módulo retornará alguns bytes onde em alguns datasheet’s é 4 bytes e outros são 8 bytes.

Como a Ebyte tem um datasheet muito confuso precisei ler outros datasheets de outros modelos para tentar entender exatamente como esse comando complementar funciona, embora tenha esclarecido melhor alguns pontos outros ficaram ainda mais confusos, então precisei fazer alguns testes para passar uma informação mais confiável a você, por isso tive que destrinchar esse tópico.

Para ter os resultados mais assertivos seria necessário ter pelo menos um módulo de cada faixa de frequência de diferentes configurações e séries, porém quando os testes foram realizados apenas haviam 3 modelos e uma variação, mas ajudou a entender alguns pontos.

Essa tabela abaixo mostra os resultados dos testes feitos com cada modelo que tinha disponível no momento, mesmo repetindo inúmeras vezes os resultados foram os mesmos. O modelo E32900T30D diz em seu datasheet que é no total são 8 bytes retornados através do comando 0xC3, mas nesse pequeno teste se provou contrário, talvez apenas ele seja diferente o que seria muito estranho, pois os outros módulos seguem um padrão. A tabela está representando a mesma ordem recebido pelo microcontrolador.

DescriçãoE31433T33DE32433T30DE32433T30D 8.1E32915T30D
Identificador0xC30xC30xC30xC3
Frequência0x310x320x320x44
Versão0x510x530x100x13
Recursos0x210x1E0x1E0x1E
4.5.2.1 Identificador

O identificador basicamente é um feedback para o microcontrolador que diz que os pacotes retornado representa o comando 0xC3, apenas isso.

4.5.2.2 Frequência

Este byte é bem confuso, pois ao invés de ser valores fixos acaba variando com cada módulo mesmo que seja da mesma frequência. Se pegar e for lendo datasheet por datasheet até daria para fazer uma listagem, porém há também alguns conflitos de informações entre os datasheet’s, veja só o conflito de informação entre o E32868T30D e o E32900T30D:

Para de fato ter um resultado mais confiável, só fazendo a leitura de diferentes módulos para tentar catalogar essa questão, mas pelo menos os 0x44 de fato é 915MHz e o 0x32 é 433MHz. No entanto é possível perceber que no módulo E31433T33D que também é 433MHz tem o valor de 0x31.

Essa diferença levanta uma suspeita que talvez não seja uma representação apenas da frequência e sim também do modelo ou modulação, pois diferentemente dos outros modelos E32 testado o E31 é GFSK.

4.5.2.3 Versão e Recursos

Esses dois bytes aparentemente são os melhores para fazer uma identificação mais assertiva de qual módulo está conectado ao microcontrolador, principalmente o byte de ‘versão’.

4.5.3 Resetar configurações para as de fábrica

Por fim o último comando complementar. Esse comando como o próprio titulo já fala basicamente apaga todas as alterações feitas e as modificam para as de fábrica, para resetar basta enviar o hexadecimal 0xC4 três vezes e tudo voltará a default.

5 LoRa da Ebyte com Arduino e ESP32

Não é atoa que o titulo desse artigo fala que esses módulos são uns dos mais fáceis de ser utilizado no mercado, pois é possível utiliza-lo sem qualquer biblioteca de integração apenas com comandos de leitura e escrita na serial já é o suficiente para receber e transmitir pacotes via LoRa.

O único ponto que é interessante tomarmos cuidado é em relação a tensão que é enviada do microcontrolador para as entradas do módulo, embora eu tenha usado alguns modelos com Arduino, não tive nenhum problema em relação a isso, mas como os daasheets da Ebyte são superficiais nesse ponto, é interessante usar divisor de tensão.

5. 1 Ideia da aplicação

Para comprovar o funcionamento, vamos apenas estabelecer uma relação entre dois dispositivos, um sendo o master e outro sendo o slave que será um Arduino nano e terá um LED que será controlado remotamente pelo master que será um ESP32. Para fazer tudo isso acontecer foi utilizado a biblioteca “EBYTE.h” desenvolvida por KrisKasprzak.

5.1.1 Diagrama do Master

Como no ESP32 tem uma serial disponível para usarmos como quiser não há necessidade de usar uma serial vitual como é no caso do Arduino nano que utiliza o ATMEGA328P.

ESP32 e módulo LoRa da Ebyte

5.1.2 LoRa Ebyte Arduino: Diagrama do Slave

Diferentemente do ESP32 o Arduino nano e uno tem que utilizar uma biblioteca chamada “SoftwareSerial” que já vem nativa na Arduino IDE e por isso não é necessário realizar instalação.

Você poderá usar o módulo com outros microcontroladores em níveis TTL, mas recomendo usar com 3V3 e uma forma simples de não usar divisor de tensão e trabalhar com 3V3 é alimentando todo o Arduino com 3V3.

Exemplo de comunicação LoRa com os módulos da Ebyte slave

5.1.3 Código do Master

No master foi necessário por um delay de 1.5s para que os pacotes ficassem separados, caso contrário iram se unificar e os pacotes de modo que pudessem atrapalhar a leitura.

#include <SoftwareSerial.h>
#include <EBYTE.h>

#define M0_LoRa   11
#define M1_LoRa   12
#define RX_LoRa   3                                                          // Vai no TXD do módulo
#define TX_LoRa   2                                                          // Vai no RXD do módulo
#define AUX_LoRa  4
#define LED       13                                                         // É o mesmo pino do LED presente na placa, então não precisa por um externo

SoftwareSerial lora(RX_LoRa, TX_LoRa);
EBYTE LoRa(&lora, M0_LoRa, M1_LoRa, AUX_LoRa);

void setup() {
  Serial.begin(9600);
  lora.begin(9600);
  pinMode(LED, 1);
  LoRa.init();                                                                // Inicializa a comunicação e obtem todos os parâmetros do módulo
  //LoRa.Reset();                                                             // Reseta parâmetros para os de fábrica
  LoRa.SetAirDataRate(ADR_1K);                                                // Define a taxa de dados de transmissão
  LoRa.SetAddress(1);                                                         // Define endereço da rede
  LoRa.SetChannel(23);                                                        // Define canal como 23
  LoRa.SaveParameters(TEMPORARY);                                             // Salva todas as definições de forma temporária

  LoRa.PrintParameters();                                                     // Imprime todos os parâmetros (configurações) obtidos do módulo 
  LoRa.SetMode(MODE_NORMAL);                                                  // Define modo de operação como normal
}

void loop() {
  if(lora.available() > 0){
    String buffer = lora.readString();
    Serial.println(buffer);
    if(buffer == "ON")
      digitalWrite(LED, 1);
    else if(buffer == "OFF")
      digitalWrite(LED, 0);
  }
}

5.1.4 Código do Slave

Como o slave nesse caso fica 100% subordinado ao master, não é necessário fazer nenhum tipo de atraso na leitura, caso contrário poderia haver perda de sincronismo com o master.

#include <SoftwareSerial.h>
#include <EBYTE.h>

#define M0_LoRa   14
#define M1_LoRa   13
#define AUX_LoRa  4

EBYTE LoRa(&Serial2, M0_LoRa, M1_LoRa, AUX_LoRa);

void setup() {
  Serial.begin(9600);
  Serial2.begin(9600);
  LoRa.init();                                                                // Inicializa a comunicação e obtem todos os parâmetros do módulo

  //LoRa.Reset();                                                             // Reseta parâmetros para os de fábrica
  LoRa.SetAirDataRate(ADR_1K);                                                // Define a taxa de dados de transmissão
  LoRa.SetAddress(1);                                                         // Define endereço da rede
  LoRa.SetChannel(23);                                                        // Define canal como 23
  LoRa.SaveParameters(TEMPORARY);                                             // Salva todas as definições de forma temporária

  LoRa.PrintParameters();                                                     // Imprime todos os parâmetros (configurações) obtidos do módulo 
  LoRa.SetMode(MODE_NORMAL);                                                  // Define modo de operação como normal
}

void loop() {
  static bool status = false;
  if(status){
    Serial2.print("ON");
    status = false;
  }
  else{
    Serial2.print("OFF");
    status = true;
  }
  delay(1500);
}

5.1.5 Teste prático da comunicação entre módulos LoRa da Ebyte

Por questões de praticidade, optei por reaproveitar um hardware que havia feito para testes de alcance com os módulos da Ebyte, mas o funcionamento independente de qual hardware seja é o mesmo, então não se preocupe enquanto a isso. Além disso, decidi usar o próprio LED embutido na placa do Arduino nano que é conectado a GPIO13.

6 Boas práticas e dicas para aquisição

Venho repetir sobre a tensão de alimentação do módulo, é interessante alimentar com uma fonte 3V3 de qualidade que se mantenha com tensão constante mesmo em momentos de transmissão. Além disso, não deixe de por uma antena de 50r no módulo antes de ligar, senão vai queimar na hora, o módulo E32433T30D aberto que apareceu nesse artigo queimou dessa forma, porém acidentalmente.

6.1 Não cometa esse erro

Se você pretende adquirir um LoRa da Ebyte sempre compre um modelo que te proporcione uma maior faixa de canais e além disso sempre fique atento aos modelos e as versões dos modelos, pois embora sejam tecnicamente iguais ou apenas da mesma frequência, não se comunicam.

Mesmo que o módulo tenha queimado, a comunicação com o microcontrolador vai permanecer normal, pois o que queima é apenas o chip LLCC68 ou SX12xx e para de se comunicar via rádio.

Na imagem abaixo ambos os módulos são do modelo E32433T30D, porém um é de uma versão mais atual e a outra é da versão mais antiga, por isso não é possível se comunicarem.

Versões diferentes do modelo E32433T30D do LoRa da Ebyte

7 Opinião Pessoal

Particularmente gosto muito dos módulos da Ebyte por ser muito simples de ser usados e além de atender a maioria das aplicações que faço com LoRa e em alguns casos não é nem necessário o uso de bibliotecas, até mesmo em aplicações profissionais. Por isso acredito que esse módulo de fato é um ou é o mais fácil LoRa do mercado.