Installing ESP32 LoRa on the Arduino IDE
by Fernando Koyanagi in Circuits > Microcontrollers
4400 Views, 4 Favorites, 0 Comments
Installing ESP32 LoRa on the 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
Resources Used
ESP32 LoRa Heltec
Micro USB to USB cable
For Those Who Have Already Installed Esp32
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