Skip to content

The Heltec Board

Every node in Sensor Net uses the Heltec WiFi LoRa 32 V3, an all-in-one development board that combines a microcontroller, LoRa radio, and OLED display on a single PCB. This page describes what is on the board and how Sensor Net uses it.

Heltec Board Labeled

The Heltec V3 bundles several components that would otherwise need to be purchased and wired separately:

ComponentChipDescription
MicrocontrollerESP32-S3Dual-core 240 MHz processor, 512 KB SRAM, 8 MB flash
LoRa radioSX1262Semtech long-range radio, connected internally via SPI
DisplaySSD1306128x64 pixel OLED, connected internally via I2C
ClockTCXOTemperature-Compensated Crystal Oscillator for precise RF timing
PowerLiPo battery connector with charging circuit
InterfaceUSB-CFor programming, serial monitoring, and power

Because the radio and display are already wired to the microcontroller on the PCB, you do not need to solder or breadboard those connections. The only external wiring required is for the sensor breakout boards.

The firmware uses a subset of the board’s capabilities:

  • ESP32-S3 in Arduino mode — The firmware runs as a single-core Arduino sketch. The built-in Wi-Fi and Bluetooth radios are not used.
  • SX1262 radio — Controlled through RadioLib over the internal SPI bus. Transmits and receives LoRa packets on the 902.25 MHz band (US).
  • SSD1306 OLED — Driven by the U8g2 library over the internal I2C bus. Displays node status, sensor readings, and uptime.
  • USB-C serial — Used for programming the board and for the receiver node to send structured data to a connected computer at 115200 baud.
  • Unique node ID — Each ESP32 has a factory-burned MAC address. The firmware reads this with ESP.getEfuseMac() and uses the lower 32 bits as the node’s permanent identifier. No manual address assignment is needed.

An important detail about this board: it has a Vext power circuit that controls power to external peripherals, including the OLED display. Vext is activated by driving GPIO 36 LOW (active-low logic). The firmware does this at startup:

pinMode(PIN_VEXT, OUTPUT);
digitalWrite(PIN_VEXT, LOW); // active LOW = enables 3.3V rail

If the OLED display does not turn on, this pin configuration is the first thing to check.

The board’s I2C bus (SDA on GPIO 17, SCL on GPIO 18) is shared between the onboard OLED and any external sensors you connect. This works because I2C devices are addressed — each device has a unique 7-bit address, similar to a house number on a street.

The three devices on the Sensor Net I2C bus:

DeviceI2C AddressPurpose
SSD1306 OLED0x3COnboard display
TMP1020x48Temperature sensor (external)
BMP2800x76Pressure sensor (external)

Because the addresses are all different, all three coexist on the same pair of wires without interfering with each other.

SpecificationValue
ProcessorESP32-S3, dual-core 240 MHz
RAM512 KB SRAM
Flash8 MB
LoRa chipSX1262
LoRa frequency range863-928 MHz
DisplaySSD1306 128x64 OLED
USBUSB-C (programming + serial)
BatteryJST connector, LiPo charging circuit
DimensionsApproximately 50 x 26 mm

Learn about the external sensors in the Sensors page.