Mit einem GPS-Modul, dem Raspberry Pi und einem Akkupack lässt sich ein kompakter GPS-Tracker bauen – ideal für das Auto, Fahrradtouren oder Wanderungen. In diesem Artikel zeige ich euch die Verkabelung des NEO-6M/NEO-8M GPS-Moduls, die Einrichtung von gpsd unter Raspberry Pi OS Bookworm und wie ihr die GPS-Daten auslesen und speichern könnt.
Material
- Raspberry Pi Zero 2W (~17€) – ideal für mobilen Betrieb dank kompakter Bauform und geringem Stromverbrauch
- NEO-6M oder NEO-M8N GPS-Modul (GY-NEO6MV2) (~10–15€) – per UART angebunden
- microSD-Karte 16GB A2 (~8€)
- USB-Akkupack 10.000mAh (~25€) – für Betrieb ohne Steckdose
- Jumper-Kabel (female/female, 4 Stück)
- Optional: kleines ABS-Gehäuse für das GPS-Modul
- Für KFZ-Einsatz: USB-Adapter für den Zigarettenanzünder
GPS-Modul anschließen
Das GPS-Modul kommuniziert über UART (serielle Schnittstelle). Die Pinbelegung ist für alle Raspberry Pi Modelle identisch:
| GPS-Modul Pin | Raspberry Pi Pin | Beschreibung |
|---|---|---|
| VCC | PIN 1 (3,3V) | Stromversorgung |
| GND | PIN 6 (GND) | Masse |
| TX (GPS) | PIN 10 (RX / GPIO15) | Daten GPS → Pi |
| RX (GPS) | PIN 8 (TX / GPIO14) | Daten Pi → GPS (optional) |
| PPS | PIN 12 (GPIO18) | Zeitsignal (optional) |
UART aktivieren und Konsole deaktivieren
Unter Raspberry Pi OS Bookworm liegt die Konfiguration unter /boot/firmware/config.txt:
|
1 |
sudo nano /boot/firmware/config.txt |
Fügt am Ende ein:
|
1 |
enable_uart=1 |
Beim Pi 3, 4, 5 und Zero 2W: Bluetooth deaktivieren damit der vollwertige PL011 UART für das GPS-Modul frei wird:
|
1 |
dtoverlay=disable-bt |
Serielle Konsole in der cmdline.txt deaktivieren:
|
1 |
sudo nano /boot/firmware/cmdline.txt |
Den Eintrag console=serial0,115200 aus der Zeile entfernen. Nach einem Neustart ist UART aktiv.
|
1 |
sudo reboot |
gpsd installieren und konfigurieren
gpsd ist der Standard-Daemon für GPS-Geräte unter Linux:
|
1 2 |
sudo apt update sudo apt install gpsd gpsd-clients -y |
Konfiguration anpassen:
|
1 |
sudo nano /etc/default/gpsd |
|
1 2 3 |
DEVICES="/dev/ttyAMA0" GPSD_OPTIONS="-n" START_DAEMON="true" |
gpsd aktivieren und starten:
|
1 2 |
sudo systemctl enable gpsd sudo systemctl start gpsd |
GPS-Empfang testen
Das Textinterface cgps zeigt die aktuellen GPS-Daten:
|
1 |
cgps -s |
Beim ersten Start kann es bis zu 5 Minuten dauern, bis das GPS-Modul einen Fix hat (Sichtverbindung zu mindestens 4 Satelliten nötig, am besten im Freien). Das Modul zeigt dann Längen- und Breitengrad, Geschwindigkeit und Höhe an.
Alternativ mit gpspipe für einfache NMEA-Ausgabe:
|
1 |
gpspipe -r | head -20 |
GPS-Daten mit Python auslesen
Das Modul gps3 ermöglicht komfortablen GPS-Zugriff in Python:
|
1 |
sudo apt install python3-gps -y |
Einfaches Python-Script zum Auslesen:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/usr/bin/env python3 import gps import time session = gps.gps(mode=gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE) try: while True: report = session.next() if report['class'] == 'TPV': lat = getattr(report, 'lat', 'n/a') lon = getattr(report, 'lon', 'n/a') speed = getattr(report, 'speed', 'n/a') print(f"Lat: {lat}, Lon: {lon}, Speed: {speed} m/s") time.sleep(1) except KeyboardInterrupt: print("Beendet") finally: session.close() |
GPS-Track aufzeichnen (GPX-Format)
gpxlogger aus dem gpsd-clients-Paket schreibt GPS-Tracks direkt im GPX-Format:
|
1 |
gpxlogger -f /home/pi/track-$(date +%Y%m%d).gpx |
GPX-Dateien könnt ihr danach in OpenStreetMap, Google Maps oder Tools wie GPXSee visualisieren.
Uhrzeit via GPS beziehen (offline-Betrieb)
Für mobilen Betrieb ohne Internetverbindung kann der Pi die Uhrzeit direkt vom GPS-Signal beziehen. Dazu wird das PPS-Signal verwendet (GPIO18):
In /boot/firmware/config.txt ergänzen:
|
1 |
dtoverlay=pps-gpio,gpiopin=18 |
PPS-Tools und chrony installieren:
|
1 |
sudo apt install pps-tools chrony -y |
PPS-Signal testen (Pi braucht GPS-Fix):
|
1 |
sudo ppstest /dev/pps0 |
Chrony für GPS-Zeit konfigurieren:
|
1 |
sudo nano /etc/chrony/chrony.conf |
Am Ende ergänzen:
|
1 2 |
refclock SHM 0 refid GPS precision 1e-1 offset 0.9999 delay 0.2 refclock PPS /dev/pps0 refid PPS lock GPS |
|
1 |
sudo systemctl restart chrony |
Autostart des GPS-Loggers
Mit einem Cronjob beim Systemstart automatisch mit der Aufzeichnung beginnen:
|
1 |
sudo crontab -e |
|
1 |
@reboot sleep 15 && gpxlogger -f /home/pi/tracks/track-$(date +\%Y\%m\%d_\%H\%M).gpx |
Das sleep 15 gibt gpsd Zeit, das GPS-Modul zu initialisieren.
