Primeiros passos comunicação LoRa com Arduino 57

LoRa (Long Range) é uma tecnologia de comunicação Wireless de longo alcance mas com baixo consumo de energia. Essas características tornam LoRa uma tecnologia ótima para utilização em redes wireless de IoT (Internet das coisas), e nesse post vamos utilizar o LoRa com Arduino, realizando uma comunicação básica entre duas placas utilizando o módulo LoRa 433MHz.

Circuito LoRa com Arduino

Aplicações de IoT estão buscando resolver situações envolvendo cidades inteligentes, mudanças climáticas, controle de poluição, desastres naturais. LoRa vem para ajudar nessa força tarefa.

Podemos ver a tecnologia LoRa sendo integrada a carros, sistemas de iluminação, equipamentos de manufatura, wearables, eletrodomésticos e casas inteligentes.

Componentes utilizados

Módulo LoRa 433MHz

O módulo LoRa 433MHz funciona através de uma interface serial com pinos TX e RX. Por isso conseguimos facilmente integrá-lo ao Arduino e utilizar as funções de Serial já bem conhecidas por programadores Arduino.

A distância de comunicação pode chegar até 3 Km dependendo das antenas usadas, condições de ambiente e interferências de radiofrequência e magnéticas.

Módulo LoRa

A alimentação pode ser 3,3V ou 5V e a comunicação serial é TTL sendo nível recomendado no máximo 3,6V. Isso significa que pode ser feita uma conexão segura com  placas 3,3V como ESP8266. Fizemos um teste ligando o módulo ao Arduino com comunicação em nível 5V e também funcionou, mas note que não é o recomendado.

Esse módulo possui 4 modos de operação. O modo mais básico para simples comunicação é o Modo Normal. Para este modo devemos colocar os pinos M0 e M1 em GND(nível 0). Em outros posts iremos explorar outros modos de operação como Modo Power Saving, Sleep e Wake-up.

No datasheet do módulo podem ser encontradas mais informações técnicas sobre o LoRa 433MHz. O modelo que a FILIPEFLOP vende atualmente, e modelo utilizado neste tutorial, é o E32-TTL-100.

Veja abaixo na ilustração a pinagem do módulo e na tabela uma descrição de cada pino.

Módulo LoRa

Tabela pinagem

Circuito eletrônico Lora com Arduino

No caso da nossa demonstração teremos dois circuitos. Um para a transmissão de dados e outro para recepção.

Circuito de transmissão

O circuito de transmissão consiste em um Arduino, dois push buttons e um módulo LoRa 433MHz.

Circuito Lora com Arduino

Circuito de recepção

O circuito de recepção consiste de outro Arduino, um LED, resistor e outro módulo LoRa 433MHz.

Circuito Receptor

Programação Arduino

Programação do transmissor

A programação do transmissor tem objetivo de enviar via protocolo serial duas strings “on” e “off” de acordo com cada botão pressionado. Veja o código abaixo:

#include <SoftwareSerial.h>

#define BTN1  4
#define BTN2  5  

SoftwareSerial loraSerial(2, 3); // TX, RX

String turnOn = "on";
String turnOff = "off";


void setup() {
  pinMode(BTN1, INPUT_PULLUP);
  pinMode(BTN2, INPUT_PULLUP);
  Serial.begin(9600);
  loraSerial.begin(9600);
  
}

void loop() {

  if(digitalRead(BTN1) == 0) {
    loraSerial.print(turnOn);
    while(digitalRead(BTN1) == 0);
    delay(50);
  }

  if(digitalRead(BTN2) == 0) {
    loraSerial.print(turnOff);
    while(digitalRead(BTN2) == 0);
    delay(50);
  }
}
Programação do receptor

A programação do receptor tem o objetivo de esperar pelas strings enviadas pelo transmissor. Quando recebe a string “on” liga o LED. Quando recebe a string “off” desliga o LED. Veja o código abaixo:

#include <SoftwareSerial.h>

#define LED1  4  

SoftwareSerial loraSerial(2, 3); // TX, RX

void setup() {
  pinMode(LED1, OUTPUT);
  Serial.begin(9600);
  loraSerial.begin(9600);  
}

void loop() { 
  if(loraSerial.available() > 1){
    String input = loraSerial.readString();
    Serial.println(input);  
    if(input == "on") {
      digitalWrite(LED1, HIGH);  
    } 
    if(input == "off") {
      digitalWrite(LED1, LOW);
    }
  }
  delay(20);
}

Funcionamento do sistema

Para testar o sistema utilizamos duas antenas SMA comuns e conseguimos chegar a uma distância de ~30m ao ar livre. Provavelmente as antenas utilizadas não são ideais para esse módulo e os edifícios e outros obstáculos interferiram na distância de comunicação.

Lembrando que a distância indicada no datasheet de 3 Km é em condições ideais, campo aberto, antenas bem dimensionadas e livre de interferências de rádio ou magnéticas. Ver datasheet página 7 para mais detalhes sobre os testes de distância.

Em posts futuros iremos explorar mais recursos do módulo LoRa e também tentaremos obter maior alcance experimentando com diferentes antenas.

Veja abaixo o funcionamento dos módulos LoRa juntamente com Arduino.

Funcionamento Módulo LoRa

Caso a distância de comunicação esteja muito curta, verifique as seguintes possibilidades:

  • Distância será afetada quando existirem obstáculos;
  • A perda de dados será afetada pela temperatura, umidade e interferência de co-canais;
  • O solo irá absorver e refletir ondas de rádio, então a performance será afetada quando usado perto do solo;
  • Água do mar absorve bastante ondas de rádio, então a performance será afetada quando usado perto do mar;
  • O sinal será afetado quando a antena estiver perto de objetos de metal ou colocada dentro um case de metal;
  • O registrados de potência foi configurado incorretamente, velocidade de transmissão (“air data rate”), foi configurada muito alta. Quanto mais alta a velocidade, mais curta a transmissão;
  • A tensão de alimentação está muito abaixo de 2,5 V, afetando a potência de transmissão;
  • Qualidade ruim da antena ou incompatibilidade da antena.

Gostou do exemplo de utilização do LoRa com Arduino? Ajude-nos a melhorar o blog comentando abaixo sobre este tutorial. Se tiver dúvidas e projetos não se esqueça de visitar nosso Fórum!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

57 Comentários

  1. Qual o alcance desse modulo LoRa?

    1. Olá Edmilson!

      Essa informação se encontra no próprio artigo acima ou no datasheet.

      Vou retirar um trecho do artigo acima e colocar aqui pra você ler:

      “Lembrando que a distância indicada no datasheet de 3 Km é em condições ideais, campo aberto, antenas bem dimensionadas e livre de interferências de rádio ou magnéticas. Ver datasheet página 7 para mais detalhes sobre os testes de distância.”

      Como informado acima, mais informações você pode encontrar no datasheet.

      Espero ter ajudado. Abraço!

      1. Você poderia fazer um teste real , bem como você disse em condições ideais é de 3km o que nunca vai acontecer, eu fiz o teste de um módulo Lora e consegui no maximo 100 metros…seria legal você colocar o teste do dispositivo que possui para ficarmos cientes

        1. Olá Bruno!

          No final do tutorial, onde tem o gif do funcionamento, explicamos qual foi o teste feito.

          O módulo é novo, ainda estamos testando. A ideia desse post foi apresentar o módulo, suas especificações técnicas e um funcionamento básico.

          Deixamos o datasheet disponível para que você possa lê-lo por completo e ficar ciente do que os fabricantes dizem sobre o módulo.

          Na medida do possível iremos fazer outros testes com esse módulo e vários outros projetos utilizando o mesmo.

          Fique ligado nos próximos posts! Abraço!

          1. Engraçado, os caras não lê mesmo o post e já saem perguntando né kkkkkk…

  2. Não precisa de uma gateway LORA para implementar a comunicação?

    1. Olá Osmar!

      Para uma comunicação simples igual ao tutorial acima não é necessário.
      Agora se você quiser centralizar dados ou enviá-los para a nuvem ou alguma plataforma IoT, servidor, etc. aí sim você irá precisar de um Gateway.

      O Gateway é basicamente uma placa com transceiver LoRa e um módulo WiFi, fazendo uma ponte entre rede LoRa com a internet.

  3. Bom dia,

     

    Queria saber, o receptor pode receber dados de dois ou mais transmissor ?

    Um transmissor pode enviar dados para mais de um receptor ?

    Se for o caso, como vamos reconhecer quem comunica com quem ? Com um codigo no sinal enviado ?

    1. Olá amigo!

      Ainda não fizemos esse teste. Mas provavelmente será necessário implementar algum tipo de criptografia e identificação de dispositivos via software.

  4. Cara, eu to querendo comprar esse kit…So que ele nao vem com as antenas certo? Procurei qual era a antena certa para colocar no kit…sabe me dizer? att, Rafael

    1. Olá Rafael!

      Isso, não vem com antena.

      Para o tutorial usamos uma antena de outro produto. O módulo APC220. É uma antena com conector SMA também.

      No datasheet, na seção que fala sobre o alcance do módulo, diz assim:

      “The external antenna used is of 5dBi gain and vertical
      polarization. The height is 2.5 meters;”

      Em breve iremos tentar incluir na loja uma antena específica para esse módulo.

  5. Giovanni, parabéns pelo artigo! Dúvidas: quantos transmissores eu poderia usar com apenas 1 receptor? Como seria a implantação, de por exemplo, 10 transmissores (sensor de presença), e 1 receptor. Obrigado pela atenção.

    1. Olá Marcelo! Obrigado pela leitura.

      Ainda não testamos esse módulo com mais de um transmissor.

      Mas teoricamente creio que vocẽ precisaria identificar cada transmissor via software quando os dados são enviados. Por exemplo colocando um endereço antes do dado para cada transmissor.

      Abraço!

  6. Parabéns pelo post, muito bom.

    Poderia fazer um post mandando mensagem usando o protocolo?
    1) Declarando variáveis
    2) Empacotando as variáveis
    3) Bufferizando
    4) Transmitindo

    Por favor, iria ajudar muito.

    1. Olá Wesley!

      Vou anotar essa sugestão, mas não prometo nada, viu? :p

      Você pode dar uma olhada no nosso fórum. Lá você pode tirar algumas dúvidas e postar seus projetos. Colaborar e aproveitar a comunidade:

      https://www.filipeflop.com/forum/

      Aí se quiser postar algum projeto seu com LoRa lá, fique à vontade.

      Abraços!

      André – Equipe FILIPEFLOP

  7. saudações
    excelente tutorial uma pergunta Eu tenho um par de transceptores E32-1W copiar o código e compilado bem no cartão, mas o led não liga quando eu apertei o botão.

    1. Olá Plinio! Obrigado pela leitura.

      Verifique as suas conexões na protoboard. Se tiver qualquer mal contato, o projeto não irá funcionar.

      Você pode também modificar o programa para enviar a string diretamente sem ser necessário apertar um botão.

      Bons projetos!

      1. Obrigado giovanni

        Eu soldou a fiação para ter certeza, mas não funciona.

        será porque as placas arduino não são originais.

      2. Eu estou usando uma placa clone de arduino 1.

        1. Olá Plinio!

          Sendo Arduino open hardware ou não não faz diferença.

          Você já tentou modificar o software para enviar a string diretamente sem apertar botão?

          Outra opção é testar com um analisador lógico se os dados estão indo pela linha serial.

  8. olá boa noite, eu estou fazendo um modulo tx e rx para radio controle de aeromodelo, atualmente fiz com os modulos HC-12, funcionou perfeito,….

    porem comprei o lora E32 433 pelo alcance ser maior, porem na hora de transmitir os dados seriais ele transmite com um atrazo muito alto e nao sei o porte,, tipo o receptor recebe os dados a cada 200ms, eu preciso q sege transparente envio e ja recebo entende,… meu programa funciona assim..

    le o tempo de cada pulso ppm do radio pra saber os “ms” de cada canal correto, e pega esses tempos e transmite via byte para o outro modulo no caso receptor,… mas nao posso ter demoras,.. tenho que receber continuamente porem esta dando este atrazo como mencionei…. vc saberia o porque? seria configuração dos modulos?

    1. Olá Rodrigo!

      Infelizmente LoRa não é recomendado para seu tipo de aplicação. Controle de aeromodelos requer alta velocidade de transmissão praticamente em tempo real.

      LoRa é melhor utilizado em aplicações que não demandem velocidade, por exemplo transmitir dados de um sensor a cada 10 min. E também aplicações de baixo consumo de energia e longas distâncias.

      No datasheet do E32 diz que a velocidade de transmissão é de 2.4kbps, já seu módulo bluetooth HC-12 é de 5kbps, ou seja o dobro da velocidade.
      https://www.allaboutcircuits.com/projects/understanding-and-implementing-the-hc-12-wireless-transceiver-module/

      Veja aqui uma discussão sobre o que é possível com LoRa
      https://www.thethingsnetwork.org/forum/t/unclear-what-exactly-is-possible-with-lorawan-technology/2508/2

      Talvez um módulo interessante para sua aplicação seria o NRF20L01. Velocidade de 2Mbps
      https://www.filipeflop.com/produto/modulo-wireless-nrf24l01-transceiver-com-antena-sma/
      Veja aqui um teste de alcance: https://hallard.me/nrf24l01-real-life-range-test/

      Abraço!

  9. Olá! É possível construir um gateway utilizando essa Lora com o Raspberry Pi Zero, 2 e 3? Se sim, você conhece algum tutorial? Obrigado.

    1. Olá João.

      Creio que seja possível sim. Infelizmente não temos tutorial sobre isso ainda.

      Veja este artigo no Portal Embarcados se te ajuda.
      O autor é o Eronides Neto, ele é referência em LoRa no Brasil.
      https://www.embarcados.com.br/gateways-lora-open-source-hardware/

      Veja outros artigos do Eronides aqui: https://www.embarcados.com.br/author/eron93/

  10. Olá.
    Eu só tenho uma duvida. Uma vez que este equipamento trabalha na faixa de Radioamador e estes geralmente fazem uso de rádios potentes, quais as possibilidade de um sofrer interferência do outro e deixar de seu funcionamento normal garantido?

    José Fernando Santos Lourenço
    1. Olá José.

      infelizmente não fizemos testes relacionados a interferẽncias desse tipo.

      Dê uma olhada no datasheet: https://img.filipeflop.com/files/download/E32_User+Manual_EN_v1.00.pdf
      Encontrei 11 referências a palavra “interference”

      Abraço!

  11. Olá quanto que ficaria esse kit ? Obrigado

    1. Olá Luciano!

      Pra comprar o kit é só ir ali na parte de Material Necessário e adicionar tudo ao carrinho!

      Abraços!

      André – Equipe FilipeFlop

  12. Esse modulo pode ser usado para controle de servo motor ? Ele tem algum conflito com a biblioteca servo.h?

    1. Olá Flavio!

      Pode sim. A princípio não tem nenhum conflito.

      Abraços!

      André – Equipe FilipeFlop

  13. Boa tarde!
    Gostaria de uma ajuda baseada na comunicação entre sensores de temperatura e vibração com uma raspberry Pi3 usando o LoRa. A ideia é projetar um sistema de envio e recepção de sinal para fazer manutenção preditiva de um maquinário. Você teria algum artigo de como poderia fazer isso?
    Desde já agradeço.

    Ronan Bezerra Alvarenga
    1. Olá Renan!

      Bem legal sua ideia de projeto!
      Infelizmente não temos nada parecido com sua ideia de projeto.

      Temos vários tutoriais sobre Raspberry Pi, sensor de temperatura, vibração etc. É só pesquisar na barra de pesquisa seu tema ou sensor desejado.

      Tutoriais com LoRa teremos mais futuramente pois ainda é uma tecnologia relativamente nova no Brasil, no mundo maker pelo menos.

      Vocẽ pode também postar a sua ideia em nosso fórum, as vezes você até ache alguém que já tenha feito algo parecido.

  14. Excelente, pode passar o código?

    Angelo

    JOSE ANGELO MACIEL MONTEIRO
  15. Acabei não comprando as antenas, porém tentei testar o produto, e não funcionou…

    ele não deveria funcionar mesmo sem antena em uma distância pequena?

    1. Olá Willian!

      Pelo contrário. Sem o uso da antena corre-se o risco até de danificar o módulo.

      Recentemente incluímos em nossos produtos uma antena compatível:
      https://www.filipeflop.com/produto/antena-sma-wifi-2-4ghz-5ghz-com-conector-macho/

      1. Comprei as antenas, e achei estranho, quando eu envio o código, o LED o TX acende normalmente, porém o receptor não consegue identificar a mensagem…

        Tem algum procedimento?

        1. Olá Willian!

          Não entendi muito bem seu problema.

          O LED fica no receptor(RX) e não no transmissor(TX).

          O transmissor(TX) possui 2 chaves.

          Se o LED acendeu é porque o receptor recebeu a mensagem normalmente.

  16. Bom dia. Preciso pegar o código de rádio frequência de um carrinho de controle remoto e transmitir esse código para esse mesmo carrinho por um Arduino. Tem algum turorial que ensine isso?

  17. Olá!

    Seria bacana seguir as recomendações do datasheet do módulo em relação ao nível de tensão do módulo RF.
    De acordo com o datasheet, o nível máximo de tensão TTL é 3,6V. Recomendo fortemente inserir um resistor de 4.7k nos pinos de Rx e Tx, pois deve aumentar a vida útil do componente.

    Um abraço!

    1. Olá Guilherme! Obrigado pela leitura do post.

      Sim, realmente seria bacana.

      No próprio datasheet tem a seguinte afirmação: “Modules are compatible with some of the microcontrollers at 5V communication level. They are too many to be listed here. Please base on practical test or talk to us for more information.”

      Fizemos o “practical test” testando com 5 V e funcionou também sem queimar o módulo. Se o cliente quiser e achar melhor pode usar a 3,6 V seguindo a recomendação como você indicou.

      Abraço!

  18. Tentei modificar o código para enviar a String sem que fosse necessário apertar o botão, porém o outro módulo não recebe!

    1. Olá Carlos!

      Com o botão funcionava na mesma distância?

      Você pode colocar alguns comandos para enviar mensagens via serial, para saber se o programa está chegando na parte em que você envia mesmo os dados.

      Abraços!

      André – Equipe FilipeFlop

  19. Olá Meu Amigo !
    que bom que publicou algo sobre radio Lora,
    Achei muito bom o artigo .
    comprei uns radios Lora para usar nos meus projetos, como nunca usei antes , preciso que se possivel me ajude.
    como configurar para que o delay entre transmissão e recepção seja o minimo possivel.

    Pois percebi que usando o programa monitor serial , existe um delay entre o que digito e o que recebe …de aproximadamente uns 250 ms.
    Queria que não apresentasse delay perceptivel ou melhor o minimo possivel .

    O radio Lora admite essa possibilidade ?

    Agradeço antecipadamente !!

    1. Olá Jorge!

      Obrigado pela leitura do post.

      Se tratando deste módulo do tutorial, em seu datasheet na página 20 tem informações sobre “air data rate” que seria a velocidade de transmissão. É um parâmetro que pode ser configurado. o Default é 2.4Kbps, podendo chegar até 19.2Kpbs.

      Atenção ao aviso
      “The lower the air data rate, the longer the
      transmitting distance, better anti-interference
      performance and longer transmitting time”

      1. Olá Meu Amigo ,

        Obrigado pela resposta rapida…

        Tenho uns equipamentos que funcionam com baudrate fixa de 1200 kbps,
        No set de parametros desse radios tem duas baudrate ok ?uma delas tenho que manter 1200,
        e a outra posso elevar para 19.2 kbps ? (AIR baudrate )

        1. Olá meu Amigo.

          obrigado pela dica , aumentei a baudrate do meu equipamento para 4800 , e deixei 19200
          no radio. Deu certo delay que existe não interfere no funcionamento dos equipamentos.

          mais uma vez Obrigado !!

  20. Ola Giovanni.
    Gostei muito da sua página.
    Quanto ao emissor procuro forma de o simplificar no hardware envolvido e que o consumo em standby seja quase nulo.
    Usando um arduino para emissor é pratico mas ao mesmo tempo hardware a mais para enviar apenas um sinal e mais um elemento a consumir energia.
    Como aumentar a autonomia do emissor sem haver tempos de boot aumentando assim a responsividade, é algo que
    procuro.
    Cumprimentos

    1. Olá Jose!

      É sempre bom saber que nosso trabalho ajuda as pessoas!

      Interessante a sua questão, o problema é que o arduino não tem um “sleep mode” como outras placas. Acredito que o ESP32 é uma placa boa pra isso, dá uma olhada neste módulo:
      https://www.filipeflop.com/produto/modulo-wifi-esp32-com-suporte-de-bateria-gps-e-lora-915mhz/

      Abraços!

      André – Equipe FilipeFlop

  21. Olá, excelente post!, gostaria de saber se tem como com esse módulo fazer uma comunicação com o celular? se sim, quais componentes eu poderia utilizar?

    Josileudo Rodrigues
    1. Olá,

      Você pode adaptar esse projeto para sua necessidade usando um módulo Bluetooth para conectar o celular ao receptor (ou ao transmissor).

      Abraço!
      Rosana – Equipe FilipeFlop

  22. Olá, gostei bastante do que foi explanado! No entanto tenho uma dúvida, gostaria de usar isso em um aeromodelo apenas para a transmissão de dados da telemetria embarcada, é possível? Com uma taxa de atualização de 200~300ms a 2km de distancia?

    Vinícius Martins Delgado
    1. Olá, Vinícius!

      Em tese, seria possível fazer a transmissão, no entanto, devido a distância, é bem possível que a transmissão sofra interferências externas grandes o suficiente para que perca informações.

      Abraços!
      Diogo – Equipe FilipeFlop

  23. Como faria para enviar valor das portas analógicas via LoRa ?

    victor jose laurindo ferreira
    1. Olá, Victor,

      Você pode tentar utilizar o comando “analogRead()” e o “analogWrite()” para isso.

      Abraços
      Diogo – Equipe FilipeFlop

  24. Boa noite Giovanni estamos com problema para comunicar o Lora Dragino com o Arduíno .
    Conseguimos realizar a comunicação ponto a ponto.
    Tem algum artigo ou pesquisa para nos indicar

    1. Joel,

      Você pode sempre dar uma conferida na Wiki da Dragino: https://wiki.dragino.com/index.php?title=Lora_Shield

      Abraços!
      Diogo – Equipe FilipeFlop

{"cart_token":"","hash":"","cart_data":""}