Installing ESP32 LoRa on the Arduino IDE

by Fernando Koyanagi in Circuits > Microcontrollers

3981 Views, 3 Favorites, 0 Comments

Installing ESP32 LoRa on the Arduino IDE

Instalação do ESP32 LoRa na Arduino IDE

Today, I am going to talk about the installation of ESP32 LoRa in the Arduino IDE. I have already talked about this subject before, but I think it needs an update. I will introduce you the installation of the ESP32 LoRa libraries step by step, both for LoRa communication and for the display. Also, I will show a sample source code using some LoRa and display functions. In this Project, we use the Heltec microcontroller.

Demonstration

DEMO.png

Resources Used

7.png

ESP32 LoRa Heltec

Micro USB to USB cable

For Those Who Have Already Installed Esp32

8.png

You must delete the following folders:

Steps Followed in the Video

1. Installation of the ESP32 card (The Heltec_WiFi_LoRa_32 and Heltec_WiFi_Kit_32 cards will also be installed)

1.1 - In your Arduino IDE go to:

Arduino -> Preferences

In Additional URLs for Cards Managers, add the url:

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

1.2 - In your Arduino IDE go to:

Tools -> Cards -> Cards Manager

Search for: esp32

Install the package described as: esp32 by Espressif Systems

2. Installation of Silicon Labs CP210x USB drivers for UART Bridge VCP.

Go to: https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

Download and install the driver compatible with your OS

3. LoRa library installation

In your IDE Arduino go to:

Sketch -> Include library -> Manage libraries

Search for: LoRa

Install the library described as: LoRa (distributed by Sandeep Mistry)

4. Installing the SSD1306 library for the display

In your IDE Arduino go to:

Sketch -> Include library -> Manage libraries

Search for: SSD1306

Install the library described as: ESP8266 and ESP32 Oled Driver for SSD1306 display

Code: Declarations and Variables

#include 
#include

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

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


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

Code: Display Begin and Display Config

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

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

Compilation Options

18.png

Download the Files