Most GPS tracker tutorials hit you with the same wall: "You'll also need a SIM card, a GSM module, and..." - and suddenly a weekend project turns into a problem.
I wanted to skip all that. Here's what I built instead.
GPS Tracker with Seeed Studio XIAO ESP32-S3
The Setup
Hardware:
- Seeed Studio XIAO ESP32-S3
- Neo-6M GPS Module
- External patch antenna
- Breadboard + jumper wires
Software:
- Arduino IDE
- GeoLinker library (free cloud platform by Circuit Digest)
- TinyGPSPlus + WiFiClientSecure
How It Works
The Neo-6M picks up satellite coordinates and feeds them to the ESP32-S3 over UART at 9600 baud. The ESP32 then pushes that data to the GeoLinker cloud over Wi-Fi every 15 seconds - and it shows up live on an interactive map.
Wiring is minimal:
| Neo-6M | XIAO ESP32-S3 |
|---|---|
| VCC | 5V |
| GND | GND |
| TX | GPIO 44 (RX) |
| RX | GPIO 43 (TX) |
The Part That Makes It Useful: Geofencing
This is where it gets practical. You define a home coordinate and a radius (default: 50 m). The firmware runs the Haversine formula continuously to check distance. Cross the boundary? An SMS fires automatically via the Circuit Digest Cloud SMS API with the exact coordinates.
if (dist > 50 && !alertSent) {
sendSMS(latitude, longitude);
alertSent = true;
}
if (dist <= 50 && alertSent) alertSent = false;
The alert resets when the device returns inside the boundary - so it'll fire again next time.
Offline Buffering
No Wi-Fi? The ESP32 stores GPS points locally. When the connection comes back, it syncs the buffered data before resuming live uploads. Nothing gets lost.
GeoLinker Setup (Quick)
- Register at circuitdigest.cloud
- Go to My Account → API Keys and generate a key
- Drop it into the firmware — done
Free tier gives you 10,000 data points per key. One request per 10 seconds max.
Real-World Use Cases
- Vehicle tracking via phone hotspot
- Asset monitoring (alerts if moved)
- Pet or child safety with geofence zones
- Elderly care with boundary alerts
What I'd Improve
- Add deep sleep between GPS pings for battery operation
- Support multiple geofences with an array of coordinates
- Add speed alerts using
gps.speed.kmph()
If you've been putting off a GPS project because of the GSM complexity — this stack removes that barrier entirely. Find more esp32 project ideas for your next build


Top comments (0)