Skip to content
Nomaduino

Plate I · On the water

nomaduino-gps

A GPS receiver that sends NMEA 0183 sentences over WiFi to a single configured chartplotter or navigation app.

Shipping

At a glance

BoardLilyGO T-Display S3 (ESP32-S3)

Bill of materials

LilyGO T-Display S3
Adafruit Ultimate GPS Breakout

What it does

The board sits somewhere with a view of the sky and reads NMEA 0183 sentences from a GPS module over a serial connection. It joins your boat’s WiFi network and sends those sentences as UDP packets to a single configured destination — one chartplotter or navigation app, not a broadcast every device on the network can pick up. The display shows current position, speed, and fix status at a glance.

Wiring

The GPS breakout talks to the ESP32-S3 over a UART. Four connections:

GPS breakout T-Display S3 Notes
VIN 3V3 The Ultimate GPS accepts 3.3V
GND GND
TX GPIO18 GPS transmit into the board’s receive pin
RX GPIO21 Board transmit into the GPS’s receive pin — easy to swap with TX, so double-check before powering up

The two side buttons on GPIO14 and GPIO0 cycle the display pages, and the backlight is driven from GPIO38 — none of that needs wiring, it is on the board already.

Assembly

  1. Wire the GPS breakout to the board as above.
  2. Flash the firmware — see below.
  3. Power the board over USB-C and wait for the display to come up.

Configuration

On first boot the board has no WiFi credentials, so it starts its own access point and serves a configuration portal. Join it, set your network’s SSID and password, and the board reboots onto your network with a hostname of GPS_S3- plus a short device-specific suffix generated from its MAC address, so two units on the same network don’t collide.

Everything else is configured from the same web interface once the board is on your network:

Setting Key Default
GPS serial baud rate baud 9600
Fix rate gpsFixRate 1 Hz
Update rate gpsUpdateRate 1 Hz
NMEA sentence set gpsDataMode RMC + GGA
UDP output udpEnabled off
UDP destination host udpHost (empty)
UDP port udpPort 10110
Display brightness backlight 100

UDP output is off by default. To feed a chartplotter, enable udpEnabled and set udpHost to the device running your navigation software. This is a single destination, not a broadcast — if you run two navigation apps aboard, only the one on the configured host receives data. Port 10110 is the conventional port for NMEA 0183 over UDP, so most apps will be listening there already. Because udpManager is only constructed at boot if udpEnabled is already on, flipping udpEnabled on from the web UI doesn’t take effect until the board reboots.

Firmware updates after the first flash go over the network — the board runs ElegantOTA, so you can upload a new build from the web interface without plugging in.

Troubleshooting

No fix. The Ultimate GPS needs a clear view of the sky and can take a while to get a first fix from cold. The display shows fix status; if it never leaves “no fix”, check the TX and RX wiring — swapping them is the usual cause.

Board joins WiFi but the chartplotter sees nothing. Confirm udpEnabled is on and udpHost points at the right device. Both must be on the same network segment. If you just turned udpEnabled on from the web UI, reboot the board — it only starts the UDP sender at boot when udpEnabled is already set, so a live toggle has no effect until the next power cycle.

Nothing on the display. Confirm the board is a LilyGO T-Display S3 specifically — the pin assignments in this firmware are board-specific and will not work on a bare ESP32-S3 module.

For full configuration reference, telnet commands, and the changelog, see the repository.

Reference & troubleshooting

Full configuration keys, protocol details, and the changelog live in the repository.

Repository documentation