Como usar a placa LoRa ESP32 wifi com Arduino IDE

Neste post, você vai aprender a usar e programar a placa LoRa ESP32 Wifi com a IDE do Arduino. Esse produto está disponível em nossa loja, basta clicar aqui. Confira mais detalhes do produto a seguir.

Informações gerais

A placa LoRa ESP32 WiFi é uma placa de desenvolvimento compacta que oferece três modos de comunicação: Wifi, Bluetooth e LoRa (a rede de longo alcance que é o diferencial dessa placa). LoRa é uma tecnologia de transmissão de dados sem fio que utiliza uma técnica de modulação de rádio baseada em chips transceptores Semtech LoRa. Essa técnica possibilita a comunicação a longas distâncias com pequenas quantidades de dados (baixa largura de banda), alta resistência a interferências e baixo consumo de energia. Assim, LoRa é ideal para aplicações que exigem longo alcance e economia de bateria. A placa conta com o microprocessador Xtensa 32-Bits LX6, que se destaca pelo baixo consumo de energia e pelo processamento dual core. Além disso, possui uma tela OLED de 0,96” com resolução de 128×64 integrada. Na parte inferior, há um controlador de carga e um conector JST para uma bateria (Li-Ion ou Li-Po) de 3.7V e até 1000mAh, permitindo a alimentação remota da placa.

Atenção: O módulo LoRa ESP32 WiFi não deve ser ligado sem que a antena esteja conectada corretamente, pois isso pode causar danos aos componentes, segundo o fabricante.

Especificações técnicas

LoRa ESP32 Wifi

  • Modelo: Heltec WiFi LoRa 32;
  • Processador: Xtensa 32-Bit LX6 Dual Core;
  • Chip Base: ESP32-D0WDQ6;
  • Fonte de alimentação USB: 5V DC (≥500mA);
  • Fonte de alimentação da bateria de lítio: 3,7V a 4,2V (≥250mA),(Bateria não inclusa);
  • Tensão de nível lógico: 3,3VDC;
  • Clock: 80 à 240 MHz (Ajustável);
  • Memória ROM: 448KB;
  • Memória SRAM: 520Kb;
  • Memória Flash Externa: 32-Bit de acesso e 4Mb;
  • GPIO: Digital IO (36), ADC 12-Bits (16 canais), DAC 8-Bits (2 canais);
  • WiFi 802.11 b/g/n: 2.4 à 2.5 GHz;
  • Segurança WiFi: WPA / WPA2 / WPA2-Enterprise / WPS;
  • Criptografia WiFi: AES / RSA / ECC / SHA;
  • Bluetooth 4.2 BR / EDR e BLE ( Bluetooth Low Energy);
  • Temperatura de trabalho: -40° à +85° C;
  • Driver do Display: SSD1306;
  • nterface do display: I2C;
  • Chip Base LoRa: SX1278;
  • Frequência de operação: 433MHz;
  • Sensibilidade: -139dBM (máximo);
  • Potência máxima: 20dBM;
  • Modo de modulação: LoRa, FSK, GFSK e OOK;
  • Taxa de transferência: 0,018 à 37,5 Kbps (LoRa);
  • Dimensões: 51mm x 25mm x 8mm;
  • Peso: 12,5g.

Esquema de conexão de pinos

A seguir temos o diagrama de pinagem do dispositivo.  Existem pinos com características específicas que os tornam adequados ou não para um determinado projeto. A imagem a seguir mostra quais pinos são melhores para usar como entradas, saídas e quais você precisa ter cuidado, se atente as notas.

É importante levar em conta que os pinos devem estar nos seguintes estados ao baixar o programa:

GPIO5 (LOW);
GPIO12 (LOW);
GPIO15 (HIGH).

Diagrama de pinagem da placa LoRa ESP32 Wifi

Configurando o ESP32 na IDE do Arduino

Passo 1: Instalação da IDE do Arduino

O primeiro passo para começar a usar a placa LORA ESP32 com o ambiente de programação do Arduino é instalar o programa no computador. Caso já tenha a IDE do Arduino Instalada, pule para o próximo tópico.

  • Vá até o site oficial de download da IDE do Arduino clicando aqui;
  • Escolha o seu sistema operacional como mostrado na imagem abaixo e clique para efetuar o download;
  • Clique em “Just Download” ;
  • Após o arquivo ter baixado para o seu computador, efetue a instalação do programa. Caso tenha dificuldades, veja o vídeo abaixo.

Passo 2: Para quem já instalou o ESP32

Caso seja a primeira vez que está configurando algum ESP32 na IDE Arduino, passe para o próximo passo. Por outro lado, se você já possui a IDE do Arduino instalada em seu computador e em algum momento fez a instalação do pacote de placas do ESP32, é necessário fazer a remoção do pacote antes de prosseguir.  

Vá em AppData → Local → Arduino15, delete a pasta Arduino15 completamente.

Remoção da pasta Arduino15

Para evitar qualquer problema nos passos seguintes, delete também a pasta de bibliotecas.

Vá em Documentos → Arduino → libraries e apague as bibliotecas que estão salvas.

Apagando as bibliotecas instaladas

Passo 3: Configurando o LoRa ESP32 na IDE do Arduino

Abra a IDE do Arduino, entre em Arquivos e vá até a opção Preferências:

Janela da ferramenta Arquivo

Clique no ícone a direita de URLs Adicionais para Gerenciadores de Placas:

Janela de Preferências

Adicione a seguinte URL e clique em OK:

https://dl.espressif.com/dl/package_esp32_index.json

 

Janela de adição de URLs

Em seguida, vá em Ferramentas ➞ Placa➞ Gerenciador de Placas:

Janela de Ferramentas

Na barra de pesquisa coloque ESP32, quando surgir  esp32 de Espressif System. clique em Instalar e aguarde o download.

Janela do Gerenciador de Placas

Passo 4: Instalação dos drivers Silicon Labs CP210x USB para UART Bridge VCP.

Em determinados casos, pode ser necessário realizar a instalação do driver serial para que um dispositivo funcione corretamente. Felizmente, o processo de instalação é bastante simples. Para começar, é preciso acessar o seguinte link: https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers.

Uma vez no site, siga os passos abaixo para fazer o download e a instalação do driver:

  1. Na janela de downloads, localize o driver universal do Windows CP210x;
  2. Clique no botão de download e aguarde o término do processo;
  3. Depois que o arquivo for baixado, extraia-o para uma pasta de sua escolha;
  4. Por fim, execute o arquivo de instalação de acordo com a versão do seu computador.

Seguindo essas etapas, você poderá instalar o driver serial de forma rápida e fácil, garantindo o bom funcionamento do seu dispositivo.

Download do driver serial

Passo 5: Instalação da biblioteca LoRa

Para instalar a biblioteca LoRa vá em: Sketch → Incluir Biblioteca → Gerenciar Bibliotecas;

Gerenciar biblioteca LoRa

Pesquise  Heltec ESP32 e  Instale a biblioteca descrita como: Heltec ESP32 Dev-Boards (distribuída por HelTec);

Atenção: Escolha a Versão 1.0.9

Biblioteca LoRa by Sandeep Mistry

Pesquise SSD1306 e  Instale a biblioteca descrita como: ESP8266 and ESP32 Oled Driver for SSD1306 display

Biblioteca ESP8266 and ESP32 OLED driver for SSD1306 displays by ThingPulse

Após seguir os passos anteriores, a Placa LoRa ESP32 WiFi estará pronta para ser conectada ao computador e programada. É importante destacar que, de acordo com o fabricante, a placa não deve ser energizada sem que a antena esteja devidamente conectada, pois isso pode ocasionar danos irreversíveis à placa. Portanto, verifique sempre se a antena está conectada antes de conectar a placa ao computador.

Para demonstrar o funcionamento da comunicação LoRa entre dois pontos, serão utilizadas duas unidades da Placa LoRa ESP32 WiFi. Para programar e energizar as placas, pode-se utilizar um cabo Micro USB conectado ao computador e uma fonte 5V Micro USB.

Uma das placas será programada com um código exemplo chamado “Sender”, que será responsável por enviar pacotes. Já a outra placa será programada com um código chamado “Receiver”, que será responsável por receber os pacotes enviados pela primeira placa.

As informações sobre o envio e recebimento de pacotes serão exibidas em tempo real no display OLED de cada uma das placas.

Para conectar a Placa LoRa ESP32 WiFi transmissora ao computador e programá-la, basta seguir os seguintes passos:

  1. Conecte a placa ao computador usando um cabo Micro USB;
  2. Abra a IDE do Arduino;
  3. No menu “Ferramentas”, selecione a opção “Placas”;
  4. Em seguida, selecione a opção “Heltec WiFi LoRa 32(V2)”.

Seguindo esses passos, você poderá programar a sua Placa LoRa ESP32 WiFi e testar a comunicação LoRa entre dois pontos.

Selecionando placa Heltec Wifi Lora 32(V2)

Acesse o menu novamente e vá em: Arquivo → Exemplos → Heltec ESP32 Dev-Boards → LoRa → OLED_LoRa_Sender:

Programa exemplo OLED LoRa Sender

Para operar a comunicação LoRa na Placa LoRa ESP32 WiFi, é necessário informar a frequência de operação da placa que está sendo utilizada. A frequência pode ser de 433MHz, 868MHz ou 915MHz, e essa informação deve ser inserida no código.

Para definir a frequência de operação, é importante lembrar que:

  • Para a frequência de 433MHz, deve-se informar 433E6;
  • Para 868MHz, deve-se informar 868E6;
  • Para 915MHz, deve-se informar 915E6.

No exemplo apresentado, será utilizado um módulo que opera em ambas as frequências de 868MHz e 915MHz. Nesse caso, pode-se escolher qualquer uma das opções entre 868E6 e 915E6. Para o exemplo, será utilizada a frequência de 915MHz, ou seja, 915E6.

							
							
					/*
  This is a simple example show the Heltec.LoRa sended data in OLED.

  The onboard OLED display is SSD1306 driver and I2C interface. In order to make the
  OLED correctly operation, you should output a high-low-high(1-0-1) signal by soft-
  ware to OLED's reset pin, the low-level signal at least 5ms.

  OLED pins to ESP32 GPIOs via this connecthin:
  OLED_SDA -- GPIO4
  OLED_SCL -- GPIO15
  OLED_RST -- GPIO16
  
  by Aaron.Lee from HelTec AutoMation, ChengDu, China
  成都惠利特自动化科技有限公司
  https://heltec.org
  
  this project also realess in GitHub:
  https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series
*/

#include "heltec.h"
#include "images.h"

#define BAND    915E6  //you can set band here directly,e.g. 868E6,915E6

unsigned int counter = 0;
String rssi = "RSSI --";
String packSize = "--";
String packet ;

void logo()
{
  Heltec.display->clear();
  Heltec.display->drawXbm(0,5,logo_width,logo_height,logo_bits);
  Heltec.display->display();
}

void setup()
{
   //WIFI Kit series V1 not support Vext control
  Heltec.begin(true /*DisplayEnable Enable*/, true /*Heltec.Heltec.Heltec.LoRa Disable*/, true /*Serial Enable*/, true /*PABOOST Enable*/, BAND /*long BAND*/);
 
  Heltec.display->init();
  Heltec.display->flipScreenVertically();  
  Heltec.display->setFont(ArialMT_Plain_10);
  logo();
  delay(1500);
  Heltec.display->clear();
  
  Heltec.display->drawString(0, 0, "Heltec.LoRa Initial success!");
  Heltec.display->display();
  delay(1000);
}

void loop()
{
  Heltec.display->clear();
  Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
  Heltec.display->setFont(ArialMT_Plain_10);
  
  Heltec.display->drawString(0, 0, "Sending packet: ");
  Heltec.display->drawString(90, 0, String(counter));
  Heltec.display->display();

  // send packet
  LoRa.beginPacket();
  
/*
 * LoRa.setTxPower(txPower,RFOUT_pin);
 * txPower -- 0 ~ 20
 * RFOUT_pin could be RF_PACONFIG_PASELECT_PABOOST or RF_PACONFIG_PASELECT_RFO
 *   - RF_PACONFIG_PASELECT_PABOOST -- LoRa single output via PABOOST, maximum output 20dBm
 *   - RF_PACONFIG_PASELECT_RFO     -- LoRa single output via RFO_HF / RFO_LF, maximum output 14dBm
*/
  LoRa.setTxPower(14,RF_PACONFIG_PASELECT_PABOOST);
  LoRa.print("hello ");
  LoRa.print(counter);
  LoRa.endPacket();

  counter++;
  digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}				
			

Para enviar o código para a placa LoRa ESP32 WiFi, é necessário clicar no botão correspondente na IDE do Arduino e aguardar o carregamento. Caso ocorra algum erro durante o processo, é importante verificar se a placa correta foi selecionada no menu “Ferramentas”. Além disso, é importante lembrar que os códigos de exemplos da biblioteca só funcionarão com a placa LoRa que possui display OLED.

Após o carregamento do código “Sender”, é necessário desconectar a placa transmissora do computador e conectar a segunda placa LoRa ESP32 WiFi receptora através do cabo USB. Em seguida, deve-se selecionar a porta COM em que a placa está alocada e repetir o procedimento anterior, agora selecionando o código “OLED_LoRa_Receiver”.

Também é necessário informar novamente a frequência de operação da placa LoRa, que no exemplo é de 915E6.

							
							
					/*
  This is a simple example show the Heltec.LoRa recived data in OLED.

  The onboard OLED display is SSD1306 driver and I2C interface. In order to make the
  OLED correctly operation, you should output a high-low-high(1-0-1) signal by soft-
  ware to OLED's reset pin, the low-level signal at least 5ms.

  OLED pins to ESP32 GPIOs via this connecthin:
  OLED_SDA -- GPIO4
  OLED_SCL -- GPIO15
  OLED_RST -- GPIO16
  
  by Aaron.Lee from HelTec AutoMation, ChengDu, China
  成都惠利特自动化科技有限公司
  www.heltec.cn
  
  This project is also available on GitHub:
  https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series
*/
#include "heltec.h" 
#include "images.h"

#define BAND    915E6  //you can set band here directly,e.g. 868E6,915E6
String rssi = "RSSI --";
String packSize = "--";
String packet ;

void logo(){
  Heltec.display->clear();
  Heltec.display->drawXbm(0,5,logo_width,logo_height,logo_bits);
  Heltec.display->display();
}

void LoRaData(){
  Heltec.display->clear();
  Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
  Heltec.display->setFont(ArialMT_Plain_10);
  Heltec.display->drawString(0 , 15 , "Received "+ packSize + " bytes");
  Heltec.display->drawStringMaxWidth(0 , 26 , 128, packet);
  Heltec.display->drawString(0, 0, rssi);  
  Heltec.display->display();
}

void cbk(int packetSize) {
  packet ="";
  packSize = String(packetSize,DEC);
  for (int i = 0; i < packetSize; i++) { packet += (char) LoRa.read(); }
  rssi = "RSSI " + String(LoRa.packetRssi(), DEC) ;
  LoRaData();
}

void setup() { 
   //WIFI Kit series V1 not support Vext control
  Heltec.begin(true /*DisplayEnable Enable*/, true /*Heltec.Heltec.Heltec.LoRa Disable*/, true /*Serial Enable*/, true /*PABOOST Enable*/, BAND /*long BAND*/);
 
  Heltec.display->init();
  Heltec.display->flipScreenVertically();  
  Heltec.display->setFont(ArialMT_Plain_10);
  logo();
  delay(1500);
  Heltec.display->clear();
  
  Heltec.display->drawString(0, 0, "Heltec.LoRa Initial success!");
  Heltec.display->drawString(0, 10, "Wait for incoming data...");
  Heltec.display->display();
  delay(1000);
  //LoRa.onReceive(cbk);
  LoRa.receive();
}

void loop() {
  int packetSize = LoRa.parsePacket();
  if (packetSize) { cbk(packetSize);  }
  delay(10);
}				
			

Após enviar o código para a placa, é necessário energizar ambas as placas LoRa ESP32 WiFi. Na placa transmissora, será exibido no display OLED a mensagem “Sending packet”, juntamente com a quantidade de pacotes enviados. Já na placa receptora, será exibido o valor do RSSI, que indica a intensidade do sinal recebido em dBm, o tamanho do pacote que foi recebido e, após a palavra “hello”, a quantidade de pacotes recebidos até o momento.

Lembrando que o valor do RSSI é um indicador de intensidade do sinal recebido, dado em dBm. Quanto mais próximo de zero for o valor RSSI, melhor será a qualidade do sinal recebido. Um valor de RSSI maior ou igual a -30dBm é considerado um sinal de ótima intensidade. Geralmente, na comunicação utilizando LoRa, o sinal pode ser recebido quando o RSSI é menor ou igual a -132dBm. Logo, quanto maior for a distância entre o transmissor e o receptor LoRa, mais longe de 0dBm será o valor do RSSI.

Resumo

O post apresenta um guia completo para utilizar a placa LoRa ESP32 WiFi com a IDE do Arduino. São apresentados os requisitos necessários para a instalação do driver serial, além de orientações para programar a placa, como a seleção da frequência de operação da comunicação LoRa. O tutorial também traz um exemplo de código para enviar e receber pacotes de dados entre duas placas LoRa, demonstrando no display OLED de cada placa o envio e recebimento de pacotes, além de fornecer informações sobre o RSSI e a qualidade do sinal recebido.

ROBOBUILDERS IMPORTACAO E COMERCIO DE PRODUTOS DE SISTEMAS E AUTOMACAO - CNPJ: 27.338.195/0001-30 © Todos os direitos reservados. 2023