A GPS dashboard for the Heltec WiFi LoRa 32 V4 (ESP32-S3). Reads NMEA data from a Heltec L76K GNSS module and shows position, speed, heading, altitude, and satellite count on the board's built-in 128x64 OLED.
LAT: 33.52066
LON: -86.80249
──────────────────────
SPEED: 42.3 mph
HEAD: 183.5 deg (S)
ALT: 644 ft S:9
| Part | Notes |
|---|---|
| Heltec WiFi LoRa 32 V4 | ESP32-S3 + SX1262; built-in SSD1306/SSD1315 OLED |
| Heltec L76K GNSS module | Plugs into the board's SH1.25 8-pin GNSS socket |
No wiring needed beyond plugging the GNSS module into the dedicated socket.
These were verified against Meshtastic's heltec_v4 variant — the official datasheet omits or mislabels several of them:
| Function | GPIO | Notes |
|---|---|---|
| Vext rail enable | 36 | Active LOW; powers the OLED |
| GNSS power enable | 34 | Active LOW; module is dead without it (not in the datasheet) |
| GPS data → CPU | 38 | ESP32 receives NMEA here |
| CPU → GPS | 39 | Unused; the sketch opens the UART receive-only |
| GNSS reset | 42 | LOW >100ms resets; held HIGH to run |
| GNSS standby | 40 | HIGH = force awake |
| OLED I2C | 17 (SDA), 18 (SCL) | Address 0x3C |
| OLED reset | 21 | Must be passed to the display driver (not -1) |
GPIO 43/44 are UART0 (USB-serial) — never use them for peripherals, even though the header silkscreens them "TX"/"RX".
- GPS auto-detection — probes both candidate receive pins at all common baud rates until real NMEA traffic appears, so it works regardless of module baud (L76K: 9600, UC6580: 115200) or board-revision pin swaps.
- Diagnostics instead of freezes — if no valid GPS data parses, the OLED shows what's actually happening (bytes received, failed checksums, active pin/baud) rather than sitting on a splash screen.
- USB serial logging — raw NMEA and probe results stream to the USB-C port at 115200 baud (
pio device monitor).
Requires PlatformIO. From the project root:
pio run # build
pio run -t upload # flash over USB-C
pio device monitor # watch logs / raw NMEANote: PlatformIO has no V4 board definition yet; the project intentionally builds with heltec_wifi_lora_32_V3, which Heltec confirms is compatible.
Pushing a tag starting with v (e.g. v1.0.0) triggers a CI build that compiles the firmware and attaches firmware.bin and firmware.factory.bin to a GitHub release. Flash a downloaded factory image with:
esptool.py --chip esp32s3 write_flash 0x0 firmware.factory.bin| Symptom | Meaning |
|---|---|
| Black screen | OLED power/reset regression — check Vext (36) and OLED reset (21) handling |
| "No GPS data!" | GNSS module silent — check the power-enable pin (34) and that the module is seated |
| "GPS data garbled" | Bytes arriving but unparseable — noise or a baud outside the probe list |
| "SEARCHING" | Everything works; waiting for satellite fix. Give it 1–2 minutes with a view of the sky |