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(); }
53 Comentários
Fernando, com esse esp32+LoRa poderiamos utilizar/enviar dados com o wifi/http e rede LoRa simultaneamente ?
ResponderExcluirTenho a mesma dúvida, até porque tem uma antena embutida na placa ao lado do display.
ExcluirSim, são bibliotecas distintas com rádios distintos. Abraço!
ExcluirSim, são bibliotecas distintas com rádios distintos. Abraço!
Excluirhola bom dia uma pergunta cual e melhor lorawan ou mqtt
ExcluirOnde comprar esses módulos ?
ResponderExcluirNa internet coloque na busca do Google
Excluir“WiFi Lora Esp32” aparecerá vários sites que vendem. Abraço!
Ola Fernando ,esse modulo LORAWAN , posso usa-lo como naquele exemplo controle remoto com socket ?
ResponderExcluirOi Jorge. Não, o tipo de programação é diferente, ok! Abraço
ExcluirJá se encontra? para venda no brasil?
ResponderExcluirFernando, me da uma dica de onde comprar ele
ResponderExcluirNa internet coloque na busca do Google
Excluir“WiFi Lora Esp32” aparecerá vários sites que vendem. Abraço!
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
ResponderExcluirNão, o Lora não vem com GPS. Para utilizar GPS você precisaria de um módulo GPS. Abraço.
ExcluirPosso 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?
ResponderExcluirOlá. 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.
ExcluirPoderia 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
ExcluirBoas, a distância falada, 3.6km, pode ser em altura, ou seja, consigo captar sinais a 2km de altitude? Abçs
ResponderExcluirboa 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.
ResponderExcluirOlá. É possivel, mas sempre o que recebe tem que ser um host usb. Abraço
ExcluirBoa noite!!
ResponderExcluirO Programa não compila, ele dá erro em tudo que se refere ao display!! Tem alguma ideia do que pode ser?
Carlos estou com o mesmo problema, conversão de tipo de valor, o problema está naquele logo_bits
ExcluirOlá. Como o problema de compilação está no display, verifique se você possui a biblioteca “SSD1306”, ela que irá controlar o display. Abraço!
ExcluirComprei a TTGO ESP32 V2.0 e comecei a fazer os testes. bem animador
ResponderExcluirFernando,
ResponderExcluirA programação tanto do Módulo TTGO quanto do Heltec são feitos com a bibloteca da Heltec? Obrigado
Qual é o mais indicado para longas distâncias? 915 ou 433? Obrigado!
ResponderExcluirhttp://www.teleco.com.br/lpwa.asp
ExcluirCara 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?
ResponderExcluirBoa 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?
ResponderExcluirBoa 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?
ResponderExcluirOlá. Não consigo acessar a porta USB no MAC, só aparece bluetooth.
ResponderExcluirO que posso fazer?
Abraço
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.
ResponderExcluirFernando, 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?
ResponderExcluirPara quem tiver problema com driver, link de instalação:
ResponderExcluirhttps://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)
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
ResponderExcluirComo eu posso debuggar o código? Alguma outra ide que seja possível?
ResponderExcluirParabéns, muito bom.
ResponderExcluirPoderia 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?
Fernando
ResponderExcluirComprei meu primeiro esp32 lora.
veio sem antena.
reclamei.
falaram que o modelo que comprei não necessita.
(bau da eletronica)
procede?
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.
ExcluirPara a LIB atual do ESP32 mudaram alguma coisas
ResponderExcluirNo 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
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.
ResponderExcluirFernando, o procedimento não instala as libs lora.h nem ssd1306.h, onde posso localiza-las?
ResponderExcluirOlá Fernando,
ResponderExcluirSegui 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
Olá Fernando,
ResponderExcluirFuncionou! 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!
Olá Fernando tenho modulos da heltek V2.0, nos testes o alcance não foi tão bom assim, tem alguma dica ??
ResponderExcluirOlá 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.
ResponderExcluirOlá Fernando, onde localizo a biblioteca "images.h" que consta no OLED_LoRa_Sender?
ResponderExcluirOLA FERNANDO UMA DUVIDA ME DIZ CUAL SERIA O MELHOR PROTOCOLO CUSTO BENEFICIO LORWAN E MQTT
ResponderExcluirOla Fernando boa tarde aqui de Portugal, Tenho acompanhado as suas aulas e começo a perceber um pouquinho disto.
ResponderExcluirTenho 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
Ola Fernando boa tarde aqui de Portugal, Tenho acompanhado as suas aulas e começo a perceber um pouquinho disto.
ResponderExcluirTenho 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
ResponderExcluirBoa 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.
Boa tarde
ResponderExcluirCriei 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?
Seus links não estão funcionando, nem o que recebemos por email
ResponderExcluir