Heltec WiFi LoRa 32 V3 is the most widespread board for Meshtastic and MeshCore: an ESP32-S3 chip with Wi-Fi and Bluetooth LE, a LoRa SX1262 radio for the 868 MHz band, a 0.96″ OLED display and Li-Po cell charging.
Versions V3.1 and V3.2 have the same pin layout and differ in the power and charger circuitry. The successor, V4, is pin-compatible with the V3.
Specifications
- ESP32-S3FN8: 2× Xtensa LX7 up to 240 MHz, 512 kB SRAM, 8 MB flash, no PSRAM
- LoRa SX1262 (863–928 MHz), up to 21 dBm output, IPEX antenna connector
- Wi-Fi 4 and Bluetooth LE 5 (spring antenna on the board)
- 0.96″ OLED 128 × 64 (SSD1306, I2C on GPIO17/18)
- 2 × 18 pins, 28 of them GPIO
- USB-C with a CP2102 converter, Li-Po cell charging (SH1.25 connector)
- 51.7 × 25.4 mm
The display is powered from the switched Ve supply – set GPIO36 to logic 0 before using it. The battery voltage is measured on GPIO1 through a divider enabled by GPIO37; on version V3.2 its polarity is inverted. The LoRa chip internally uses GPIO8–14.
Pinout and pin table
Hover over a pin in the diagram or a table row; use the filter to highlight a bus. You can download the pinout as PNG or SVG.
| Pin | Name | Direction | UART | I2C | SPI | ADC | Touch | Note |
|---|---|---|---|---|---|---|---|---|
| J2-1 | GND | – | ||||||
| J2-2 | 5V | input/output | 5 V from the USB connector (on V3/V3.1 after the 500 mA fuse, on V3.2 before the 2 A fuse). It can also power the board – ideally connect the supply through a diode so voltage does not flow back into USB. | |||||
| J2-3 | Ve | output | Switched 3.3 V (max. 350 mA) for the OLED and peripherals. Enabled by GPIO36 at logic 0 – without it the display stays dark. | |||||
| J2-4 | Ve | output | Switched 3.3 V (max. 350 mA) for the OLED and peripherals. Enabled by GPIO36 at logic 0 – without it the display stays dark. | |||||
| J2-5 | GPIO44 | input/output | RX | UART0 RX – CP2102 converter (USB) | ||||
| J2-6 | GPIO43 | input/output | TX | UART0 TX – CP2102 converter (USB) | ||||
| J2-7 | RST | input | Reset (RST button) – connecting to GND restarts the chip | |||||
| J2-8 | GPIO0 | input/output | PRG button. Strapping pin – logic 0 at boot = download mode | |||||
| J2-9 | GPIO36 | input/output | Vext_Ctrl – logic 0 enables the Ve rail (OLED and peripherals) | |||||
| J2-10 | GPIO35 | input/output | White LED (LED_BUILTIN), lit at logic 1 | |||||
| J2-11 | GPIO34 | input/output | ||||||
| J2-12 | GPIO33 | input/output | ||||||
| J2-13 | GPIO47 | input/output | ||||||
| J2-14 | GPIO48 | input/output | ||||||
| J2-15 | GPIO26 | input/output | Free GPIO (the board has no PSRAM) | |||||
| J2-16 | GPIO21 | input/output | Reset displeje OLED | |||||
| J2-17 | GPIO20 | input/output | ADC2_CH9 | Chip USB D+ – not connected to USB-C (R29 not fitted), free GPIO | ||||
| J2-18 | GPIO19 | input/output | ADC2_CH8 | Chip USB D− – not connected to USB-C (R3 not fitted), free GPIO | ||||
| J3-1 | GND | – | ||||||
| J3-2 | 3V3 | output | 3.3 V output from the regulator | |||||
| J3-3 | 3V3 | output | 3.3 V output from the regulator | |||||
| J3-4 | GPIO37 | input/output | ADC_Ctrl – enables the divider for measuring battery voltage on GPIO1. Active at logic 0 on V3 and V3.1, at logic 1 on V3.2 (Meshtastic detects the polarity itself). Cell voltage = 4.9 × voltage on GPIO1. | |||||
| J3-5 | GPIO46 | input/output | Strapping pin – logic 0 at boot (pull-down) | |||||
| J3-6 | GPIO45 | input/output | Strapping pin (VDD_SPI voltage) – logic 0 at boot | |||||
| J3-7 | GPIO42 | input/output | SCL | Default I2C SCL (Wire) in Arduino. JTAG MTMS | ||||
| J3-8 | GPIO41 | input/output | SDA | Default I2C SDA (Wire) in Arduino. JTAG MTDI | ||||
| J3-9 | GPIO40 | input/output | JTAG MTDO | |||||
| J3-10 | GPIO39 | input/output | JTAG MTCK | |||||
| J3-11 | GPIO38 | input/output | ||||||
| J3-12 | GPIO1 | input/output | ADC1_CH0 | T1 | Battery voltage measurement (390k/100k divider, enable with GPIO37) | |||
| J3-13 | GPIO2 | input/output | ADC1_CH1 | T2 | ||||
| J3-14 | GPIO3 | input/output | ADC1_CH2 | T3 | Strapping pin (JTAG source selection) – has no effect unless set in eFuse | |||
| J3-15 | GPIO4 | input/output | ADC1_CH3 | T4 | ||||
| J3-16 | GPIO5 | input/output | ADC1_CH4 | T5 | ||||
| J3-17 | GPIO6 | input/output | ADC1_CH5 | T6 | ||||
| J3-18 | GPIO7 | input/output | ADC1_CH6 | T7 | ||||
| test pad | GPIO17 | input/output | ADC2_CH6 | Pad T1 underneath – OLED display I2C SDA | ||||
| test pad | GPIO18 | input/output | ADC2_CH7 | Pad T2 underneath – OLED display I2C SCL |
Pins used on the board
These chip pins are used by parts on the board and are not broken out:
| Pin | Function on the board |
|---|---|
| GPIO8 | LoRa SX1262 – NSS (CS) |
| GPIO9 | LoRa SX1262 – SCK |
| GPIO10 | LoRa SX1262 – MOSI |
| GPIO11 | LoRa SX1262 – MISO |
| GPIO12 | LoRa SX1262 – RESET |
| GPIO13 | LoRa SX1262 – BUSY |
| GPIO14 | LoRa SX1262 – DIO1 (interrupt) |
| GPIO15 | Krystal 32,768 kHz |
| GPIO16 | Krystal 32,768 kHz |
What to watch out for
- The GPIO are not 5V tolerant.
- Do not transmit without an antenna – the LoRa power amplifier may be damaged.
- The display stays dark until GPIO36 (Vext_Ctrl) is at logic 0.
- On early V3 units, the charger overheats (resistor R9 1 kΩ) – V3.1 and later have this fixed.
- GPIO19/20 are not connected to USB-C (programming goes through the CP2102), so they can be used as regular GPIO.
- Strapping pins GPIO0 (PRG button), GPIO45 and GPIO46 must be at the correct level at boot.
Heltec and Meshtastic on chiptron.eu/
Projects and guides on chiptron.eu/:
- MeshCore – setup, firmware and a network map of the Czech Republic, Heltec V3 among the supported boards
- Heltec LoRa 32 V4 – what the V3’s successor brings (higher output power, GNSS, solar charging)
More pinouts
See all pinouts on the Pinouts page.