Placa LoRa ESP32 WiFi com Display OLED: 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âmetro | Detalhes |
|---|---|
| Modelo de referência | Heltec WiFi LoRa 32 (V2) |
| Processador | Xtensa® Dual-Core 32-Bit LX6 |
| SoC Base | ESP32-D0WDQ6 |
| Frequência de Clock | 80 MHz a 240 MHz (Ajustável) |
| Memória ROM | 448 KB |
| Memória SRAM | 520 KB |
| Memória Flash Externa | 4 MB (32-Bit SPI) |
| Tensão de Nível Lógico | 3,3 VDC |
| Alimentação USB | 5 VDC (≥ 500 mA) |
| Alimentação por Bateria | Conector JST para Bateria de Lítio 3,7V a 4,2V (≥ 250 mA) |
| Display Integrado | OLED monocromático azul/branco de 0,96” (128×64 pixels) |
| Driver do Display | SSD1306 (Barramento I2C) |
| Chip Transceptor LoRa | Semtech SX1278 (433 MHz) / SX1276 (868/915 MHz) |
| Frequências de Operação | 433 MHz, 868 MHz ou 915 MHz (configurável por software/hardware) |
| Sensibilidade LoRa | Até -139 dBm |
| Potência Máxima de Saída LoRa | +20 dBm (100 mW ajustável) |
| Modulações Suportadas | LoRa, FSK, GFSK, OOK |
| Taxa de Transferência LoRa | 0,018 kbps a 37,5 kbps |
| Padrão Wi-Fi | 802.11 b/g/n (2,4 GHz a 2,5 GHz) |
| Segurança Wi-Fi | WPA / WPA2 / WPA2-Enterprise / WPS (AES / RSA / ECC / SHA) |
| Bluetooth | v4.2 BR/EDR e BLE (Bluetooth Low Energy) |
| Temperatura de Operação | -40 °C a +85 °C |
| Dimensões da Placa | 51 mm × 25 mm × 8 mm |
| Peso | 12,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.
Pinagem interna dos periféricos onboard
- Display OLED 0,96” (SSD1306):
SDA: GPIO 4SCL: GPIO 15RST (Reset do OLED): GPIO 16
- Transceptor LoRa (SX1276/SX1278 via SPI):
LoRa_NSS (Chip Select): GPIO 18LoRa_SCK: GPIO 5LoRa_MISO: GPIO 19LoRa_MOSI: GPIO 27LoRa_RST: GPIO 14LoRa_DIO0 (Interrupção de pacote): GPIO 26LoRa_DIO1: GPIO 35LoRa_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)eGPIO15 (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.
- Acesse a página oficial de download da Arduino IDE clicando aqui;
- Escolha a versão correspondente ao seu sistema operacional (Windows, Linux ou macOS);
- Na página de contribuição opcional, clique em “Just Download”;
- Após concluir o download do arquivo instalador, execute-o e conclua a instalação padrão.
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:
- Abra o Windows Explorer, digite
%localappdata%na barra de endereços e acesse a pastaArduino15(caminho completo:C:\Users\<SeuUsuario>\AppData\Local\Arduino15); - Exclua a pasta
Arduino15para remover pacotes corrompidos; - Em seguida, acesse sua pasta de documentos em
Documentos\Arduino\librariese remova versões antigas da biblioteca Heltec ou LoRa para evitar conflitos de compilação.
Passo 3: Configurando o suporte a placas ESP32 na IDE
- Abra a IDE do Arduino, clique no menu Arquivo (File) e selecione Preferências (Preferences);
- Localize o campo URLs Adicionais para Gerenciadores de Placas e clique no ícone à direita;
- Cole a URL oficial do pacote de placas da Espressif e clique em OK:
https://dl.espressif.com/dl/package_esp32_index.json
- Vá no menu Ferramentas ➞ Placa ➞ Gerenciador de Placas… (Boards Manager);
- 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.
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:
- Acesse a página oficial de drivers da Silicon Labs através do link: Silicon Labs CP210x VCP Drivers;
- Baixe o pacote CP210x Universal Windows Driver;
- Descompacte o arquivo
.zipem uma pasta no seu computador; - Clique com o botão direito sobre o arquivo
.infe selecione Instalar, ou execute o instalador executável de acordo com a arquitetura do seu sistema (64 bits).
Passo 5: Instalação das bibliotecas Heltec e SSD1306
- Na IDE do Arduino, acesse Sketch ➞ Incluir Biblioteca ➞ Gerenciar Bibliotecas…;
- 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;
- Em seguida, pesquise por
SSD1306e instale a biblioteca ESP8266 and ESP32 OLED driver for SSD1306 displays (desenvolvida por Daniel Eichhorn / Fabrice Weinberg);
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 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
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.