PROJEKT
ESP32 GPS Tracker BE-220
GPS-Tracker auf Basis eines ESP32 mit BE-220 GPS-Modul, OLED-Display, Beschleunigungssensor, BMP280 Barometer und SD-Karte.
Der Tracker zeichnet Fahrstrecken auf einer SD-Karte auf und speichert die Daten gleichzeitig als CSV- und GPX-Datei.
Über eine integrierte WLAN-Weboberfläche können gespeicherte Tracks verwaltet, heruntergeladen und auf einer Karte dargestellt werden.
Funktionen
- GPS-Tracking
- Unterstützung von GPS, GLONASS und Galileo
- Anzeige von Position und Geschwindigkeit
- Messung der zurückgelegten Strecke
- Aufzeichnung von Fahrstrecken auf SD-Karte
- Speicherung als CSV
- Speicherung als GPX
- Zeitstempel aus GPS-Daten
- Höhenmessung mit BMP280
- automatische Höhenkalibrierung mit GPS-Höhe
- Höhenfilterung und Glättung
- Bewegungserkennung mit ADXL345
- Start- und Stop-Taster
- integrierter WLAN-Access-Point
- integrierter Webserver
- Anzeige gespeicherter Tracks
- CSV-Download
- GPX-Download
- Track auf Karte anzeigen
- Höhenprofil anzeigen
- Track löschen
- automatische Verwaltung älterer Trackdateien
Hardware
Controller
- ESP32
GPS
- BE-220 GPS-Modul
- GPS / GLONASS / Galileo
- serielle Kommunikation
Display
- SH1107 OLED
- 128 × 128 Pixel
- I²C
Sensoren
- ADXL345 Beschleunigungssensor
- BMP280 Barometer / Höhensensor
Datenspeicher
- Micro-SD-Karte
- SPI-Schnittstelle
Bedienung
- Start-Taster
- Stop-Taster
Pinbelegung
GPS
| ESP32 GPIO | Funktion |
|---|---|
| GPIO 17 | GPS RX |
| GPIO 16 | GPS TX |
| 5 V | VCC |
| GND | GND |
Das GPS-Modul wird über HardwareSerial angeschlossen.
OLED
| ESP32 GPIO | Funktion |
|---|---|
| GPIO 21 | SDA |
| GPIO 22 | SCL |
| 3,3 V | VCC |
| GND | GND |
ADXL345
Der ADXL345 verwendet denselben I²C-Bus wie das OLED:
| ESP32 GPIO | Funktion |
|---|---|
| GPIO 21 | SDA |
| GPIO 22 | SCL |
| 3,3 V | VCC |
| GND | GND |
BMP280
Auch der BMP280 wird über den I²C-Bus angeschlossen.
Im aktuellen Sketch wird zunächst die I²C-Adresse:
0x76
verwendet.
Falls das Modul nicht erkannt wird, kann 0x77 getestet werden.
SD-Karte
| ESP32 GPIO | Funktion |
|---|---|
| GPIO 27 | CS |
| GPIO 23 | MOSI |
| GPIO 19 | MISO |
| GPIO 18 | SCK |
| 3,3 V | VCC |
| GND | GND |
Im aktuellen Projekt wird GPIO 27 als Chip-Select verwendet.
Taster
| ESP32 GPIO | Funktion |
|---|---|
| GPIO 32 | START |
| GPIO 33 | STOP |
Die Taster werden gegen GND angeschlossen und mit internen Pull-up-Widerständen betrieben.
Hardwareübersicht
ESP32
│
┌───────────────┬───┴───────────────┐
│ │ │
▼ ▼ ▼
GPS I²C Bus SD-Karte
BE-220 │ SPI
│ ┌─────┼─────┐
│ │ │ │
│ ▼ ▼ ▼
│ OLED ADXL345 BMP280
│
└── GPS RX/TX
┌──────────────┐
│ Start / Stop │
│ Taster │
└──────────────┘
Software
Das Projekt verwendet die Arduino-IDE und folgende Bibliotheken:
#include <TinyGPS++.h>
#include <HardwareSerial.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <Adafruit_SH110X.h>
#include <Adafruit_GFX.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
#include <WiFi.h>
#include <WebServer.h>
#include <esp_wifi.h>
#include <Adafruit_BMP280.h>
Verwendete Funktionen
TinyGPS++für die GPS-AuswertungAdafruit_SH110X/Adafruit_GFXfür das OLEDAdafruit_ADXL345_Ufür die BewegungserkennungAdafruit_BMP280für Druck und HöheSDfür die Speicherung der TracksWebServerfür die Weboberfläche
GPS
Das GPS-Modul wird mit 115200 Baud betrieben.
Der Tracker erkennt Daten von:
- GPS
- Galileo
- GLONASS
Auf dem OLED wird der Status angezeigt:
GPS: OK
GAL: OK
GLO: OK
Wenn länger als fünf Sekunden keine GNSS-Daten erkannt werden, werden die Statusanzeigen zurückgesetzt.
Anzeige
Während des Betriebs zeigt das OLED unter anderem:
- Latitude
- Longitude
- Geschwindigkeit
- zurückgelegte Strecke
- GPS-Status
- Galileo-Status
- GLONASS-Status
- Beschleunigungswert
- Logging-Status
- Bewegungserkennung
Beispiel:
Lat: 51.xxxxxx
Lng: 11.xxxxxx
42.5 km/h
1.25 km
GPS:OK GAL:OK GLO:OK
Acc: 1.08
Logging: JA
Bewegung erkannt
Logging
Die Aufzeichnung wird mit dem START-Taster begonnen und mit dem STOP-Taster beendet.
Während des Loggings werden GPS-Daten regelmäßig auf der SD-Karte gespeichert.
Das aktuelle Logging-Intervall beträgt:
5 Sekunden
Zusätzlich muss eine Bewegung erkannt werden, damit ein Datensatz gespeichert wird.
Bewegungserkennung
Der ADXL345 wird zur Erkennung der Bewegung verwendet.
Der aktuelle Schwellenwert beträgt:
const float bewegungsschwelle = 1.15;
Dadurch werden GPS-Daten nicht unnötig aufgezeichnet, wenn sich das Gerät nicht bewegt.
GPS-Qualitätsfilter
Vor dem Speichern eines GPS-Punktes werden verschiedene Bedingungen geprüft.
Ein Punkt wird verworfen, wenn:
- keine gültige GPS-Position vorhanden ist
- weniger als 6 Satelliten verfügbar sind
- der HDOP-Wert zu schlecht ist
Zusätzlich werden GPS-Sprünge erkannt.
Ein Positionssprung von mehr als:
50 Meter
wird verworfen.
Auch GPS-Drift im Stillstand wird herausgefiltert.
Streckenberechnung
Die Entfernung zwischen den aufgezeichneten GPS-Punkten wird mit der Distanzfunktion von TinyGPS++ berechnet.
Die Gesamtstrecke wird während der Aufzeichnung fortlaufend addiert.
Die Strecke wird im CSV-Format in Kilometern gespeichert.
Höhenmessung
Die Höhe wird mit dem BMP280 bestimmt.
Zusätzlich wird die GPS-Höhe verwendet, um den BMP280 einmalig zu kalibrieren.
Dazu wird ein Offset berechnet:
GPS-Höhe - Barometer-Höhe
Anschließend wird dieser Offset bei der weiteren Höhenberechnung berücksichtigt.
Höhenfilter
Um starke Schwankungen der Höhenmessung zu vermeiden, verwendet das Programm:
- Initialisierungspuffer
- Sprungfilter
- gleitenden Mittelwert
Der Höhenpuffer enthält:
5 Werte
Höhensprünge von mehr als 20 Metern werden verworfen.
Dateiformate
Für jeden Track werden zwei Dateien erzeugt:
track_YYYYMMDD_HHMMSS.csv
track_YYYYMMDD_HHMMSS.gpx
Der Dateiname wird normalerweise aus Datum und Uhrzeit des GPS erzeugt.
Falls keine gültige GPS-Zeit verfügbar ist, wird ein alternativer Dateiname erzeugt.
CSV-Datei
Die CSV-Datei besitzt folgenden Header:
Latitude,Longitude,Speed(km/h),Time(ms),Altitude(m),Distance(km)
Beispiel:
51.123456,11.123456,35.20,5000,112.45,0.12
Die CSV-Datei eignet sich beispielsweise für:
- Datenanalyse
- Tabellenkalkulation
- eigene Auswertungen
- weitere Software
GPX-Datei
Parallel zur CSV-Datei wird eine GPX-Datei erzeugt.
Die Trackpunkte enthalten:
- Latitude
- Longitude
- Höhe
- GPS-Zeit
Das GPX-Format kann von vielen GPS- und Kartenprogrammen verarbeitet werden.
SD-Karte
Die Trackdateien werden direkt auf der SD-Karte gespeichert.
Zusätzlich gibt es:
track_index.txt
Diese Datei enthält eine Übersicht der gespeicherten Tracks mit Zeitinformationen.
Verwaltung älterer Tracks
Beim Start einer neuen Aufzeichnung wird geprüft, wie viele Trackdateien vorhanden sind.
Der aktuelle Sketch behält maximal:
20 Tracks
Bei Überschreitung werden ältere Tracks gelöscht.
Dabei werden sowohl die CSV- als auch die zugehörige GPX-Datei entfernt.
WLAN Access Point
Der GPS-Tracker arbeitet als eigener WLAN Access Point.
Standardmäßig:
SSID: GPS-Tracker
Passwort: 12345678
IP: 192.168.4.1
Mit einem Smartphone, Tablet oder PC kann eine Verbindung mit dem Tracker hergestellt werden.
Weboberfläche
Nach Verbindung mit dem WLAN kann die Weboberfläche im Browser geöffnet werden:
http://192.168.4.1
Die Startseite zeigt die gespeicherten Tracks.
Für jeden Track stehen folgende Funktionen zur Verfügung:
- CSV herunterladen
- GPX herunterladen
- Track anzeigen
- Track löschen
Kartenansicht
Die Weboberfläche verwendet:
- Leaflet
- OpenStreetMap
Ein gespeicherter Track wird als Linie auf einer Karte dargestellt.
Der Track wird erst nach Auswahl und Betätigung von:
Track laden
geladen.
Die Karte passt den sichtbaren Bereich automatisch an den Track an.
Höhenprofil
Zusätzlich zur Karte wird ein Höhenprofil angezeigt.
Das Profil verwendet:
- Distanz als X-Achse
- Höhe als Y-Achse
Die Y-Achse wird automatisch an die aufgezeichneten Höhenwerte angepasst und erhält einen zusätzlichen Puffer.
Karte und Höhenprofil
Ein Punkt im Höhenprofil kann angeklickt werden.
Der entsprechende Punkt wird anschließend auf der Karte angezeigt.
Damit können Position, Distanz, Zeit und Höhe eines bestimmten Trackpunktes gemeinsam betrachtet werden.
Weboberfläche – externe Bibliotheken
Die Kartenansicht verwendet externe JavaScript-Bibliotheken:
- Leaflet
- OpenStreetMap
- Chart.js
Für die Kartenansicht wird deshalb eine Internetverbindung benötigt, wenn die externen Bibliotheken und Kartendaten geladen werden sollen.
Installation
1. Arduino IDE
Arduino IDE installieren und die ESP32-Boardunterstützung einrichten.
2. Bibliotheken installieren
Folgende Bibliotheken werden benötigt:
- TinyGPS++
- Adafruit GFX Library
- Adafruit SH110X
- Adafruit Unified Sensor
- Adafruit ADXL345
- Adafruit BMP280
- ESP32 SD
- ESP32 WebServer
3. Hardware anschließen
Die Komponenten entsprechend der oben beschriebenen Pinbelegung anschließen.
4. SD-Karte vorbereiten
Eine geeignete Micro-SD-Karte einsetzen.
Der Tracker erzeugt die benötigten Trackdateien automatisch.
5. Sketch übertragen
Den Sketch:
ESP32-GPS-Tracker-BE220.ino
in der Arduino IDE öffnen und auf den ESP32 übertragen.
6. Tracker starten
Nach dem Einschalten initialisiert der Tracker:
- OLED
- WLAN Access Point
- SD-Karte
- ADXL345
- BMP280
- GPS
Auf dem OLED wird der Status der Komponenten angezeigt.
Erste Aufzeichnung
- Tracker einschalten.
- Warten, bis GPS-Daten verfügbar sind.
- START-Taster drücken.
- Strecke zurücklegen.
- STOP-Taster drücken.
- Track wird auf der SD-Karte gespeichert.
- Mit Smartphone oder PC mit dem WLAN
GPS-Trackerverbinden. - Browser öffnen:
http://192.168.4.1
- Track auswählen.
Track ladendrücken.
Projektstatus
Version 16
Datum: 05.04.2026
Änderungen in Version 16
- verbessertes Logging
- CSV und GPX werden synchron aufgezeichnet
- neue Web-Darstellung
- Track kann gezielt geladen werden
- Kartendarstellung
- Höhenprofil
- automatische Y-Achsen-Skalierung
- Geschwindigkeit wird aufgezeichnet
- Entfernung wird aufgezeichnet
- GPX-Datei wird erzeugt
WEB- Oberfläche:

Hinweise
Der GPS-Empfang ist abhängig von Umgebung, Antennenposition und Sicht zum Himmel.
Die Genauigkeit der aufgezeichneten Position und Höhe hängt von der Qualität der GNSS-Daten und den verwendeten Sensoren ab.
Der aktuelle Sketch verwendet einen festen WLAN-Access-Point mit den oben genannten Zugangsdaten.
Autor
Joachim Reuter
Version
ESP32 GPS Tracker BE-220 – Version 16
Stand: 05.04.2026
github
| Quellen | ESP32-GPS-Tracker-BE220.ino |
| Dateien | Schaltpläne, 3D Druckvorlagen, Bilder |
| Repository | joachim-reuter/ESP32-GPS-Tracker-BE220: ESP32 GPS Tracke mit BE220 |
Hardware
Controller
ESP32
GPS
BE-220 GPS-Modul
GPS / GLONASS / Galileo
serielle Kommunikation
Display
SH1107 OLED
128 × 128 Pixel
I²C
Sensoren
ADXL345 Beschleunigungssensor
BMP280 Barometer / Höhensensor
Datenspeicher
Micro-SD-Karte
SPI-Schnittstelle
Bedienung
Start-Taster
Stop-Taster
Software & Technologien
Das Projekt verwendet die Arduino-IDE und folgende Bibliotheken:
(siehe im Text)
Verwendete Funktionen
TinyGPS++ für die GPS-Auswertung
Adafruit_SH110X / Adafruit_GFX für das OLED
Adafruit_ADXL345_U für die Bewegungserkennung
Adafruit_BMP280 für Druck und Höhe
SD für die Speicherung der Tracks
WebServer für die Weboberfläche
Status
Aktiv