Placa LoRa ESP32 WiFi com Display OLED: Manual Técnico Completo

Placa LoRa ESP32 WiFi — manual técnico completo

Introdução

Neste manual, será apresentado como instalar, configurar e utilizar a Placa LoRa ESP32 WiFi com Display OLED utilizando a Arduino IDE. Se desejar adquirir este componente com garantia e suporte técnico, clique aqui.

⚠️ Atenção: O módulo LoRa ESP32 WiFi nunca deve ser energizado sem que a antena esteja devidamente conectada, pois a transmissão de radiofrequência sem carga dissipativa pode queimar os componentes do estágio de amplificação de potência (PA) do chip transceptor Semtech LoRa.

Descrições gerais do produto

O que é a Placa LoRa ESP32 WiFi?

A Placa LoRa ESP32 WiFi (comumente baseada no projeto Heltec WiFi LoRa 32) é uma plataforma de desenvolvimento compacta e de alta performance que integra três tecnologias de comunicação sem fio essenciais em uma única placa: Wi-Fi 802.11 b/g/n, Bluetooth v4.2 BR/EDR + BLE e conectividade de longo alcance LoRa (Long Range).

Equipada com o microprocessador Xtensa® 32-Bit LX6 Dual Core (SoC ESP32-D0WDQ6) de baixo consumo de energia, a placa possui clock ajustável de 80 a 240 MHz, memória SRAM de 520 KB e memória Flash de 4 MB. Além disso, conta com uma tela OLED monocromática de 0,96 polegadas (128×64 pixels) integrada via barramento I2C, circuito de gerenciamento de carga com conector para bateria de lítio de 3,7V (Li-Ion/Li-Po) e transceptor Semtech SX1276/SX1278.

Para que serve?

  • Comunicação de dados a longas distâncias — transmissão de telemetria e controle bidirecional entre nós remotos em alcances de vários quilômetros sem necessidade de sinal de celular ou roteador Wi-Fi;
  • Estações meteorológicas e monitoramento ambiental/agrícola — coleta de dados de sensores em campo aberto, lavouras ou áreas industriais com alimentação por bateria e painel solar;
  • Sistemas de telemetria e Internet das Coisas (IoT) — envio de alertas, monitoramento de reservatórios, controle de atuadores e integração com redes LoRaWAN, The Things Network (TTN) ou servidores MQTT via gateway Wi-Fi.

Por que devo usar?

  • Tríplice conectividade integrada: reúne LoRa para comunicação ponto a ponto de longo alcance, Wi-Fi para conexão com a nuvem/rede local e Bluetooth para configuração direta via smartphone;
  • Display OLED integrado: permite exibir diagnósticos, dados de telemetria, contadores de pacotes e nível de sinal (RSSI) em tempo real sem ocupar espaço de protoboard nem fiação extra;
  • Gerenciamento de energia avançado: suporte nativo a modos de hibernação profunda (Deep Sleep) e conector integrado para bateria Li-Po de 3,7V com circuito de recarga via USB.

Quando devo usar?

A Placa LoRa ESP32 WiFi é a escolha indicada quando:

  • Seu projeto requer transmissão de dados entre pontos distantes (de centenas de metros a dezenas de quilômetros em linha de visada) com baixo volume de dados e economia de energia;
  • O sistema opera em locais remotos onde não há cobertura de sinal de celular, infraestrutura de rede cabeada ou sinal de Wi-Fi;
  • É necessário visualizar informações locais no próprio dispositivo por meio do display gráfico integrado.

Não é a melhor escolha quando:

  • A aplicação exige alta largura de banda para transmissão contínua de áudio em tempo real ou streaming de vídeo (recomenda-se ESP32-CAM ou conexão Wi-Fi dedicada);
  • O projeto necessita de dezenas de GPIOs livres simultaneamente sem multiplexadores (o circuito interno do display OLED e o transceptor LoRa utilizam pinos dedicados do ESP32).

Como funciona a tecnologia LoRa

A tecnologia LoRa (Long Range) utiliza uma técnica proprietária de modulação por rádio por espalhamento espectral (Chirp Spread Spectrum — CSS). Essa modulação varia a frequência do sinal ao longo do tempo (pulsos chirp), garantindo altíssima imunidade a ruídos, interferências eletromagnéticas e efeito Doppler.

Diferente do Wi-Fi e do Bluetooth, que operam com alta largura de banda em frequências de 2,4 GHz e possuem alcance restrito a poucos metros, o rádio LoRa opera em faixas de sub-giga-hertz (como 433 MHz, 868 MHz e 915 MHz). Isso confere alta capacidade de penetração de sinal e excelente sensibilidade de recepção (de até -139 dBm), permitindo enlaces estáveis a quilômetros de distância consumindo frações da potência exigida por tecnologias convencionais.

Especificações técnicas

Principais especificações

ParâmetroDetalhes
Modelo de referênciaHeltec WiFi LoRa 32 (V2)
ProcessadorXtensa® Dual-Core 32-Bit LX6
SoC BaseESP32-D0WDQ6
Frequência de Clock80 MHz a 240 MHz (Ajustável)
Memória ROM448 KB
Memória SRAM520 KB
Memória Flash Externa4 MB (32-Bit SPI)
Tensão de Nível Lógico3,3 VDC
Alimentação USB5 VDC (≥ 500 mA)
Alimentação por BateriaConector JST para Bateria de Lítio 3,7V a 4,2V (≥ 250 mA)
Display IntegradoOLED monocromático azul/branco de 0,96” (128×64 pixels)
Driver do DisplaySSD1306 (Barramento I2C)
Chip Transceptor LoRaSemtech SX1278 (433 MHz) / SX1276 (868/915 MHz)
Frequências de Operação433 MHz, 868 MHz ou 915 MHz (configurável por software/hardware)
Sensibilidade LoRaAté -139 dBm
Potência Máxima de Saída LoRa+20 dBm (100 mW ajustável)
Modulações SuportadasLoRa, FSK, GFSK, OOK
Taxa de Transferência LoRa0,018 kbps a 37,5 kbps
Padrão Wi-Fi802.11 b/g/n (2,4 GHz a 2,5 GHz)
Segurança Wi-FiWPA / WPA2 / WPA2-Enterprise / WPS (AES / RSA / ECC / SHA)
Bluetoothv4.2 BR/EDR e BLE (Bluetooth Low Energy)
Temperatura de Operação-40 °C a +85 °C
Dimensões da Placa51 mm × 25 mm × 8 mm
Peso12,5 g

Esquema de conexão e pinagem

A seguir é apresentado o mapa completo de pinos e pinout da placa. Alguns pinos de GPIO são compartilhados com periféricos onboard vitais (transceptor LoRa, controlador do display OLED e circuito de medição de bateria). Portanto, consulte atentamente o diagrama antes de conectar sensores externos.

Diagrama de pinagem e conexões da placa Heltec WiFi LoRa 32 ESP32

Pinagem interna dos periféricos onboard

  • Display OLED 0,96” (SSD1306):
    • SDA: GPIO 4
    • SCL: GPIO 15
    • RST (Reset do OLED): GPIO 16
  • Transceptor LoRa (SX1276/SX1278 via SPI):
    • LoRa_NSS (Chip Select): GPIO 18
    • LoRa_SCK: GPIO 5
    • LoRa_MISO: GPIO 19
    • LoRa_MOSI: GPIO 27
    • LoRa_RST: GPIO 14
    • LoRa_DIO0 (Interrupção de pacote): GPIO 26
    • LoRa_DIO1: GPIO 35
    • LoRa_DIO2: GPIO 34
  • LED Onboard: GPIO 25
  • Leitura de Tensão da Bateria (ADC): GPIO 37 (via divisor resistivo acionado pelo pino de controle de leitura)

💡 Dica: Durante o processo de gravação de firmware (bootloader), é fundamental que os seguintes pinos de bootstrapping estejam em seus estados lógicos recomendados: GPIO5 (LOW), GPIO12 (LOW) e GPIO15 (HIGH).

Configurando o ESP32 na IDE do Arduino

Para programar a placa com a IDE do Arduino, acompanhe o guia passo a passo a seguir:

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 é ter o software instalado no computador. Se você já tem a versão atualizada da Arduino IDE, avance para o próximo passo.

  1. Acesse a página oficial de download da Arduino IDE clicando aqui;
  2. Escolha a versão correspondente ao seu sistema operacional (Windows, Linux ou macOS);
  3. Na página de contribuição opcional, clique em “Just Download”;
  4. Após concluir o download do arquivo instalador, execute-o e conclua a instalação padrão.
Página de download do software Arduino IDE oficial

Passo 2: Limpeza de versões legadas do pacote ESP32 (caso já tenha instalado)

Caso seja a primeira vez que você está instalando o ecossistema ESP32 na sua Arduino IDE, pule para o Passo 3.

Se você já possuía uma instalação muito antiga do pacote de placas ESP32 ou enfrenta conflitos de bibliotecas legadas:

  1. Abra o Windows Explorer, digite %localappdata% na barra de endereços e acesse a pasta Arduino15 (caminho completo: C:\Users\<SeuUsuario>\AppData\Local\Arduino15);
  2. Exclua a pasta Arduino15 para remover pacotes corrompidos;
  3. Em seguida, acesse sua pasta de documentos em Documentos\Arduino\libraries e remova versões antigas da biblioteca Heltec ou LoRa para evitar conflitos de compilação.
Exclusão de diretório legado do Arduino15 no AppData do Windows Pasta de bibliotecas do Arduino no diretório de Documentos

Passo 3: Configurando o suporte a placas ESP32 na IDE

  1. Abra a IDE do Arduino, clique no menu Arquivo (File) e selecione Preferências (Preferences);
Janela de Preferências da IDE do Arduino
  1. Localize o campo URLs Adicionais para Gerenciadores de Placas e clique no ícone à direita;
Botão de edição de URLs adicionais de placas no Arduino IDE
  1. Cole a URL oficial do pacote de placas da Espressif e clique em OK:
https://dl.espressif.com/dl/package_esp32_index.json
Inserção da URL oficial do pacote ESP32 nas preferências
  1. Vá no menu Ferramentas ➞ Placa ➞ Gerenciador de Placas… (Boards Manager);
Menu do Gerenciador de Placas na Arduino IDE
  1. Na caixa de pesquisa, digite ESP32. Localize o pacote esp32 mantido por Espressif Systems, clique no botão Instalar e aguarde o download completo dos compiladores e ferramentas.
Instalação do pacote de placas ESP32 da Espressif Systems

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

A placa LoRa ESP32 utiliza o circuito integrado ponte CP2102 / CP210x da Silicon Labs para converter a interface USB do computador na comunicação serial UART do ESP32. Para que o computador reconheça a porta COM da placa:

  1. Acesse a página oficial de drivers da Silicon Labs através do link: Silicon Labs CP210x VCP Drivers;
  2. Baixe o pacote CP210x Universal Windows Driver;
  3. Descompacte o arquivo .zip em uma pasta no seu computador;
  4. Clique com o botão direito sobre o arquivo .inf e selecione Instalar, ou execute o instalador executável de acordo com a arquitetura do seu sistema (64 bits).
Download do instalador do driver CP210x USB to UART Bridge

Passo 5: Instalação das bibliotecas Heltec e SSD1306

  1. Na IDE do Arduino, acesse Sketch ➞ Incluir Biblioteca ➞ Gerenciar Bibliotecas…;
Menu Gerenciador de Bibliotecas na IDE Arduino
  1. Na barra de pesquisa, digite Heltec ESP32. Localize a biblioteca Heltec ESP32 Dev-Boards (distribuída pela HelTec Automation). Selecione a versão estável 1.0.9 (ou versão compatível com sua placa) e clique em Instalar;
Instalação da biblioteca Heltec ESP32 Dev-Boards versão 1.0.9
  1. Em seguida, pesquise por SSD1306 e instale a biblioteca ESP8266 and ESP32 OLED driver for SSD1306 displays (desenvolvida por Daniel Eichhorn / Fabrice Weinberg);
Instalação da biblioteca SSD1306 para display OLED no Arduino

Comunicação LoRa Ponto a Ponto: Transmissor e Receptor

Com o ambiente devidamente configurado, demonstraremos a comunicação sem fio ponto a ponto utilizando duas unidades da Placa LoRa ESP32 WiFi:

  • Placa 1 (Transmissora / Sender): envia pacotes de dados sequenciais via rádio LoRa a cada 1 segundo e exibe a contagem na tela OLED;
  • Placa 2 (Receptora / Receiver): recebe os pacotes de dados transmitidos, exibe o conteúdo da mensagem na tela OLED, o tamanho do pacote em bytes e a intensidade do sinal recebido (RSSI em dBm).
Seleção da placa Heltec WiFi LoRa 32 no menu Ferramentas

Seleção da frequência de operação LoRa

No código-fonte, a frequência do rádio deve ser configurada de acordo com a banda de hardware da sua placa:

  • Para placas de 433 MHz: utilize a constante 433E6
  • Para placas de 868 MHz: utilize a constante 868E6
  • Para placas de 915 MHz (padrão Brasil / Américas): utilize a constante 915E6
Abertura do exemplo OLED_LoRa_Sender no menu de Exemplos

Código 1: Transmissor (OLED_LoRa_Sender)

Conecte a primeira placa LoRa ESP32 ao computador via cabo USB. No menu Ferramentas ➞ Placa, selecione Heltec WiFi LoRa 32(V2), escolha a porta COM correspondente e faça o envio do código abaixo:

// Inclusão da biblioteca oficial Heltec com suporte unificado a OLED e LoRa
#include "heltec.h"

// Definição da banda de frequência (915 MHz para operação autorizada no Brasil)
#define BAND 915E6

// Variável global para contagem incremental de pacotes transmitidos
unsigned int counter = 0;

void setup() {
  // Inicialização unificada da placa Heltec:
  // Parâmetros: (Display Habilitado, LoRa Habilitado, Serial Habilitada, PABOOST Habilitado, Frequência)
  Heltec.begin(true /*DisplayEnable*/, true /*LoRaEnable*/, true /*SerialEnable*/, true /*PABOOST*/, BAND /*Banda*/);
  
  // Limpa o buffer de pixels do display OLED
  Heltec.display->clear();
  // Define a fonte padrão de texto para Arial 10 pontos
  Heltec.display->setFont(ArialMT_Plain_10);
  // Define o alinhamento horizontal do texto à esquerda
  Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
  // Desenha a mensagem informativa de inicialização na coordenada (0, 0)
  Heltec.display->drawString(0, 0, "Iniciando LoRa Sender...");
  // Atualiza a tela física com as informações desenhadas no buffer
  Heltec.display->display();
  // Aguarda 1 segundo para visualização da mensagem
  delay(1000);
}

void loop() {
  // Limpa o display OLED para montagem do novo quadro
  Heltec.display->clear();
  // Escreve o rótulo de envio na linha superior
  Heltec.display->drawString(0, 0, "Sending packet:");
  // Converte e renderiza o número do pacote atual
  Heltec.display->drawString(0, 20, String(counter));
  // Envia as alterações para o display OLED
  Heltec.display->display();

  // Inicia a criação de um novo pacote de transmissão LoRa
  LoRa.beginPacket();
  // Insere a string de cabeçalho da mensagem
  LoRa.print("hello ");
  // Anexa o número do contador ao corpo do pacote
  LoRa.print(counter);
  // Finaliza o pacote e dispara a transmissão via radiofrequência
  LoRa.endPacket();

  // Envia log de depuração via monitor serial
  Serial.print("Pacote enviado com sucesso: ");
  Serial.println(counter);

  // Incrementa o contador para a próxima iteração
  counter++;
  // Intervalo de 1 segundo entre cada envio
  delay(1000);
}

Código 2: Receptor (OLED_LoRa_Receiver)

Desconecte a placa transmissora e conecte a segunda placa ao computador. Selecione a nova porta COM e envie o programa receptor abaixo:

// Inclusão da biblioteca oficial Heltec para controle da placa
#include "heltec.h"

// Definição da banda de frequência (deve ser idêntica à do transmissor)
#define BAND 915E6

// Variável para armazenar a intensidade de sinal recebida (RSSI em dBm)
String rssi = "RSSI --";
// Variável para armazenar a quantidade de bytes recebidos no pacote
String packSize = "--";
// Variável para armazenar o conteúdo em texto do pacote recebido
String packet;

// Função responsável por renderizar os dados recebidos na tela OLED
void loraData() {
  // Limpa o conteúdo anterior do display
  Heltec.display->clear();
  // Configura alinhamento à esquerda
  Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
  // Define o tamanho da fonte
  Heltec.display->setFont(ArialMT_Plain_10);
  // Exibe a intensidade do sinal RSSI na primeira linha
  Heltec.display->drawString(0, 0, rssi);
  // Exibe a quantidade de bytes recebidos na segunda linha
  Heltec.display->drawString(0, 15, "Recebido " + packSize + " bytes");
  // Exibe o texto da mensagem com quebra de linha automática
  Heltec.display->drawStringMaxWidth(0, 30, 128, packet);
  // Atualiza o display físico
  Heltec.display->display();
}

// Função de callback acionada sempre que um pacote LoRa válido é detectado
void cbk(int packetSize) {
  // Reinicia a string acumuladora de dados
  packet = "";
  // Converte o tamanho do pacote para string decimal
  packSize = String(packetSize, DEC);
  
  // Realiza a leitura byte a byte dos dados presentes no buffer do rádio
  for (int i = 0; i < packetSize; i++) {
    // Converte o byte recebido em caractere ASCII e anexa à string
    packet += (char) LoRa.read();
  }
  
  // Lê a intensidade de sinal do último pacote recebido em dBm
  rssi = "RSSI " + String(LoRa.packetRssi(), DEC) + " dBm";
  
  // Imprime os dados no monitor serial para depuração
  Serial.print("Mensagem: ");
  Serial.print(packet);
  Serial.print(" | ");
  Serial.println(rssi);
  
  // Atualiza as informações no display OLED
  loraData();
}

void setup() {
  // Inicialização unificada da placa Heltec
  Heltec.begin(true /*DisplayEnable*/, true /*LoRaEnable*/, true /*SerialEnable*/, true /*PABOOST*/, BAND /*Banda*/);
  
  // Inicializa o controlador do display gráfico OLED
  Heltec.display->init();
  // Ajusta a orientação da tela caso necessário
  Heltec.display->flipScreenVertically();  
  // Define a fonte padrão
  Heltec.display->setFont(ArialMT_Plain_10);
  // Limpa o buffer
  Heltec.display->clear();
  // Exibe mensagem de prontidão do sistema
  Heltec.display->drawString(0, 0, "Heltec LoRa Inicializado!");
  Heltec.display->drawString(0, 12, "Aguardando pacotes...");
  Heltec.display->display();
  // Aguarda 1 segundo
  delay(1000);
  
  // Coloca o rádio LoRa em modo de recepção contínua
  LoRa.receive();
}

void loop() {
  // Verifica se há pacotes prontos para leitura no buffer do transceptor
  int packetSize = LoRa.parsePacket();
  
  // Se o tamanho for maior que zero, executa o processamento do pacote
  if (packetSize) {
    cbk(packetSize);
  }
  
  // Pequeno delay para estabilidade de polling
  delay(10);
}

Entendendo o valor de RSSI e a qualidade do sinal

O RSSI (Received Signal Strength Indicator) é o indicador que mensura a potência do sinal de rádio recebido pela antena, expresso em dBm (decibéis-miliwatt) em uma escala logarítmica com valores negativos:

  • RSSI de -30 dBm a -60 dBm: Sinal excelente, os nós transmissores e receptores estão muito próximos e com linha de visada desobstruída;
  • RSSI de -60 dBm a -90 dBm: Sinal bom a moderado, operação estável para a grande maioria das aplicações de campo;
  • RSSI de -90 dBm a -120 dBm: Sinal fraco, presença de múltiplos obstáculos (paredes, vegetação) ou grande distância física;
  • RSSI de -120 dBm a -139 dBm: Limite de sensibilidade do receptor LoRa. Acima de -132 dBm a -139 dBm podem ocorrer perdas esporádicas de pacotes.

💡 Dica: Para maximizar o alcance das placas, utilize antenas com ganho adequado (2,15 dBi ou superior), posicione os nós em locais elevados em relação ao solo e utilize cabos de extensão com baixa perda de inserção.

Conclusão

Este manual abordou de forma completa o uso, a instalação e a programação da Placa LoRa ESP32 WiFi com Display OLED:

  • O que é e como funciona: conhecemos a arquitetura do SoC ESP32 integrado ao transceptor Semtech LoRa e à tela OLED de 0,96 polegadas;
  • Especificações técnicas: analisamos os dados de consumo elétrico, frequência de operação, memória e sensibilidade de recepção de rádio;
  • Pinagem e periféricos onboard: mapeamos a pinagem do display SSD1306, da interface SPI com o transceptor SX1276/SX1278 e os cuidados com GPIOs de inicialização;
  • Configuração na Arduino IDE: detalhamos o passo a passo de inclusão da URL da Espressif, instalação dos drivers CP210x e das bibliotecas Heltec;
  • Comunicação ponto a ponto na prática: implementamos dois códigos completos e comentados (Sender e Receiver) para transmissão contínua de telemetria com monitoramento de pacotes e métricas de sinal RSSI.

Com este ecossistema, você dispõe de uma solução robusta e versátil para projetos de Internet das Coisas (IoT), telemetria agrícola, estações ambientais remotas e redes mesh de longo alcance.

Solução de problemas

Olá! Sou o assistente técnico da RoboBuilders. Descreva seu problema com o Placa LoRa ESP32 WiFi com Display OLED: Manual Técnico Completo e eu ajudarei a encontrar a solução.

O assistente usa IA e pode errar. Confirme informações críticas no datasheet oficial do fabricante.