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 GPIOFunktion
GPIO 17GPS RX
GPIO 16GPS TX
5 VVCC
GNDGND

Das GPS-Modul wird über HardwareSerial angeschlossen.

OLED

ESP32 GPIOFunktion
GPIO 21SDA
GPIO 22SCL
3,3 VVCC
GNDGND

ADXL345

Der ADXL345 verwendet denselben I²C-Bus wie das OLED:

ESP32 GPIOFunktion
GPIO 21SDA
GPIO 22SCL
3,3 VVCC
GNDGND

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 GPIOFunktion
GPIO 27CS
GPIO 23MOSI
GPIO 19MISO
GPIO 18SCK
3,3 VVCC
GNDGND

Im aktuellen Projekt wird GPIO 27 als Chip-Select verwendet.

Taster

ESP32 GPIOFunktion
GPIO 32START
GPIO 33STOP

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-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

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

  1. Tracker einschalten.
  2. Warten, bis GPS-Daten verfügbar sind.
  3. START-Taster drücken.
  4. Strecke zurücklegen.
  5. STOP-Taster drücken.
  6. Track wird auf der SD-Karte gespeichert.
  7. Mit Smartphone oder PC mit dem WLAN GPS-Tracker verbinden.
  8. Browser öffnen:
http://192.168.4.1
  1. Track auswählen.
  2. Track laden drü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

QuellenESP32-GPS-Tracker-BE220.ino
DateienSchaltpläne, 3D Druckvorlagen, Bilder
Repositoryjoachim-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