ESP32 GPS Tracker With SIM800L and NEO-6M
by ElectroScope Archive in Circuits > Microcontrollers
261 Views, 1 Favorites, 0 Comments
ESP32 GPS Tracker With SIM800L and NEO-6M

So I needed a GPS tracker that would work in areas without Wi-Fi. The ESP32 with SIM800L GSM module and NEO-6M GPS seemed like the right combination, and cellular connectivity means it works anywhere with 2G coverage.
We're using GeoLinker for the cloud platform, which handles the data visualisation without needing to set up your own server infrastructure.
Supplies
- ESP32 Development Board
- SIM800L GSM Module
- NEO-6M GPS Module
- 2x 5mm LEDs (yellow and green)
- 2x 470Ω Resistors
- Breadboard
- Jumper wires
- SIM card with a 2G data plan
Get Your API Key From GeoLinker


Before wiring anything, you need an API key from Circuit Digest Cloud.
- Go to the Circuit Digest Cloud homepage and create an account if you don't have one.
- After logging in, click "My Account" in the top right corner. Enter the captcha and click "Generate API Key."
- Save this key - you'll need it in your code. Each key gives you 10,000 GPS data points. When you reach the limit, generate a new key.
Wire the Circuit


ESP32 to SIM800L:
- GPIO18 → SIM800L TX
- GPIO19 → SIM800L RX
- VCC: The SIM800L needs 3.7-4.2V. I used a diode to drop 5V down to about 4.3V, which works. For a cleaner solution, use a buck converter or dedicated LiPo battery.
ESP32 to NEO-6M:
- GPIO16 → GPS TX
- GPIO17 → GPS RX
- VCC from ESP32 3.3V pin (if this doesn't work for your module, use 5V with level shifters on TX/RX)
Status LEDs:
- GPIO23 → 470Ω resistor → Yellow LED → GND (GPS status)
- GPIO32 → 470Ω resistor → Green LED → GND (transmission status)
Check your connections carefully. Loose wires cause most issues.
Install the GeoLinker Library
Open Arduino IDE and install the GeoLinker library through the Library Manager, or download it from GitHub.
This library handles GPS parsing, GSM communication, cloud uploads, and offline data buffering automatically.
Upload the Code
Here's the complete code:
Update the apiKey and apn values with your credentials before uploading.
Test the Hardware
After uploading, check these status indicators:
SIM800L NETLIGHT LED patterns:
- Blinks every 1 second: Module running, not connected to network
- Blinks every 2 seconds: GPRS data connection active
- Blinks every 3 seconds: Connected to cellular network
- Fast blinking: Data transmission in progress
NEO-6M LED:
- Stays off until GPS achieves satellite lock
- Starts blinking once position is fixed
For outdoor testing, I used a power bank secured to the breadboard with zip ties.
View Your Tracking Data



Open GeoLinker to see your location data in real-time.
The map updates as the device moves, showing the complete path.
Troubleshooting Common Issues
GPS not getting a fix:
- Move outdoors with clear sky visibility
- Wait 2-15 minutes for cold start
- Check antenna connection
- Verify power supply voltage
SIM800L not registering:
- Test SIM card in a phone first
- Confirm adequate power supply (minimum 2A peak current)
- Verify 2G network availability in your area
- Check for LED blinking at 3-second intervals
Upload failures:
- Verify correct board selection in Arduino IDE
- Try a different USB cable
- Check COM port settings
Additional Resources
This guide is entirely based on: ESP32 GPS Tracker with SIM800L
The system now provides reliable GPS tracking over cellular networks. Data transmission uses approximately 10-20MB monthly with 30-second update intervals.