GPS-Modul am ESP32 anschließen und mit ESPHome auslesen
Ein GPS-Modul lässt sich mit wenigen Verbindungen an einen ESP32 anschließen und über ESPHome in Home Assistant einbinden. Der Aufbau eignet sich beispielsweise dazu, die Position eines Campers zu erfassen und in Home Assistant darzustellen. Voraussetzung für die laufende Übertragung ist, dass der ESP32 eine Netzwerkverbindung zu Home Assistant herstellen kann.
ESPHome übernimmt dabei die Auswertung der vom GPS-Modul gelieferten NMEA-Daten. Neben den Koordinaten können unter anderem Satellitenzahl, Geschwindigkeit, Höhe, Kurs und HDOP als Sensoren bereitgestellt werden.
Für den Testaufbau verwende ich zusätzlich ein Breakout Board. Dem BE-220 liegen Kabel sowohl mit passenden Steckern als auch mit losen Enden bei. Je nach verwendetem Kabel können sich die Kabelfarben dabei unterscheiden – insbesondere kann eine Leitung weiß oder gelb ausgeführt sein. Die Zuordnung sollte deshalb immer anhand der Beschriftung G, T, R und V am Modul erfolgen. Das Breakout-Board erleichtert den Testaufbau, da die Leitungen über Schraubklemmen angeschlossen werden können.
Die grundlegende Einrichtung eines ESP32 mit ESPHome ist bereits im Beitrag ESP32 NodeMCU mit ESPHome in Home Assistant einrichten beschrieben.
Die benötigten Komponenten
Für den Aufbau benötigst du nur wenige Komponenten:
ESP32 Development Board
Dieses ESP32 NodeMCU Development Board* (Werbung) übernimmt die Kommunikation mit dem GPS-Modul und stellt die ausgelesenen Daten anschließend über WLAN für Home Assistant bereit.
BE-220 GPS-Modul
Das BE-220 GPS-Modul* (Werbung) ist ein kompaktes GNSS-Modul mit serieller TTL-Schnittstelle. Es unterstützt das NMEA-Protokoll und liefert darüber die Positionsdaten. Neben dem BE-220 gibt es noch weitere BE-Modelle auf dem Markt. Dieser Testaufbau wurde explizit mit dem BE-220 durchgeführt, weshalb keine Gewähr dafür übernommen werden kann, dass der Ablauf bei anderen Modellen identisch ist.
Das Modul besitzt außerdem zwei LEDs. Die blaue TX-LED blinkt bei der Datenausgabe. Die rote PPS-LED bleibt ohne Positionsbestimmung aus und blinkt, sobald ein Fix vorliegt.
ESP32 Breakout-Board
Da sich das GPS-Modul mit einem Kabel mit losen Enden anschließen lässt, nutze ich für den ersten Testaufbau ein ESP32 Breakout-Board mit Schraubklemmen* (Werbung). So lassen sich die Kabel ohne Lötkolben sicher fixieren.
Das BE-220 GPS-Modul richtig anschließen
Das BE-220 besitzt einen vierpoligen Anschluss. Für die reine GPS-Auswertung benötigen wir allerdings nicht alle vier Leitungen.
Das GPS-Modul sendet seine Positionsdaten über den TX-Ausgang, der ESP32 empfängt diese Daten über seinen RX-Eingang. Die RX-Leitung des GPS-Moduls wird deshalb für unseren Aufbau nicht benötigt.
| BE-220 | Kabelfarbe | ESP32 | Funktion |
|---|---|---|---|
| G / GND | schwarz | GND | Masse |
| T / TX | weiß oder gelb | GPIO26 (RX) | GPS-Daten zum ESP32 |
| R / RX | grün | nicht angeschlossen | Für diesen Aufbau nicht benötigt |
| V / VCC | rot | 5 V über VIN | Versorgung des GPS-Moduls |
Das Breakout-Board für den Anschluss verwenden
Für den ersten Test möchte ich das GPS-Modul nicht direkt mit einzelnen Kabeln am ESP32 verlöten. Stattdessen verwende ich ein Breakout Board. Dieses besitzt neben den Schraubklemmen auch Buchsen für die Stecker, die dem BE-220 beiliegen.
Der vierpolige Stecker des GPS-Moduls kann dadurch direkt in die passende Buchse des Breakout Boards gesteckt werden. Vom Breakout Board führen anschließend die benötigten Leitungen zum ESP32.
ESPHome für das BE-220 konfigurieren
Nachdem das GPS-Modul mit dem ESP32 verbunden ist, wird die serielle Schnittstelle in ESPHome eingerichtet. Das von mir getestete BE-220 war auf 115200 Baud eingestellt. In ESPHome muss dieselbe Baudrate verwendet werden.
Die ESPHome GPS-Komponente kann GPS-Module auswerten, die das standardisierte NMEA-Protokoll verwenden. Für den Empfang ist dabei lediglich die RX-Leitung des UART erforderlich.
Für den kompletten Aufbau verwende ich folgende Konfiguration:
uart:
id: gps_uart
rx_pin: GPIO26
baud_rate: 115200
gps:
id: my_gps
uart_id: gps_uart
latitude:
name: "GPS Breitengrad"
longitude:
name: "GPS Längengrad"
speed:
name: "GPS Geschwindigkeit"
course:
name: "GPS Kurs"
altitude:
name: "GPS Höhe"
satellites:
name: "GPS Satelliten"
hdop:
name: "GPS HDOP"
update_interval: 5s
Die übrigen Bestandteile deiner ESPHome-Konfiguration wie WLAN, API und OTA bleiben unverändert. Wenn dein ESP32 bereits eingerichtet ist, müssen lediglich die oben gezeigten Komponenten ergänzt werden.
Die grundlegende Einrichtung eines ESP32 mit ESPHome ist bereits im Beitrag ESP32 NodeMCU mit ESPHome in Home Assistant einrichten beschrieben.
Nach dem Speichern kannst du die Konfiguration kompilieren und anschließend auf den ESP32 übertragen (installieren).
Die GPS-Daten im ESPHome-Log überprüfen
Nach dem erfolgreichen Flashen lässt sich sehr einfach kontrollieren, ob der ESP32 tatsächlich GPS-Daten empfängt. Dazu öffnest du in ESPHome die Logs des Gerätes.
GPS-Fix überprüfen
Direkt nach dem Einschalten muss das GPS-Modul zunächst Satellitensignale empfangen und daraus seine Position bestimmen. Deshalb sind die Positionssensoren nicht unbedingt sofort mit gültigen Werten gefüllt. Für den ersten Test solltest du das GPS-Modul möglichst so platzieren, dass die Antenne freie Sicht zum Himmel hat. Innerhalb eines Gebäudes kann der Empfang deutlich schlechter sein.
Die LEDs auf dem BE-220 können dabei als zusätzliche Kontrolle dienen. Die blinkende blaue TX-LED zeigt die Datenausgabe des Moduls, die rote PPS-LED beginnt bei einem erfolgreichen Fix zu blinken. Die zuverlässigste Kontrolle bietet das ESPHome-Log: Nach einem erfolgreichen Fix werden dort gültige Koordinaten und weitere GPS-Werte ausgegeben.
Wenn ein gültiger GPS-Fix vorhanden ist, erscheinen dort die von der GPS-Komponente bereitgestellten Sensorwerte.
Bei meinem Test sah die Ausgabe beispielsweise so aus:
[S][sensor]: 'GPS Breitengrad' >> 50.875320 °
[S][sensor]: 'GPS Längengrad' >> 11.176084 °
[S][sensor]: 'GPS Geschwindigkeit' >> 1.2 km/h
[S][sensor]: 'GPS Kurs' >> 0.00 °
[S][sensor]: 'GPS Höhe' >> 329,50 m
[S][sensor]: 'GPS Satelliten' >> 12
[S][sensor]: 'GPS HDOP' >> 0.520
Was bedeuten die Werte?
Die wichtigsten Werte lassen sich direkt interpretieren:
- Breitengrad: nördliche oder südliche Position
- Längengrad: östliche oder westliche Position
- Geschwindigkeit: aktuell vom GPS ermittelte Geschwindigkeit
- Kurs: Bewegungsrichtung in Grad
- Höhe: vom GPS ermittelte Höhe
- Satelliten: Anzahl der aktuell verwendeten Satelliten
- HDOP: Maß für die geometrische Qualität der horizontalen Positionsbestimmung
Zwölf verwendete Satelliten und ein niedriger HDOP-Wert sprechen grundsätzlich für günstige Empfangsbedingungen. Die tatsächliche Positionsgenauigkeit hängt jedoch auch von weiteren Faktoren wie Abschattungen und Signalreflexionen ab.
Die GPS-Position in Home Assistant anzeigen
ESPHome stellt die GPS-Daten zunächst als einzelne Sensoren in Home Assistant bereit. Damit Home Assistant daraus eine Position auf einer Karte machen kann, erstellen wir zusätzlich einen Device Tracker. Home Assistant kann anhand dieser Koordinaten auch die zugehörige Zone bestimmen.
Einen GPS-Device-Tracker erstellen
Öffne dazu deine configuration.yaml und ergänze einen Template-Device-Tracker:
template:
- device_tracker:
- name: "BE-220 GPS"
latitude: "{{ states('sensor.esp32_gps_gps_breitengrad') | float(none) }}"
longitude: "{{ states('sensor.esp32_gps_gps_langengrad') | float(none) }}"
Die beiden Sensoren werden dabei direkt als Quelle für die Position verwendet. Sobald Home Assistant neue gültige GPS-Koordinaten empfängt, wird die Position des Device Trackers aktualisiert.
Was zeigt der Device Tracker an?
Der neue Device Tracker besitzt neben seinem Status auch die GPS-Koordinaten als Attribute. Befindet sich die Position innerhalb der Home-Zone, kann der Zustand beispielsweise home sein. Befindet sich der Tracker innerhalb einer anderen Zone, wird der Name dieser Zone verwendet. Außerhalb definierter Zonen ist der Zustand not_home.
Damit können die GPS-Daten nicht nur auf einer Karte dargestellt, sondern später auch für Automatisierungen verwendet werden.
Die GPS-Position auf einer Home-Assistant-Karte anzeigen
Jetzt kann die Position des BE-220 direkt auf einer Home-Assistant-Karte angezeigt werden.
Füge dazu eine neue Map-Karte zu deinem Dashboard hinzu:
type: map
title: BE-220 GPS
default_zoom: 13
auto_fit: true
entities:
- device_tracker.be_220_gps
Auf der Karte wird jetzt die aktuelle Position des GPS-Trackers dargestellt. Wenn sich der ESP32 bewegt und neue Koordinaten liefert, wandert auch die Position des Trackers auf der Karte mit.
Den bisherigen Streckenverlauf anzeigen
Die Map-Karte kann außerdem einen zurückliegenden Zeitraum als Positionsverlauf anzeigen. Dazu wird hours_to_show verwendet.
type: map
title: BE-220 GPS
default_zoom: 13
auto_fit: true
hours_to_show: 24
entities:
- device_tracker.be_220_gps
Damit kann die Karte die in Home Assistant gespeicherten Positionen der letzten 24 Stunden als Verlauf darstellen.
Verwendete Hardware-Komponenten
Folgende Komponenten kamen in diesem Projekt zum Einsatz:
- ESP32 NodeMCU Development Board* (Werbung) – Verarbeitet die GPS-Daten und überträgt sie über WLAN an Home Assistant.
- BE-220 GPS-Modul* (Werbung) – Kompaktes GNSS-Modul mit serieller TTL-Schnittstelle.
- ESP32 Breakout-Board mit Schraubklemmen* (Werbung) – Erleichtert den Testaufbau, da die losen Kabelenden sicher verschraubt werden können.
Weitere ESP32- und ESPHome-Praxisprojekte
Aufbauend auf der ESP32-Ersteinrichtung können zahlreiche weitere Sensoren und Hardware-Komponenten mit ESPHome in Home Assistant eingebunden werden.
Schritt-für-Schritt-Anleitung zum Anschluss mehrerer RGB-LED-Module mittels G-V-S Expansion Board und der Erstellung individueller Lichteffekte in ESPHome.
Schritt-für-Schritt-Anleitung zum Anschluss des DS18B20 und zur Auswertung der Temperaturdaten mit ESPHome.
Ein weiterer Praxisaufbau mit ESP32 und ESPHome zur Überwachung eines Wasserstands.
Schritt-für-Schritt-Anleitung zum Anschluss des wasserdichten Ultraschallsensors JSN-SR04T an einen ESP32 sowie zur Konfiguration der Entfernungsmessung in ESPHome.