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);
}






5 Comentários
Valeu Fernando, estava apanhando para configurar minha heltec que recebi ontem!!!
ResponderExcluirValeu Fernando, muito bem explicado. Só faltou o INO de receptor. É possível disponibiliza-lo?
ResponderExcluirAmigo,
ResponderExcluirPoste sua dúvida no www.forum.fernandok.com.
Vamos formar uma comunidade e ajudar uns aos outros.
muito bom, muito atencioso e profissional.
ResponderExcluirFernando, a biblioteca do display não existe a do mesmo autor.... Tem uma com o nome quase igual, eu devo baixar ela?
ResponderExcluir