How to Build a Sports GPS Hotspot

A compact ESP32-C3 tracker with its own Wi-Fi network for live field stats

ESP32VehiclesIntermediate40 minutes4 components

Updated

How to Build a Sports GPS Hotspot
For illustrative purposes only
On this page

What you'll build

This guide builds the compact version of the GPS dashboard: an ESP32-C3 tracker that creates its own SportsGPS hotspot and serves a live field dashboard. It is meant for quick outdoor checks where you want to power the tracker, connect your phone, and read live stats without needing a router nearby.

The build uses an ESP32-C3 Super Mini style board, NEO-6M GPS module, LiPo battery, and the built-in LED. The dashboard runs directly on the board over soft-AP Wi-Fi, so it works in a park, on a bike, or at a test bench with no internet connection.

The useful part is the product flow: connect to the tracker network, open the dashboard address, wait for GPS lock, then watch the stats update. The guide keeps the wiring and code matched to that experience instead of treating Wi-Fi as an afterthought.

Wiring diagram

Wiring diagram

Interactive wiring diagram

Components needed

ComponentTypeQtyBuy
ESP32-C3 development boardboard1
NEO-6M GPS modulesensor1€16.95
LiPo batteryother1
Status LEDactuator1

Prices and availability are indicative and may have been updated by the supplier. Schematik may earn a commission from purchases made through affiliate links.

Assembly

1

Wire GPS power

Connect NEO-6M VCC to 3V3 or 5V as marked on your module, and GND to GND.

2

Connect GPS serial

Wire GPS TX to ESP32-C3 GPIO20 and GPS RX to GPIO21.

3

Add the status LED

Connect the LED through a resistor to GPIO8 and GND.

4

Add portable power

Feed the ESP32-C3 from the LiPo charger output only after confirming polarity.

5

Upload and test outside

Open Serial Monitor and take the unit near a window until it reports a fix.

Pin assignments

PinConnectionType
GPIO 20neo6m-gps TX ESP32-C3 RXUART
GPIO 21neo6m-gps RX ESP32-C3 TXUART
3V3neo6m-gps VCCPOWER
GNDneo6m-gps GNDGROUND
GPIO 8status-led DINDIGITAL
GNDstatus-led GNDGROUND

Code

Arduino C++
#include <WiFi.h>
#include <TinyGPSPlus.h>
#define GPS_RX_PIN 20
#define GPS_TX_PIN 21
#define STATUS_LED_PIN 8
TinyGPSPlus gps;
HardwareSerial gpsSerial(1);
WebServer server(80);
const char* AP_NAME="Sports-GPS-Hotspot";
void handleRoot(){String body="<h1>Sports GPS</h1>"; if(gps.location.isValid()){body += "<p>Lat: "+String(gps.location.lat(),6)+"</p><p>Lng: "+String(gps.location.lng(),6)+"</p>";} else {body += "<p>Waiting for GPS fix.</p>";} server.send(200,"text/html",body);}
void setup(){pinMode(STATUS_LED_PIN,OUTPUT); Serial.begin(115200); gpsSerial.begin(9600,SERIAL_8N1,GPS_RX_PIN,GPS_TX_PIN); WiFi.mode(WIFI_AP); WiFi.softAP(AP_NAME); server.on("/",handleRoot); server.begin(); Serial.println(WiFi.softAPIP());}
void loop(){while(gpsSerial.available()) gps.encode(gpsSerial.read()); digitalWrite(STATUS_LED_PIN,gps.location.isValid()?HIGH:(millis()/500)%2); server.handleClient();}

// Run this and build other cool things at schematik.io
Libraries: TinyGPSPlus

Ready to build this?

Open this project in Schematik to get the full wiring diagram, pin assignments, and deployable code for the Sports GPS Hotspot.

Open in Schematik →

Related guides