Recents in Beach


Receba o meu conteúdo GRATUITAMENTE


ESP32 Longa Distância - LoRaWan


Neste artigo vamos tratar da LoRaWAN, uma rede que vai longe gastando pouca energia. Mas, o quanto “longe”? Com o chip que uso no vídeo, o ESP32, o controle chega a 3,6 quilômetros de distância. Então, aqui vamos falar das características do chip e desta rede LoRa, que praticamente foi feita para IOT (Internet Of Things).

ESP32

Chip SX1276
Na montagem, em um exemplo da Heltec, com o ESP32 mais chip SX1276, temos o Sender enviando o pacote de dados para o Receiver. No dispositivo de cabo verde, o Receiver, temos o sinal que está em -9dB. Isso porque as antenas estão praticamente coladas, de tão próximas, mas, à medida que você vai distanciando uma da outra você vê que a força do sinal vai diminuindo, podendo chegar a -124dB, quando para de receber as informações. No mesmo display, Rx9 bytes significa o tamanho do pacote e Hello é a string que o dispositivo de cabo amarelo, o Sender, está enviando. No Sender também temos um led piscando a 500 milissegundos.


ESP32 LoRaWan

As minhas placas ESP32 eu já comprei com os chips LoRa já embutidos. Esses kits de desenvolvimento já vêm com display, os quais considero vantajosos. Então, desmontamos um kit. Embaixo do dispositivo nos deparamos com as informações do chip SX1276.
Lembrando que o ESP32 tem três chips: o da memória Flash, o da Espressif, que é o processador da Tensilica, e tem ainda a USB para serial Ttl, da Silicon Labs. No caso deste kit de desenvolvimento temos um quarto chip, que é o SX1276.

Como é utilizada a rede LoRa


Para entender a utilização da rede, temos os chips LoRa se comunicando entre si, medindo  posição geográfica, temperatura, pressão, umidade, ou seja, todas as informações que são analisadas através da IOT na rede LoRa. Temos, então, um concentrador, o Gateway, que recebe todos esses sinais. Este é que vai entrar na rede TCP/IP SSL LoRaWAN e, então, seguir para um server side, uma coisa mais robusta, o IBM Watson, Amazon, enfim, os dados são processados em um outro nível.

Principais recursos da tecnologia LoRa e do protocolo LoRaWAN

Aqui deixo algumas características da tecnologia LoRa e do protocolo LoRaWAN. Destaco que a ideia dessa rede não é você enviar conteúdo multimídia, mas, sim,  mandar pacotes de dados de leitura.





Protocolo LoRaWAN: LoRaWAN é uma especificação de protocolo construída em cima da tecnologia LoRa desenvolvida pela Aliança LoRa. Ele usa espectro radioelétrico sem licença nas bandas Industrial, Científica e Médica (ISM) para permitir a comunicação de baixa potência e ampla área entre sensores remotos e gateways conectados à rede. Esta abordagem baseada em padrões para a construção de um LPWAN permite a instalação rápida de redes IoT públicas ou privadas em qualquer lugar usando hardware e software que seja bidirecionalmente seguro, interoperável e móvel, fornece uma localização precisa e funciona do jeito que você espera.




CHIP sx1276


Então, desmontando o kit de desenvolvimento, desparafusamos o display e localizamos o chip LoRa, criado pela empresa francesa Semtech. Aqui deixo uma tabela tirada do Datasheet com informações deste dispositivo nos modelos 1276, 1277, 1278 e 1279. A diferença deles é mais no quesito da frequência.

ESP32 LoRa X ESP32 WiFi

ESP32 WiFi
ESP32 LoRa
Comparando o ESP32 tradicional com o ESP32 LoRa, então, destacamos novamente que o tradicional tem três chips, enquanto o LoRa possui quatro. Este quarto chip, no caso o sx1276 está ligado pela porta SPI. Quanto ao Flat do OLED, este está ligado no i2c.




Pinagem do ESP32 LoRa

Importante observar os pinos que já estão ocupados.


Teste

ESP32 LoRaWAN TTGO


Para fazer o teste pegamos os chips da TTGO, colocamos uma antena, bateria e saímos andando. Logo de cara, constatamos ele funcionando a 915 MHz. Testamos o de 433 MHz também.
Montamos um pacote para envio do Sender para o Receiver. O segundo vai receber este pacote, medir a intensidade do sinal em dB, e vai mostrar no display. Desta maneira que será possível você fazer um teste. Eu pretendo, em uma próxima oportunidade, fazer isso também utilizando meu drone, que vai a 7 quilômetros, para ver até onde consigo chegar.

ESP32 LoRaWAN – Heltec


Esse é o modelo da Heltec, que está a 433 MHz e funciona muito bem. Caso você esteja querendo comprar um ESP32, aconselho esta marca, pois conta com uma Lib dentro do Arduino IDE, o que facilita o manuseio.

Lib e Exemplos da Heltec

Os exemplos da Heltec estão no GitHub:


Abaixo coloco o caminho para localizar o código fonte do exemplo no seu computador após a instalação:
C:\Program Files (x86)\Arduino\hardware\heltec\esp32\libraries\LoRa\examples\OLED_LoRa_Sender

Manual em PDF

O manual eu traduzi para o português e vou entregar para você em um arquivo PDF.
Para tal, peço que você se inscreva na minha lista de e-mails através do link: pdf.fernandok.com.
Você receberá uma mensagem na qual deve confirmar sua inscrição. Confira sua caixa de entrada, bem como a de Spam, entre outras.
Com a inscrição confirmada, vou lhe enviar um segundo e-mail com o link para download do manual: “Como instalar o Arduino IDE ESP32 LoRa – Heltec no Windows”.

Código fonte

Hoje temos dois programas .INO: o Sender e o Receiver.

Sender e Receiver

Primeiramente declaro os pinos de SPI e defino a frequência do rádio, ou seja, faço todas as declarações necessárias.

#include <spi.h>  //responsável pela comunicação serial
#include <lora.h>  //responsável pela comunicação com o WIFI Lora
#include <wire.h>  //responsável pela comunicação i2c
#include "SSD1306.h" //responsável pela comunicação com o display
#include "images.h" //contém o logo para usarmos ao iniciar o display

// Definição dos pinos 
#define SCK 5 // GPIO5 -- SX127x's SCK
#define MISO 19 // GPIO19 -- SX127x's MISO
#define MOSI 27 // GPIO27 -- SX127x's MOSI
#define SS 18 // GPIO18 -- SX127x's CS
#define RST 14 // GPIO14 -- SX127x's RESET
#define DI00 26 // GPIO26 -- SX127x's IRQ (Interrupt Request)

#define BAND 915E6 //Frequencia do radio - podemos utilizar ainda : 433E6, 868E6, 915E6
#define PABOOST true

Sender: OLED_LoRa_Sender.ino

Aqui tenho o display que está ligado nos pinos do i2c e as strings.

//variável responsável por armazenar o valor do contador (enviaremos esse valor para o outro Lora)
unsigned int counter = 0;

//parametros: address,SDA,SCL 
SSD1306 display(0x3c, 4, 15); //construtor do objeto que controlaremos o display

String rssi = "RSSI --";
String packSize = "--";
String packet ;

Setup: OLED_LoRa_Sender.ino

Aqui configuramos os pinos como saída, bem como as ações do display. Iniciamos a comunicação LoRa e configuramos os pinos que serão utilizados pela biblioteca.
Destaque: Toda vez que você ligar o ESP32 com a rede LoRa, verifique se a anteninha está conectada no conector do Pigtail porque se você ligar na USB sem ele estar conectado na antena poderá queimar o chip transmissor.

void setup()
{
//configura os pinos como saida
pinMode(16,OUTPUT); //RST do oled
pinMode(25,OUTPUT);
digitalWrite(16, LOW); // reseta o OLED
delay(50); 
digitalWrite(16, HIGH); // enquanto o OLED estiver ligado, GPIO16 deve estar HIGH

display.init(); //inicializa o display
display.flipScreenVertically(); 
display.setFont(ArialMT_Plain_10); //configura a fonte para um tamanho maior

//imprime o logo na tela
logo();

delay(1500);
display.clear(); //apaga todo o conteúdo da tela do display

SPI.begin(SCK,MISO,MOSI,SS); //inicia a comunicação serial com o Lora
LoRa.setPins(SS,RST,DI00); //configura os pinos que serão utlizados pela biblioteca (deve ser chamado antes do LoRa.begin)
//inicializa o Lora com a frequencia específica.
if (!LoRa.begin(BAND,PABOOST))
{
display.drawString(0, 0, "Starting LoRa failed!");
display.display(); //mostra o conteúdo na tela
while (1);
}
//indica no display que inicilizou corretamente.
display.drawString(0, 0, "LoRa Initial success!");
display.display(); //mostra o conteúdo na tela
delay(1000);
}

Loop: OLED_LoRa_Sender.ino

Mostramos aqui como montar um pacote e ligar o led indicativo.

void loop()
{
//apaga o conteúdo do display
display.clear();
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_16);
display.drawString(0, 0, "Sending packet: ");
display.drawString(40, 26, String(counter));
display.display(); //mostra o conteúdo na tela

//beginPacket : abre um pacote para adicionarmos os dados para envio
LoRa.beginPacket();
//print: adiciona os dados no pacote
LoRa.print("hello ");
LoRa.print(counter);
//endPacket : fecha o pacote e envia
LoRa.endPacket(); //retorno= 1:sucesso | 0: falha

//beginPacket : abre um pacote para adicionarmos os dados para envio
LoRa.beginPacket();
//print: adiciona os dados no pacote
LoRa.print("hello ");
LoRa.print(counter);
//endPacket : fecha o pacote e envia
LoRa.endPacket(); //retorno= 1:sucesso | 0: falha

//incrementa uma unidade no contador
counter++;

digitalWrite(25, HIGH); // liga o LED indicativo
delay(500); // aguarda 500ms
digitalWrite(25, LOW); // desliga o LED indicativo
delay(500); // aguarda 500ms
}

Imprime – Logotipo: OLED_LoRa_Sender.ino

Essa função apenas imprime o logo na tela do display.

//essa função apenas imprime o logo na tela do display
void logo()
{
//apaga o conteúdo do display
display.clear();
//imprime o logo presente na biblioteca "images.h"
display.drawXbm(0,5,logo_width,logo_height,logo_bits);
display.display();
}

Setup: OLED_LoRa.Reciver.ino

Iniciamos aqui a LoRa com a frequência específica, apontamos a inicialização correta no display e habilitamos a LoRa para receber os dados enviados pelo Sender. Checamos ainda o recebimento do pacote.

//inicializa o Lora com a frequencia específica.
if (!LoRa.begin(BAND,PABOOST)) {
display.drawString(0, 0, "Starting LoRa failed!");
display.display();
while (1);
}

//indica no display que inicilizou corretamente.
display.drawString(0, 0, "LoRa Initial success!");
display.drawString(0, 10, "Wait for incomm data...");
display.display();
delay(1000);

//LoRa.onReceive(cbk);
LoRa.receive(); //habilita o Lora para receber dados
}

void loop() {
//parsePacket: checa se um pacote foi recebido
//retorno: tamanho do pacote em bytes. Se retornar 0 (ZERO) nenhum pacote foi recebido
int packetSize = LoRa.parsePacket();
//caso tenha recebido pacote chama a função para configurar os dados que serão mostrados em tela
if (packetSize) { 
cbk(packetSize); //função responsável por recuperar o conteúdo do pacote recebido
delay(10);
}
}

Print no OLED: OLED_LoRa.Reciver.ino

Aqui configuramos as informações que aparecerão na tela do display.

//função responsável por configurar os dados que serão exibidos em tela.
//RSSI : primeira linha
//RX packSize : segunda linha
//packet : terceira linha
void loraData(){
display.clear();
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_16);
display.drawString(0 , 18 , "Rx "+ packSize + " bytes");
display.drawStringMaxWidth(0 , 39 , 128, packet);
display.drawString(0, 0, rssi); 
display.display();
}




Faça o download dos arquivos:

Sender.INO

Receiver.INO

PDF


Postar um comentário

53 Comentários

  1. Fernando, com esse esp32+LoRa poderiamos utilizar/enviar dados com o wifi/http e rede LoRa simultaneamente ?

    ResponderExcluir
    Respostas
    1. Tenho a mesma dúvida, até porque tem uma antena embutida na placa ao lado do display.

      Excluir
    2. Sim, são bibliotecas distintas com rádios distintos. Abraço!

      Excluir
    3. Sim, são bibliotecas distintas com rádios distintos. Abraço!

      Excluir
    4. hola bom dia uma pergunta cual e melhor lorawan ou mqtt

      Excluir
  2. Respostas
    1. Na internet coloque na busca do Google
      “WiFi Lora Esp32” aparecerá vários sites que vendem. Abraço!

      Excluir
  3. Ola Fernando ,esse modulo LORAWAN , posso usa-lo como naquele exemplo controle remoto com socket ?

    ResponderExcluir
    Respostas
    1. Oi Jorge. Não, o tipo de programação é diferente, ok! Abraço

      Excluir
  4. Já se encontra? para venda no brasil?

    ResponderExcluir
  5. Fernando, me da uma dica de onde comprar ele

    ResponderExcluir
    Respostas
    1. Na internet coloque na busca do Google
      “WiFi Lora Esp32” aparecerá vários sites que vendem. Abraço!

      Excluir
  6. Olá, excelente conteúdo! Fiquei com uma divida. O Lora já vem com GPS integrado? Ou para aplicações com GPS deve se utilizar outra placa? Obrigado e parabéns pelo seu trabalho

    ResponderExcluir
    Respostas
    1. Não, o Lora não vem com GPS. Para utilizar GPS você precisaria de um módulo GPS. Abraço.

      Excluir
  7. Posso usar 2 ESP32 LoRa pra enviar dados de 2 sensores para um esp32 lora "centra" e ele fazer uma ação dependendo do valor dos sensores?

    ResponderExcluir
    Respostas
    1. Olá. Sim, você pode fazer isso. Porém você deve implementar um protocolo próprio para identificar cada um dos Lora, e saber quem está se comunicando e assim poder realizar as ações desejadas. Abraço.

      Excluir
    2. Poderia me ajudar em como fasso isso? Preciso para um TCC e não encontro como fazer isso na internet, se possível um vídeo seria mais do que ótimo, se não der por favor tente me explicar por aqui mesmo, seria de grande ajuda

      Excluir
  8. Boas, a distância falada, 3.6km, pode ser em altura, ou seja, consigo captar sinais a 2km de altitude? Abçs

    ResponderExcluir
  9. boa tarde,exite a possibilidade de usar o esp32 para capitar dados de uma porta mini usb,e outro para receber os dados e transmitir para a leitura em um pc.por ex:o modulo a qual quero comunicacao seria móvel e o receptor uma base.

    ResponderExcluir
    Respostas
    1. Olá. É possivel, mas sempre o que recebe tem que ser um host usb. Abraço

      Excluir
  10. Boa noite!!
    O Programa não compila, ele dá erro em tudo que se refere ao display!! Tem alguma ideia do que pode ser?

    ResponderExcluir
    Respostas
    1. Carlos estou com o mesmo problema, conversão de tipo de valor, o problema está naquele logo_bits

      Excluir
    2. Olá. Como o problema de compilação está no display, verifique se você possui a biblioteca “SSD1306”, ela que irá controlar o display. Abraço!

      Excluir
  11. Comprei a TTGO ESP32 V2.0 e comecei a fazer os testes. bem animador

    ResponderExcluir
  12. Fernando,
    A programação tanto do Módulo TTGO quanto do Heltec são feitos com a bibloteca da Heltec? Obrigado

    ResponderExcluir
  13. Qual é o mais indicado para longas distâncias? 915 ou 433? Obrigado!

    ResponderExcluir
  14. Cara tinha problema com webserver noesp8266, fiz um teste com e o problema continua. caindo a conexão...não mantem por mais de 5 minutos. alguem sabe algo sobre isso?

    ResponderExcluir
  15. Boa noite Fernando,tenho 2 dúvidas. E possível conectar o lora receptor com vários rádios transmissores? A segunda e se ele pode ser tx e rx ao mesmo tempo para enviar e receber comandos?

    ResponderExcluir
  16. Boa Noite Fernando. Tive alguns problemas para utilizar o módulo ESP+LoRa 433 da TTGO, principalmente em relação as libraries. Não consegui utilizar a "SSD1306.h", apresentou um erro de compilação. Tive que instalar a biblioteca U8x8lib.h. Chegaste a passar por este problema?

    ResponderExcluir
  17. Olá. Não consigo acessar a porta USB no MAC, só aparece bluetooth.
    O que posso fazer?
    Abraço

    ResponderExcluir
  18. Fernando, ótimos vídeos, está ajudando muita gente, obrigado pelo seu empenho. Você poderia ajudar com a seguinte questão. Como implemento o código para que eu possar usar 04 transmissores com 01 receptor.

    ResponderExcluir
  19. Fernando, bom dia, sou novo neste assunto. Queria uma biblioteca para acionar um rele, quando pressionado o botao, liga e quando soltar, desliga. a 1 km de distancia e que no display informasse o estado "ligado" e "desligado". Teria como me ajudar?

    ResponderExcluir
  20. Para quem tiver problema com driver, link de instalação:
    https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
    Nunca usem cabo micro USB de carregador portátil, lembre-se: não tem TX e nem RX.
    (Compartilhando falhas)

    ResponderExcluir
  21. Se não pode usa como controle remoto, que tipo de placa via rádio eu uso para controlar um projeto de um super drone que estou fazendo? gostaria da ajuda desde já agradeço.pq ainda não encontrei

    ResponderExcluir
  22. Como eu posso debuggar o código? Alguma outra ide que seja possível?

    ResponderExcluir
  23. Parabéns, muito bom.

    Poderia me ajudar?

    Tenho um LoRa6100pro e ele tem apenas a comunicação TTL, possui apenas os pinos TX e RX e minha duvida é como captar o RSSI, pois este modulo não possui MISO, MOSI... e nem a comunicação SPI.

    Teria alguma sugestão?

    ResponderExcluir
  24. Fernando

    Comprei meu primeiro esp32 lora.
    veio sem antena.
    reclamei.
    falaram que o modelo que comprei não necessita.
    (bau da eletronica)
    procede?

    ResponderExcluir
    Respostas
    1. Se for da Heltec e TTGO precisa sim, mas pode existir algum modelo que não use antena externa para Lora para wifi geralmente é interna.

      Excluir
  25. Para a LIB atual do ESP32 mudaram alguma coisas
    No arquivo images.h vc deve mudar :
    static uint8_t logo_bits[] = {
    No fontre principal:
    Linha 24: #include //responsável pela comunicação com o display
    //inicializa o Lora com a frequencia específica.
    Linha 74: if (!LoRa.begin(BAND))

    Retire a linha 36 //#define PABOOST true

    ResponderExcluir
  26. Olá. Posso receber mensagem de mais de um dispositivo? O mesmo Esp32LoRa pode esta conectado a outros 2 ou mais? Pode me ajudar som essa duvida. Desde já agradeço.

    ResponderExcluir
  27. Fernando, o procedimento não instala as libs lora.h nem ssd1306.h, onde posso localiza-las?

    ResponderExcluir
  28. Olá Fernando,
    Segui todos os passos, baixei as libs github, baixei seus programas sender e reciver mas eles dao erro e não compilam. Peguei então os exemplos do fabricante e instalei mas a máxima distância é 2 metros somente. Parecia tão promissor em seu video. Não acredito que o fabricante mandaria exemplos ruins de funcionamento. Tem alguma idéia do que está acontecendo? Obrigado

    ResponderExcluir
  29. Olá Fernando,
    Funcionou! A frequência de minha board é 868/915 Mhz e nao 433 como no exemplo original. foi só alterar a frequência e consegui chegar a 800m com obstáculos. Expetacular!

    ResponderExcluir
  30. Olá Fernando tenho modulos da heltek V2.0, nos testes o alcance não foi tão bom assim, tem alguma dica ??

    ResponderExcluir
  31. Olá Fernando. Gostaria de receber dados no Esp32 LoRa e gravar em um cartão micro SD, porém o Lora já utiliza a porta SPI necessária para gravar no módulo do uSD. Vc tem alguma dica ou tutorial de como fazer? Abraço.

    ResponderExcluir
  32. Olá Fernando, onde localizo a biblioteca "images.h" que consta no OLED_LoRa_Sender?

    ResponderExcluir
  33. OLA FERNANDO UMA DUVIDA ME DIZ CUAL SERIA O MELHOR PROTOCOLO CUSTO BENEFICIO LORWAN E MQTT

    ResponderExcluir
  34. Ola Fernando boa tarde aqui de Portugal, Tenho acompanhado as suas aulas e começo a perceber um pouquinho disto.
    Tenho 2 Esp32Lora da Heltec+ BME280 + Rele e estou a utilizar o Cayenne para receber e enviar dados.
    O meu problema é fazer funcionar o RELE. Estou a utilizar o seu codigo de exemplo que tem o Master e o Slave,
    1º recebo os dados do BME280 no master que manda para o Cayenne sem problema,
    2º Recebo informação do Cayenne no Master para ativar rele
    3º Não consigo enviar do master para o slave o comando para activar o rele.
    Pode dar-me uma dica de como devo proceder

    ResponderExcluir
  35. Ola Fernando boa tarde aqui de Portugal, Tenho acompanhado as suas aulas e começo a perceber um pouquinho disto.
    Tenho 2 Esp32Lora da Heltec+ BME280 + Rele e estou a utilizar o Cayenne para receber e enviar dados.
    O meu problema é fazer funcionar o RELE. Estou a utilizar o seu codigo de exemplo que tem o Master e o Slave,
    1º recebo os dados do BME280 no master que manda para o Cayenne sem problema,
    2º Recebo informação do Cayenne no Master para ativar rele
    3º Não consigo enviar do master para o slave o comando para activar o rele.
    Pode dar-me uma dica de como devo proceder

    ResponderExcluir

  36. Boa tarde alguém pode dar uma ajuda estou tentando baixar o manual em PDF do link pdf.fernandok.com. Está dando erro. Alguém poderia disponibilizar esse manual ou informar outro meio. Desde já agradeço.


    ResponderExcluir
  37. Boa tarde

    Criei um site e estava mandando os dados de um esp 01 para ele via GET, mas ai decidi instalar o SSL no meu site e agora não consigo mais mandar os dados, como faço para enviar HTTPS com o ESP8266?

    ResponderExcluir
  38. Seus links não estão funcionando, nem o que recebemos por email

    ResponderExcluir