Documentation

SX1262 ESP32-S3 0.96" Blue OLED Bluetooth & WiFi Development Board for Arduino, 868-915MHz, with LoRa Antenna, Pre-Soldered | ShillehTek Product Manual
Documentation / SX1262 ESP32-S3 0.96" Blue OLED Bluetooth & WiFi Development Board for Arduino, 868-915MHz, with LoRa Antenna, Pre-Soldered | ShillehTek Product Manual

SX1262 ESP32-S3 0.96" Blue OLED Bluetooth & WiFi Development Board for Arduino, 868-915MHz, with LoRa Antenna, Pre-Soldered | ShillehTek Product Manual

Overview

This is the Heltec WiFi LoRa 32 V3 — an ESP32-S3 development board with onboard SX1262 LoRa transceiver, 0.96" blue OLED display, USB-C, and an external SMA antenna for 868/915 MHz LoRa communication. It's the all-in-one IoT board for makers who want WiFi, Bluetooth LE, AND long-range LoRa in a single small package, with a screen for status and debugging built right in.

The ESP32-S3 brings dual-core Xtensa LX7 cores up to 240 MHz, 8 MB flash, and 8 MB PSRAM. The SX1262 is a state-of-the-art LoRa modem with up to +22 dBm output, sensitivity down to -148 dBm, and effective range of several kilometers in line-of-sight setups. The 0.96" SSD1306-style OLED is wired to fixed I2C pins (SDA = GPIO 17, SCL = GPIO 18) and a hardware reset on GPIO 21 — a must-include in any sketch.

At a Glance

MCU
ESP32-S3 (240 MHz)
LoRa Chip
Semtech SX1262
Frequency
868 / 915 MHz
Display
0.96" OLED 128×64
Wireless
WiFi + BLE + LoRa
USB
USB-C (CP2102)

Specifications

Parameter Value
Microcontroller ESP32-S3 (dual-core Xtensa LX7, 240 MHz)
Flash / PSRAM 8 MB / 8 MB
WiFi 802.11 b/g/n (2.4 GHz)
Bluetooth BLE 5.0
LoRa Chip Semtech SX1262
LoRa Frequency 868 MHz (EU) or 915 MHz (US, AU) — depends on variant
LoRa TX Power Up to +22 dBm
LoRa Sensitivity -148 dBm
OLED Display 0.96" SSD1306-compatible, 128×64, blue
USB to Serial CP2102
Connector USB-C, SMA antenna
Operating Voltage 3.3V (logic), 5V via USB
GPIO 40+ broken out via 0.1" headers

Pinout Diagram

Heltec WiFi LoRa 32 V3 (ESP32-S3 + SX1262) pin map showing Header J2, Header J3, OLED I2C pins, LoRa SPI pins, and antenna connector

Wiring Guide

Onboard Wiring (Pre-Wired)

The OLED and SX1262 are already wired to fixed GPIOs on the ESP32-S3. You don't connect anything — just remember these in your sketch.

Function ESP32-S3 GPIO
OLED SDA GPIO 17
OLED SCL GPIO 18
OLED RST GPIO 21 (must drive HIGH after boot)
Vext (control external 3.3V to OLED) GPIO 36 (active LOW)
SX1262 NSS (CS) GPIO 8
SX1262 SCK GPIO 9
SX1262 MOSI GPIO 10
SX1262 MISO GPIO 11
SX1262 RST GPIO 12
SX1262 BUSY GPIO 13
SX1262 DIO1 GPIO 14
USER button GPIO 0 (active LOW, also BOOT)
LED (programmable) GPIO 35
Critical: You MUST drive the OLED reset (GPIO 21) HIGH at startup or the screen stays blank. Standard sketches do this in setup() — don't skip it.

Onboard LED + USER Button

Item GPIO Behavior
LED GPIO 35 HIGH = on, LOW = off
USER button GPIO 0 Press = LOW; also doubles as BOOT button

Adding an External I2C Sensor

The OLED already uses I2C (GPIO 17/18). You can hang additional I2C devices on the SAME bus — they coexist as long as they have different I2C addresses.

Sensor Pin Connect To
VCC 3V3 header pin
GND GND header pin
SDA GPIO 17 (shared with OLED)
SCL GPIO 18 (shared with OLED)

Adding an External SPI Device

SPI0 is dedicated to the SX1262. For a second SPI device, use SPI2 (HSPI) on different GPIOs:

SPI2 Function GPIO
SCK GPIO 41
MOSI GPIO 42
MISO GPIO 40
CS any free GPIO (e.g., GPIO 39)
Tip: Avoid GPIO 33-37 if possible — those are used for internal flash/PSRAM on the ESP32-S3.

Code Examples

Arduino IDE Setup

setup_arduino.txt
1. In Arduino IDE -> Preferences, add this Boards Manager URL:
   https://resource.heltec.cn/download/package_heltec_esp32_index.json

2. Tools -> Board -> Boards Manager -> install "Heltec ESP32 Series Dev-boards"

3. Tools -> Board -> Heltec ESP32 Arduino -> "WiFi LoRa 32(V3)"

4. Tools -> Port -> (your CP2102 USB-C port)

5. Install the Heltec_ESP32 library via Library Manager.

Arduino — OLED "Hello World"

oled_hello.ino
// Heltec WiFi LoRa 32 V3 - OLED "Hello World"

#include <Wire.h>
#include <HT_SSD1306Wire.h>

SSD1306Wire display(0x3c, 500000, SDA_OLED, SCL_OLED, GEOMETRY_128_64, RST_OLED);

void setup() {
  pinMode(Vext, OUTPUT);
  digitalWrite(Vext, LOW);   // power on Vext rail
  delay(50);

  display.init();
  display.setFont(ArialMT_Plain_16);
  display.drawString(0, 0, "Hello,");
  display.drawString(0, 20, "ShillehTek!");
  display.drawString(0, 40, "WiFi LoRa V3");
  display.display();
}

void loop() {}

Arduino — LoRa Send + Receive

lora_basic.ino
// Heltec WiFi LoRa 32 V3 - send and receive
// Library: RadioLib by jgromes

#include <RadioLib.h>

// SX1262 mapping for V3: NSS=8, DIO1=14, RST=12, BUSY=13
SX1262 lora = new Module(8, 14, 12, 13);

void setup() {
  Serial.begin(115200);
  int state = lora.begin(915.0);   // 868.0 in EU
  if (state != RADIOLIB_ERR_NONE) {
    Serial.printf("LoRa init failed: %d\n", state);
    while (true) delay(10);
  }
  Serial.println("LoRa ready");
}

void loop() {
  // TX:
  int s = lora.transmit("Hello from V3!");
  Serial.println(s == RADIOLIB_ERR_NONE ? "Sent OK" : "Send failed");

  // RX (blocking, 5s timeout):
  String msg;
  s = lora.receive(msg, 5000);
  if (s == RADIOLIB_ERR_NONE) {
    Serial.print("Got: "); Serial.println(msg);
  }
  delay(2000);
}

Arduino — WiFi Hello World

wifi_hello.ino
// Heltec V3 - connect to WiFi and print IP

#include <WiFi.h>

const char* ssid = "YOUR_SSID";
const char* pass = "YOUR_PASS";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500); Serial.print(".");
  }
  Serial.println();
  Serial.print("IP: "); Serial.println(WiFi.localIP());
}

void loop() {}

Frequently Asked Questions

My OLED is blank — what's wrong?
Almost always missing the Vext / OLED reset sequence. The OLED is powered through Vext (GPIO 36, active LOW) and needs RST (GPIO 21) toggled at startup. Use Heltec's HT_SSD1306Wire library which handles both automatically, OR manually drive Vext LOW and RST HIGH in setup().
Which board do I select in Arduino IDE?
"WiFi LoRa 32(V3)" — under Tools > Board > Heltec ESP32 Arduino. You must install the Heltec board package first via the URL https://resource.heltec.cn/download/package_heltec_esp32_index.json in Preferences > Boards Manager URLs.
Does it support LoRaWAN / The Things Network?
Yes. Use the Heltec_ESP32 library's LoRaWAN classes, or LMIC, or RadioLib's LoRaWAN support. Register the device on TTN with the SX1262's DevEUI (printed on a sticker, or read from chip in code).
868 MHz vs 915 MHz — which one do I have?
Depends on your SKU. EU variant is 868 MHz; US/AU/NZ variant is 915 MHz. They use the same chip but the antenna is tuned to one band. Check the sticker on the board or the antenna; running 868 firmware on a 915 antenna (or vice versa) wastes signal strength.
What's the actual LoRa range?
Line-of-sight: 5-15 km easily, 30+ km with high-gain antenna and elevated mounting. In suburban areas with foliage: 1-3 km. Through walls: ~500 m to 1 km. Use SF12 (slowest, longest range) and lowest bandwidth (125 kHz or 62.5 kHz) to maximize range.
Can I run WiFi and LoRa simultaneously?
Yes — they're separate radios on different frequencies (2.4 GHz WiFi vs 868/915 MHz LoRa). The ESP32-S3 has plenty of CPU and RAM to handle both. Just be aware that high-power LoRa TX (+22 dBm) briefly pulls a lot of current — make sure your USB supply is > 1A.