Skip to main content
Device Type:misc
Electrical Standard:Global
Board:esp32

Heltec WiFi LoRa 32 V3

Heltec WiFi LoRa 32 V3

Model reference: WiFi LoRa 32 V3

Manufacturer: Heltec Automation

Product Description

The Heltec WiFi LoRa 32 V3 is a development board featuring an ESP32-S3 microcontroller with integrated WiFi, Bluetooth, and a Semtech SX1262 LoRa radio transceiver. It includes a 0.96" OLED display and is designed for IoT applications requiring long-range wireless communication.

Key Features

  • ESP32-S3 dual-core processor @ 240MHz
  • 8MB Flash memory
  • SX1262 LoRa radio (433MHz or 868/915MHz variants)
  • 0.96" OLED display (128x64)
  • WiFi 802.11 b/g/n
  • Bluetooth 5 (LE)
  • USB-C connector
  • LiPo battery connector with charging circuit
  • Onboard CP2102 USB-to-UART bridge

GPIO Pinout

LoRa SX1262 Pins

FunctionGPIO
SPI CLKGPIO9
SPI MOSIGPIO10
SPI MISOGPIO11
CSGPIO8
RSTGPIO12
BUSYGPIO13
DIO1GPIO14

Display (OLED)

FunctionGPIO
SDAGPIO17
SCLGPIO18
RSTGPIO21

Other Pins

FunctionGPIO
ButtonGPIO0
LEDGPIO35
Battery ADCGPIO1
Vext ControlGPIO36

Basic Configuration

Minimum configuration required for the Heltec WiFi LoRa 32 V3:

esphome:
name: "heltec"

esp32:
variant: esp32s3
flash_size: 8MB
cpu_frequency: 240MHZ
framework:
type: esp-idf

logger:
hardware_uart: UART0

api:

ota:
platform: esphome

wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password

# SPI bus for LoRa radio
spi:
clk_pin: GPIO9
mosi_pin: GPIO10
miso_pin: GPIO11

# I2C for OLED display
i2c:
sda: GPIO17
scl: GPIO18
frequency: 400kHz

LoRa Radio Configuration

# LoRa Radio Configuration (SX1262)
sx126x:
dio1_pin: GPIO14
cs_pin: GPIO8
busy_pin: GPIO13
rst_pin: GPIO12
pa_power: 3
bandwidth: 125_0kHz
crc_enable: true
frequency: 433920000
modulation: LORA
rx_start: true
hw_version: sx1262
rf_switch: true
sync_value: [0x14, 0x24]
preamble_size: 8
spreading_factor: 7
coding_rate: CR_4_6
tcxo_voltage: 1_8V
tcxo_delay: 5ms
on_packet:
- lambda: |-
ESP_LOGD("lora", "Received packet RSSI: %.2f dBm, SNR: %.2f dB, Data: %s",
rssi, snr, format_hex(x).c_str());

# Example button to send LoRa packet
button:
- platform: template
name: "Send LoRa Packet"
on_press:
then:
- sx126x.send_packet:
data: [0xDE, 0xAD, 0xBE, 0xEF, 0xCA, 0xFE, 0xBA, 0xBE]

FSK Modulation Configuration

# FSK Radio Configuration (SX1262)
sx126x:
dio1_pin: GPIO14
cs_pin: GPIO8
busy_pin: GPIO13
rst_pin: GPIO12
pa_power: 3
bandwidth: 78_2kHz
crc_enable: true
frequency: 433920000
modulation: FSK
rx_start: true
payload_length: 0
hw_version: sx1262
bitrate: 4800
rf_switch: true
sync_value: [0x33, 0x33]
preamble_size: 4
preamble_detect: 2
tcxo_voltage: 1_8V
tcxo_delay: 5ms
on_packet:
then:
- lambda: |-
ESP_LOGD("fsk", "Packet RSSI: %.2f dBm, SNR: %.2f dB, Data: %s",
rssi, snr, format_hex(x).c_str());

button:
- platform: template
name: "Send FSK Packet"
on_press:
then:
- sx126x.send_packet:
data: [0xC5, 0x51, 0x78, 0x82, 0xB7, 0xF9, 0x9C, 0x5C]

OLED Display Configuration

Configuration to use the onboard 0.96" OLED display:

# OLED Display
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
reset_pin: GPIO21
address: 0x3C
lambda: |-
it.printf(0, 0, id(font), "Heltec V3");
it.printf(0, 16, id(font), "WiFi LoRa 32");
it.printf(0, 32, id(font), "%.1f dBm", id(wifi_signal_db).state);

font:
- file: "gfonts://Roboto"
id: font
size: 14

sensor:
- platform: wifi_signal
id: wifi_signal_db
name: "WiFi Signal"
update_interval: 60s

Battery Monitoring

Configuration to monitor LiPo battery voltage:

sensor:
- platform: adc
pin: GPIO1
name: "Battery Voltage"
attenuation: 12db
filters:
- multiply: 2.0 # Voltage divider correction
update_interval: 60s

Power Management

The Vext pin (GPIO36) controls power to external peripherals. Set it LOW to enable power:

switch:
- platform: gpio
pin: GPIO36
id: vext
name: "Vext Control"
inverted: true
restore_mode: ALWAYS_ON