Build a Standalone ESP32 GPS Equipment Tracker with LoRa
Commercial GPS asset trackers rely on a cellular subscription, which is overkill and an ongoing cost for tracking equipment that mostly stays within a few miles of home base — a job site trailer, a tool chest that travels between shops, a generator, or gear stored in an off-site unit. This project builds a standalone GPS tracker using an ESP32 paired with LoRa, which reports position over long range (several miles line-of-sight, less in dense urban or wooded terrain) directly to a receiving gateway you control, with no monthly fee and no cellular coverage dependency. This is built for tracking your own tools and equipment on your own property or job sites — not for tracking vehicles or people, which carries very different legal and privacy considerations depending on your jurisdiction and consent requirements.
Choosing the Hardware
A board like the Heltec WiFi LoRa 32 V3 combines an ESP32-S3, an SX1262 LoRa radio, and a LiPo battery charging circuit on a single small board — this eliminates most of the wiring a discrete ESP32 + separate LoRa breakout build would need, and is the recommended starting point for this project. If you already have a spare LoRa gateway from a prior sensor-node project, this tracker can transmit to it directly using the same point-to-point LoRa approach covered in the long-range ESP32 LoRa sensor node guide, or you can build a dedicated second unit as a fixed base-station receiver.
Wiring the GPS Module
GPS Module PinFunctionESP32 Pin (Heltec V3 example) VCCPower (3.3V–5V tolerant on most NEO-6M breakouts)3V3 GNDGroundGND TXGPS transmit → ESP32 receiveGPIO47 (UART RX) RXGPS receive ← ESP32 transmitGPIO48 (UART TX)Most NEO-6M/NEO-M8N breakout modules output standard NMEA sentences over UART at 9600 baud by default. Route the ceramic patch antenna so it has a clear view of the sky when mounted in the final enclosure — GPS reception through a fully enclosed metal toolbox lid will be poor to nonexistent, so plan the antenna's position (or an external antenna pigtail) before finalizing the enclosure design.
Firmware: Reading GPS and Transmitting Over LoRa
Use the TinyGPS++ library to parse NMEA sentences from the GPS module's UART stream into usable latitude/longitude/altitude/fix-quality values, and the RadioLib or the board manufacturer's LoRa library to handle the SX1262 radio. The core loop structure:
void loop() { while (gpsSerial.available() > 0) { gps.encode(gpsSerial.read()); } if (gps.location.isUpdated() && gps.location.isValid()) { String payload = String(gps.location.lat(), 6) + "," + String(gps.location.lng(), 6) + "," + String(battery_voltage, 2); radio.transmit(payload); } esp_sleep_enable_timer_wakeup(REPORT_INTERVAL_SECONDS * 1000000ULL); esp_deep_sleep_start(); }Getting a GPS fix from a cold start can take 30–60 seconds, which is the main reason this design wakes, waits for a fix, transmits, and sleeps rather than trying to keep the GPS running continuously — a continuously-powered GPS module is one of the heaviest current draws in the whole system. A warm start (module was recently powered and hasn't moved far) typically reacquires a fix in a few seconds instead.
Power Management
Deep sleep between reports is what makes multi-day to multi-week battery life realistic on a 2000–3000mAh LiPo. A reasonable default reporting interval is every 15–30 minutes for stationary equipment monitoring (more frequent than that mostly just drains the battery faster without adding useful information for something that isn't moving), with a shorter interval available on-demand if the design includes a wake button for an immediate position check. Include a simple battery voltage divider into an ADC pin so the payload reports remaining charge alongside position — catching a low battery before the tracker goes dark is far more useful than discovering it after the fact.
Building the Receiving Side
A second Heltec board (or a Raspberry Pi with a LoRa HAT, following the same wiring approach as the LoRaWAN Gateway with Raspberry Pi project) listens for incoming transmissions and logs position reports to a local file, an MQTT broker, or a simple web dashboard. For a single tracker reporting to a fixed base station, point-to-point LoRa (no LoRaWAN network server needed) is simpler to set up than joining The Things Network, and keeps everything entirely local with no third-party infrastructure involved.
Enclosure and Weatherproofing
A weatherproof ABS enclosure (IP65-rated or better) protects the electronics from rain and dust when mounted on outdoor equipment. Seal all cable entry points with cable glands or a liberal application of silicone sealant, include a small desiccant pack inside to control internal condensation from daily temperature swings, and mount the GPS antenna as close to the enclosure's top/sky-facing surface as possible — even a non-metal enclosure lid will attenuate GPS signal somewhat, so test fix acquisition time with the final enclosure closed before relying on it.
Legal and Practical Considerations
Track only equipment and property you own or have clear authority over. Attaching a tracking device to something you don't own, or to a vehicle or person without their knowledge, raises real legal and privacy issues that vary significantly by state and country — this project is intended for a tool chest, generator, trailer, or storage unit that's unambiguously yours to track. Separately, LoRa's ISM-band operation is subject to regional duty-cycle and power limits (in the EU, for example, the 868MHz band has strict duty-cycle restrictions); check your region's LoRa/ISM band rules, particularly if you're transmitting more frequently than the conservative 15–30 minute interval suggested above.
Once the base tracker is working, the same platform extends naturally — adding a geofence check in firmware to trigger an immediate high-frequency reporting burst if the tracker moves further than expected between two poll intervals turns this from a passive logger into something closer to a theft-alert system for equipment that spends time in less-secure storage.
Related Guides
- GPS Modules for Maker Projects: NEO-6M/NEO-M8N Wiring, NMEA Parsing, and Logging with ESP32
- ESP32 LoRaWAN and The Things Network: OTAA Join, Payload Decoding, and Downlinks
- Build a Standalone ESP32 WiFi Security Testing Tool with Marauder
- Scaling Up: A Multi-Node LoRa Sensor Network with a Raspberry Pi Gateway
- Build a Battery-Powered ESP32 Smart Mailbox Notifier
- Build a Long-Range ESP32 LoRa Sensor Node for Off-WiFi-Grid Monitoring
- Build a Meshtastic Off-Grid Mesh Messaging Node with ESP32 and LoRa
- How to Program Addressable LED Strips: WS2812B Patterns, Effects, and Power Design