mastashake08/GPSDisplay

★ 0Forks 0C++GitHub ↗Compare

README

GPSDisplay

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

Hardware

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.

Pin map (V4)

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".

Features

  • 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).

Building & flashing

Requires PlatformIO. From the project root:

pio run                      # build
pio run -t upload            # flash over USB-C
pio device monitor           # watch logs / raw NMEA

Note: PlatformIO has no V4 board definition yet; the project intentionally builds with heltec_wifi_lora_32_V3, which Heltec confirms is compatible.

Releases

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

Troubleshooting

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

Contributors

mastashake08

Issues