SYSTEM
LoRaWAN GPS-Tracker
Gesamtsystem :
1. Darstellung Gesamtsystem

2. LoRa GPS Tracker

Ein kompakter GPS-Tracker auf Basis eines Heltec Wireless Tracker mit integriertem GPS-Modul und LoRaWAN-Anbindung.
Der Tracker ermittelt regelmäßig seine aktuelle GPS-Position und überträgt Latitude und Longitude über LoRaWAN an einen LoRaWAN-Netzwerkserver, beispielsweise The Things Network (TTN).
Zusätzlich verfügt das Gerät über ein kleines Display, einen Taster zur Aktivierung der Aufzeichnung sowie einen integrierten WLAN-Hotspot zur Konfiguration des Sendeintervalls.
Projektübersicht
Der GPS-Tracker kombiniert folgende Funktionen:
- ESP32-Mikrocontroller
- integriertes GPS-Modul
- LoRaWAN-Funkübertragung
- Anzeige der GPS-Koordinaten auf dem integrierten Display
- einstellbares Übertragungsintervall
- Speicherung des Intervalls im LittleFS
- WLAN-Hotspot zur Konfiguration
- Taster zur Aktivierung der Aufzeichnung
- Übertragung des Aufzeichnungsstatus über LoRaWAN
- OTAA-Anmeldung bei LoRaWAN
- automatischer Failsafe bei fehlendem GPS-Fix bzw. GPS-Startverzögerung
Hardware
Verwendete Hardware
- Heltec Wireless Tracker
- integriertes ESP32
- integriertes LoRa-Modul
- integriertes GPS-Modul
- integriertes ST7735 TFT-Display
- Taster an GPIO 0
GPS
Das GPS-Modul wird über Serial1 angesprochen.
GPS RX/TX:
GPIO 33 / GPIO 34
Baudrate: 115200
Das GPS wird über VGNSS_CTRL aktiviert.
#define VGNSS_CTRL 3
Display
Das integrierte ST7735-Display wird zur Anzeige des aktuellen GPS-Status verwendet.
Bei vorhandenem GPS-Fix werden Latitude und Longitude angezeigt:
LAT: 51.xxxxxx
LON: 11.xxxxxx
Ist noch kein GPS-Fix vorhanden:
Kein GPS Fix
Die Anzeige wird alle 3 Sekunden aktualisiert.
LoRaWAN
Die Kommunikation erfolgt über LoRaWAN.
Verwendet wird:
- LoRaWAN Class A
- OTAA
- Region entsprechend der Einstellung
ACTIVE_REGION - Uplink Port 2
- ADR aktiviert
Im Sketch ist vorgesehen:
DeviceClass_t loraWanClass = CLASS_A; bool overTheAirActivation = true; bool loraWanAdr = true; uint8_t appPort = 2;
Das Übertragungsintervall wird über appTxDutyCycle festgelegt.
Datenübertragung
Die GPS-Koordinaten werden für die Übertragung auf Ganzzahlen skaliert.
Latitude und Longitude werden mit dem Faktor 100000 multipliziert.
Damit können die Koordinaten mit hoher Genauigkeit in 4 Byte übertragen werden.
Das Datenformat umfasst insgesamt 9 Byte:
| Byte | Inhalt |
|---|---|
| 0–3 | Latitude |
| 4–7 | Longitude |
| 8 | Logging-Status |
Payload
Byte 0-3 Latitude
Byte 4-7 Longitude
Byte 8 Logging
Der Logging-Status hat folgende Bedeutung:
0 = Logging AUS
1 = Logging EIN
TTN Payload Formatter
Für The Things Network (TTN) kann folgender Payload Formatter verwendet werden:
function decodeUplink(input) {
var bytes = input.bytes;
var lat = (bytes[0]<<24 | bytes[1]<<16 | bytes[2]<<8 | bytes[3]) / 100000;
var lon = (bytes[4]<<24 | bytes[5]<<16 | bytes[6]<<8 | bytes[7]) / 100000;
var logging = bytes[8] === 1;
return {
data: {
latitude: lat,
longitude: lon,
logging: logging
}
};
}
Das Ergebnis steht anschließend beispielsweise als JSON zur Verfügung:
{
"latitude": 51.123456,
"longitude": 11.654321,
"logging": true
}
Logging
Der Taster an GPIO 0 steuert den Aufzeichnungsstatus.
#define BUTTON_PIN 0
Der Taster arbeitet mit INPUT_PULLUP.
Taster gedrückt → LOGGING START
Taster loslassen → LOGGING STOP
Der aktuelle Status wird als zusätzliches Byte im LoRaWAN-Payload übertragen.
Einstellbares Sendeintervall
Das Übertragungsintervall kann über einen integrierten WLAN-Hotspot eingestellt werden.
Der ESP32 stellt dazu ein eigenes WLAN bereit:
SSID: ESP32-LoRa-Config
Passwort: 12345678
Nach dem Verbinden kann über die IP-Adresse des ESP32 eine kleine Konfigurationsseite geöffnet werden.
Dort kann das Intervall eingegeben und gespeichert werden.
LittleFS
Das konfigurierte Intervall wird dauerhaft im internen Flash-Speicher des ESP32 gespeichert.
Verwendet wird LittleFS.
Die Datei:
/intervall.txt
enthält beispielsweise:
intervall=10000
Nach einem Neustart wird der gespeicherte Wert automatisch geladen.
Dadurch bleibt die Einstellung des Sendeintervalls auch nach dem Ausschalten des Gerätes erhalten.
WLAN-Konfiguration
Der ESP32 arbeitet für die Konfiguration als Access Point.
WiFi.softAP(ap_ssid, ap_pass);
Die IP-Adresse des Access Points wird beim Start über den seriellen Monitor ausgegeben.
Beispiel:
AP gestartet
IP: 192.168.4.1
Anschließend kann die Konfigurationsseite über diese Adresse geöffnet werden.
GPS-Fix
Nach dem Einschalten wartet das System zunächst auf einen gültigen GPS-Fix.
Während dieser Zeit wird über den seriellen Monitor ausgegeben:
Warte auf GPS Fix...
Nach maximal 120 Sekunden wird auch ohne gültigen GPS-Fix ein Sendevorgang ausgelöst.
Dadurch bleibt der LoRaWAN-Ablauf auch bei schlechten GPS-Empfangsbedingungen funktionsfähig.
Programmablauf
Vereinfacht arbeitet der Tracker nach folgendem Schema:
ESP32 starten
│
├── LittleFS initialisieren
│
├── Sendeintervall laden
│
├── WLAN Access Point starten
│
├── LoRaWAN initialisieren
│
├── GPS einschalten
│
└── System starten
│
▼
GPS-Daten lesen
│
▼
GPS-Fix vorhanden?
│ │
Nein Ja
│ │
└────┬─────┘
▼
Payload erstellen
│
▼
LoRaWAN Uplink
│
▼
Warten auf nächstes
Übertragungsintervall
Arduino-Bibliotheken
Für die Kompilierung werden unter anderem folgende Bibliotheken bzw. Komponenten verwendet:
#include "LoRaWan_APP.h" #include "Wire.h" #include "HT_st7735.h" #include "HT_TinyGPS++.h" #include <FS.h> #include <LittleFS.h> #include <WiFi.h> #include <WebServer.h>
Die LoRaWAN-Funktionen stammen aus der Heltec-Umgebung.
Dateien
Das Repository enthält den Arduino-Sketch:
GPS-Tracker/
│
├── GPS-Tracker.ino
├── README.md
└── images/
└── ...
Falls weitere Bilder oder Dokumentationen vorhanden sind, können diese im Verzeichnis images abgelegt werden.
Sicherheitshinweis
Wichtig: LoRaWAN-Zugangsdaten wie AppKey, AppEUI und gegebenenfalls weitere persönliche Geräteparameter dürfen nicht mit echten Werten in ein öffentliches GitHub-Repository hochgeladen werden.
Im veröffentlichten Sketch sollten diese Werte beispielsweise durch Platzhalter ersetzt werden:
uint8_t devEui[] = {
// eigene DevEUI eintragen
};
uint8_t appEui[] = {
// eigene AppEUI eintragen
};
uint8_t appKey[] = {
// eigenen AppKey eintragen
};
Der originale AppKey sollte niemals öffentlich veröffentlicht werden.
Entwicklungsstand
Version: 26.06.2026 FINAL
Schwerpunkt dieser Version:
- verbessertes Logging
- Speicherung des Sendeintervalls mit LittleFS
- Konfiguration über WLAN-Hotspot
- GPS-Positionsübertragung über LoRaWAN
- Anzeige der GPS-Koordinaten
- Übertragung des Logging-Status
Lizenz
Dieses Projekt wird auf GitHub zur privaten Dokumentation und als Beispielprojekt veröffentlicht.
Eine eigene Lizenz kann bei Bedarf ergänzt werden.
3. LoRaWAN Empfänger und Anzeige

Projektübersicht
Dieser ESP32 dient als Empfängerstation für einen GPS-Tracker.
Der GPS-Tracker überträgt seine aktuelle Position über LoRaWAN an The Things Network (TTN). Die empfangenen Daten werden von diesem ESP32 über MQTT aus TTN abgerufen, auf einem TFT-Display dargestellt und bei aktiviertem Logging als GPX-Datei auf einer SD-Karte gespeichert.
Zusätzlich besitzt der Empfänger einen eigenen WLAN-Hotspot. Über einen Webbrowser können die aufgezeichneten GPX-Tracks angezeigt, heruntergeladen und gelöscht werden. Die Tracks lassen sich direkt auf einer OpenStreetMap-Karte darstellen.
Systemübersicht
GPS-Tracker
│
│ LoRaWAN
▼
The Things Network (TTN)
│
│ MQTT
▼
ESP32 Empfänger
│
├── TFT Display
│
├── SD-Karte
│ └── GPX-Dateien
│
└── WLAN-Hotspot
│
▼
Webbrowser
│
└── OpenStreetMap
Funktionen
GPS-Daten
Der Empfänger verarbeitet die vom GPS-Tracker übertragenen:
- Latitude
- Longitude
- Logging-Status
- Zeitstempel
Die Position wird auf dem TFT-Display angezeigt.
TTN / MQTT
Die Kommunikation erfolgt über:
- The Things Network
- MQTT
- ESP32 WLAN
Der ESP32 verbindet sich mit dem WLAN und ruft die Uplink-Daten des Trackers über MQTT ab.
Gateway-Auswahl
Wenn mehrere TTN-Gateways ein Paket empfangen, werden die empfangenen Gateway-Daten ausgewertet.
Anhand des RSSI-Wertes wird das beste empfangende Gateway ausgewählt.
Auf dem Display werden unter anderem angezeigt:
- Gateway
- RSSI
- SNR
Damit lässt sich während einer Fahrt nachvollziehen, über welches Gateway die Daten empfangen wurden.
TFT-Display
Das TFT-Display zeigt die aktuellen Betriebsdaten des Empfängers.
Beispielsweise:
GPS TRACKER
Zeit: 14:32:18
LAT: 51.482345
LON: 11.970123
LOG: ON
GW: Gateway-Name
RSSI: -87 dBm
SNR: 8.5
Die genaue Darstellung hängt von der verwendeten Display-Konfiguration und der aktuellen Softwareversion ab.
GPX-Logging
Bei aktiviertem Logging werden die empfangenen GPS-Positionen auf der SD-Karte gespeichert.
Das Dateiformat ist GPX (GPS Exchange Format) und kann beispielsweise mit Karten- und GPS-Programmen weiterverarbeitet werden.
Die Dateien können später beispielsweise in:
- OpenStreetMap-Anwendungen
- GPX-Trackern
- Kartenprogrammen
- GPS-Software
verwendet werden.
Dateiname
Die GPX-Dateien werden automatisch anhand von Datum und Uhrzeit benannt.
Dadurch können mehrere Fahrten voneinander getrennt gespeichert werden.
Weboberfläche
Der ESP32 stellt einen eigenen WLAN-Hotspot zur Verfügung.
Nach dem Verbinden mit dem Hotspot kann die Weboberfläche des Empfängers mit einem Smartphone, Tablet oder PC geöffnet werden.
Die Weboberfläche ermöglicht:
- Anzeige der vorhandenen GPX-Dateien
- Download von GPX-Dateien
- Löschen von GPX-Dateien
- Anzeige eines aufgezeichneten Tracks
- Darstellung des Tracks auf einer Karte
Kartenanzeige
Die aufgezeichneten GPS-Daten können direkt auf einer OpenStreetMap-Karte dargestellt werden.
Die Trackpunkte werden dabei als Streckenverlauf angezeigt.
Zusätzlich können Informationen zum jeweiligen Trackpunkt dargestellt werden, beispielsweise:
- Uhrzeit
- Gateway
- RSSI
- SNR
WLAN-Hotspot
Der ESP32 arbeitet als eigener Access Point.
Beispiel:
SSID:
ESP32-GPS-Tracker
Passwort:
********
Die tatsächlichen Zugangsdaten werden im Sketch festgelegt.
Nach dem Verbinden mit dem ESP32 kann die Weboberfläche über die IP-Adresse des Access Points aufgerufen werden.
Die Standard-IP eines ESP32-SoftAP ist normalerweise:
192.168.4.1
Hardware
Empfänger
Benötigt werden:
- ESP32
- TFT-Display
- LoRaWAN-fähige WLAN-/MQTT-Anbindung
- SD-Karten-Modul
- SD-Karte
Je nach verwendeter Hardware können zusätzliche Bauteile erforderlich sein.
Software
Das Projekt wurde für den ESP32 entwickelt und verwendet unter anderem folgende Bibliotheken:
- WiFi
- MQTT
- TFT_eSPI
- SPI
- SD
- LittleFS
- weitere im Sketch aufgeführte Bibliotheken
Die jeweils verwendeten Bibliotheksversionen sollten möglichst mit der Version übereinstimmen, mit der der Sketch entwickelt und getestet wurde.
TTN-Konfiguration
Der GPS-Tracker muss bei The Things Network als LoRaWAN-Gerät eingerichtet sein.
Für den Empfänger werden die MQTT-Zugangsdaten von TTN benötigt.
Im Sketch werden unter anderem folgende Parameter verwendet:
mqtt_server mqtt_port mqtt_user mqtt_pass mqtt_topic
Sicherheit
Wichtig:
Passwörter, MQTT-API-Keys und andere Zugangsdaten dürfen nicht in ein öffentliches GitHub-Repository hochgeladen werden.
Vor der Veröffentlichung sollten deshalb alle persönlichen Zugangsdaten aus dem Sketch entfernt werden.
Beispielsweise:
const char* ssid = "DEIN_WLAN"; const char* password = "DEIN_PASSWORT"; const char* mqtt_user = "DEIN_TTN_USER"; const char* mqtt_pass = "DEIN_TTN_API_KEY";
Die eigenen Zugangsdaten können anschließend lokal wieder eingesetzt werden.
SD-Karte
Die SD-Karte dient zur Speicherung der aufgezeichneten GPS-Tracks.
Die erzeugten Dateien besitzen das Format:
.gpx
Die Dateien können über die Weboberfläche angezeigt und heruntergeladen werden.
Datenfluss
Ein typischer Datenfluss während einer Fahrt sieht folgendermaßen aus:
GPS-Sender
│
│ GPS Position
▼
ESP32 GPS Tracker
│
│ LoRaWAN
▼
LoRaWAN Gateway
│
▼
The Things Network
│
│ MQTT
▼
ESP32 Empfänger
│
├── TFT-Anzeige
│
└── SD-Karte
│
▼
GPX-Datei
│
▼
Webbrowser
│
▼
OpenStreetMap
Einsatzgebiet
Das System eignet sich beispielsweise für:
- GPS-Tracking von Fahrzeugen
- Modellbahn- und Fahrzeugprojekte
- Outdoor-Fahrzeuge
- mobile GPS-Aufzeichnungen
- Tests der LoRaWAN-Reichweite
- Aufzeichnung von Fahrstrecken
Projektstatus
Status: Funktionsfähiger Prototyp / getestet
Der Empfänger wurde zusammen mit dem zugehörigen GPS-LoRaWAN-Sender entwickelt und getestet.
Die Software wird bei Bedarf weiterentwickelt.
Hinweise
Die Reichweite und Zuverlässigkeit der Datenübertragung hängen unter anderem ab von:
- verwendeter LoRaWAN-Frequenz
- Gateway-Standort
- Antenne
- Sendeleistung
- Umgebung
- Bebauung
- Gelände
- Anzahl erreichbarer Gateways
Für den praktischen Betrieb sollte außerdem auf eine zuverlässige WLAN-Verbindung zwischen Empfänger und MQTT/TTN geachtet werden.
Zugehöriges Projekt
Der Empfänger ist Bestandteil des Projekts:
LoRaWAN GPS-Tracker
Zum Gesamtsystem gehören:
- GPS-Tracker / Sender
- LoRaWAN
- The Things Network
- MQTT
- ESP32-Empfänger
- TFT-Display
- SD-Karte
- GPX-Logging
- Weboberfläche
- OpenStreetMap
Lizenz
Dieses Projekt wird auf GitHub zu Dokumentations- und Entwicklungszwecken veröffentlicht.
Die Verwendung, Änderung und Weiterentwicklung des Codes erfolgt auf eigene Verantwortung.