banner

Instalação do ESP32 LoRa na Arduino IDE



Volto hoje a falar sobre a instalação do ESP32 LoRa na Arduino IDE, assunto que já falei, mas que volto a tratar por necessidade de atualização. Vou te apresentar um passo a passo de instalação das bibliotecas do ESP32 LoRa, tanto para a comunicação LoRa quanto para o display. Ainda, te mostro um exemplo de código fonte utilizando algumas funções de LoRa e de display. No nosso projeto utilizado o microcontrolador da Heltec.





Instalação





Recursos usados

  • ESP32 LoRa Heltec
  • Cabo microusb para usb





Para quem já instalou Esp32

É necessário deletar as seguintes pastas:





Passos seguidos no vídeo:

1. Instalação da placa ESP32 (A placa Heltec_WiFi_LoRa_32 e Heltec_WiFi_Kit_32 também serão instaladas)
  1.1 -  Na sua Arduino IDE vá em:
           Arduino -> Preferências
           Em URLs Adicionais para Gerenciadores de Placas, adicione a url:
           https://dl.espressif.com/dl/package_esp32_index.json
  1.2 -  Na sua Arduino IDE vá em:
           Ferramentas -> Placas -> Gerenciador de placas
           Pesquise por: esp32
           Instale o pacote descrito como: esp32 by Espressif Systems

2. Instalação dos drivers Silicon Labs CP210x USB para UART Bridge VCP.
    Acesse: https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
    Baixe e instale o driver compatível com o seu S.O.

3. Instalação da biblioteca LoRa
    Na sua Arduino IDE vá em:
    Sketch -> Incluir biblioteca -> Gerenciar bibliotecas
    Pesquise por: LoRa
    Instale a biblioteca descrita como: LoRa (distribuída por Sandeep Mistry)

4. Instalação da biblioteca SSD1306 para o display  
    Na sua Arduino IDE vá em:
    Sketch -> Incluir biblioteca -> Gerenciar bibliotecas
    Pesquise por: SSD1306
    Instale a biblioteca descrita como: ESP8266 and ESP32 Oled Driver for SSD1306 display




Código

Declarações e variáveis

#include <LoRa.h>
#include <SSD1306.h>

// Pinos do display (comunicação i2c)
const int DISPLAY_ADDRESS_PIN = 0x3c;
const int DISPLAY_SDA_PIN = 4;
const int DISPLAY_SCL_PIN = 15;
const int DISPLAY_RST_PIN = 16;

// Pinos do lora (comunicação spi)
const int LORA_SCK_PIN = 5;
const int LORA_MISO_PIN = 19;
const int LORA_MOSI_PIN = 27;
const int LORA_SS_PIN = 18;
const int LORA_RST_PIN = 15;
const int LORA_DI00_PIN = 26;

// Frequência de comunicação
const int BAND = 433E6;

// Contador de pacotes enviados via lora
int counter = 0;

// Altura da fonte (correspondente a fonte ArialMT_Plain_16)
const int fontHeight = 16; 

// Objeto do display
SSD1306 display(DISPLAY_ADDRESS_PIN, DISPLAY_SDA_PIN, DISPLAY_SCL_PIN);





Setup

void setup() 
{
  // Iniciamos a serial com velocidade de 9600
  Serial.begin(9600);

  // Exibimos "Starting..." na serial (debug)
  Serial.println("Starting...");

  // Iniciamos o display
  if(!displayBegin())
  {
    // Se não deu certo, exibimos falha de display na serial
    Serial.println("Display failed!");
    // E deixamos em loop infinito
    while(1);
  }

  // Configuramos o posicionamento da tela, fonte e o alinhamento do texto
  displayConfig();
  
  // Iniciamos o lora
  if(!loraBegin()) 
  {
    // Se não deu certo, exibimos falha de lora na serial
    Serial.println("LoRa failed!");
    // E deixamos em loop infinito
    while (1);
  }  
}



Loop

void loop() 
{  
  // Variável usada para indicar em qual linha o cursor deverá estar quando uma mensagem no display for exibida
  int line;

  // Limpamos o display
  display.clear();
  
  // Iniciamos na primeira linha (zero)
  line = 0;

  // Escrevemos a mensagem "Sending packet: " na primeira linha
  display.drawString(0, line, "Sending packet: ");
  
  // Mudamos para a segunda linha
  line++;

  // Escrevemos o incrementador "counter" na segunda linha
  display.drawString(0, line * fontHeight, String(counter));

  // Exibimos as alterações no display
  display.display();

  // Enviamos um pacote com a mensagem "hello" concatenado com o número "counter"
  LoRa.beginPacket();
  LoRa.print("hello ");
  LoRa.print(counter);
  LoRa.endPacket();

  // Incrementamos o contador
  counter++;

  // Aguardamos 1 segundo
  delay(1000);
}



displayBegin e displayConfig

// Função que inicializa o display
bool displayBegin()
{
  // Reiniciamos o display
  pinMode(DISPLAY_RST_PIN, OUTPUT);
  digitalWrite(DISPLAY_RST_PIN, LOW);
  delay(1);
  digitalWrite(DISPLAY_RST_PIN, HIGH);
  delay(1);

  return display.init(); 
}

// Função que faz algumas configuções no display
void displayConfig()
{
  // Invertemos o display verticalmente
  display.flipScreenVertically();
  // Setamos a fonte
  display.setFont(ArialMT_Plain_16);
  // Alinhamos a fonta à esquerda
  display.setTextAlignment(TEXT_ALIGN_LEFT);
}



loraBegin

// Função que inicializa o radio lora
bool loraBegin()
{
  // Iniciamos a comunicação SPI
  SPI.begin(LORA_SCK_PIN, LORA_MISO_PIN, LORA_MOSI_PIN, LORA_SS_PIN);
  // Setamos os pinos do lora
  LoRa.setPins(LORA_SS_PIN, LORA_RST_PIN, LORA_DI00_PIN);
  // Iniciamos o lora
  return LoRa.begin(BAND);
}




Opções de compilação





Faça o download dos arquivos:

PDF

INO






3 comentários:

  1. Valeu Fernando, estava apanhando para configurar minha heltec que recebi ontem!!!

    ResponderExcluir
  2. Valeu Fernando, muito bem explicado. Só faltou o INO de receptor. É possível disponibiliza-lo?

    ResponderExcluir
  3. Amigo,
    Poste sua dúvida no www.forum.fernandok.com.
    Vamos formar uma comunidade e ajudar uns aos outros.

    ResponderExcluir

Tecnologia do Blogger.