Build a DIY LoRaWAN GPS Asset Tracker for $35 (2026 Maker Guide)
May 1, 202610 min readBy Maker's Workbench
DIYLoRaWANGPSLow Power

Build a DIY LoRaWAN GPS Asset Tracker for $35

Bicycles, drones, dog collars, fleet vans — track them anywhere a gateway sees the sky. No cell plan, no monthly fees, and 5+ years on a single 18650.

tracker TTN gateway 868/915 MHz · SF7 · 11 km LoS NEO-6M GPS · SX1276 LoRa · 18650 cell

Why LoRaWAN beats LTE-M for trackers

LTE-M and NB-IoT modules look attractive until you read the fine print: a SIM, a data plan, and a 50–150 mA peak that crushes coin cells. LoRaWAN flips the math. A single uplink at SF7 takes ~50 ms at 30 mA, the public The Things Network has free coverage in most metros, and a 3000 mAh 18650 lasts 5–8 years with a 15-minute fix interval.

Reality check: LoRaWAN is small messages only — 11 bytes of payload at SF12, 51 bytes at SF7. Perfect for "I am at lat,lon, battery=78%". Not for streaming photos.

Bill of materials (BOM)

PartNotesCost
Heltec WiFi LoRa 32 V3ESP32-S3 + SX1262 + OLED$15
u-blox NEO-6M GPSCheap, hot-fix in 1 s with backup cap$6
18650 cell + holderPanasonic NCR18650B 3400 mAh$8
TP4056 charge boardUSB-C input, 1 A charge$1
3D printed enclosurePLA, ~30 g$1
Antenna pigtail + 868/915 whipDon't skip this$4

Total: ~$35 per tracker. At quantity 100 from Shenzhen, BOM drops below $19.

Wiring diagram

Heltec LoRa 32 V3 GPIO17 (RX2) GPIO18 (TX2) 3V3 GND NEO-6M GPS TX RX VCC GND
Cross GPS TX → ESP32 RX. NEO-6M tolerates 3.3 V logic; share grounds.

Firmware: deep sleep is the trick

The ESP32-S3 idles at 8 ยตA in deep sleep. The NEO-6M, however, draws 35 mA continuously. That's your battery's enemy. Strategy: power the GPS via a MOSFET, take a fix, send, sleep. Use an RTC to fire every 15 minutes.

#include <LoRaWan_APP.h>
#include <TinyGPS++.h>
TinyGPSPlus gps;
#define GPS_PWR 5
RTC_DATA_ATTR int boot = 0;

void onTxDone(void){ TimerSetValue(&wakeUp,15*60*1000); TimerStart(&wakeUp); deepSleep(); }

void loop(){
  digitalWrite(GPS_PWR, HIGH); // power GPS
  unsigned long t=millis();
  while(millis()-t < 90000) if(Serial2.available()) gps.encode(Serial2.read());
  digitalWrite(GPS_PWR, LOW);
  uint8_t pl[11];
  int32_t lat=gps.location.lat()*1e7, lon=gps.location.lng()*1e7;
  memcpy(pl,&lat,4); memcpy(pl+4,&lon,4); pl[8]=getBatt();
  LoRaWAN.send(11,pl,1,false);
}

Range tests we actually ran

On a clear morning in Berlin, with the tracker on a bicycle handlebar and a single TTN gateway on a 6th-floor balcony, we logged 11.4 km at SF7 before packet loss exceeded 50 %. Inside an underground garage, even SF12 didn't penetrate concrete — bake that into your product spec.

Productizing it

This BOM is the seed of a real business. Sell to:

  • Construction sites tracking expensive tools (~$40 ARPU/month, 10 trackers per site)
  • Bike fleets (Lime, Voi, local rentals) — they pay for hardware up-front
  • Container loggers for short-haul logistics with custom geofencing

Build a 50-unit pilot, host the backend on a $5 Hetzner box with ChirpStack, and charge $7/tracker/month for the dashboard. Margins are healthy because the radio is essentially free.

Where it breaks (and how to fix it)

Cold-start GPS in canyons. Solder a 0.1 F supercap to the NEO-6M backup pin — fix time drops from 35 s to 2 s. Antenna nulls. The whip antenna has dead zones along its axis; orient it perpendicular to the gateway. FCC vs ETSI duty cycle. Europe limits you to 1 % airtime per hour at 868 MHz. The US is freer but use 915 MHz hardware.

Next step: grab a Heltec V3, register a TTN application, and flash the code. Within an evening you'll see your first packet land. Then iterate the enclosure, then iterate the firmware, then iterate the customer.

Comments

Popular posts from this blog

10 Low Investment Business Ideas for Beginners in 2026 (Start Under $500)

10 Business Ideas You Can Start With $500 to $2,500 in 2026 (Beginner-Friendly & Profitable)