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.

Illustration eines Wohnwagens mit ESP32, GPS und Home Assistant
Mit einem GPS-Modul und ESPHome lässt sich die Position beispielsweise eines Campers in Home Assistant darstellen.

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

Transparenz-Check Damit ich diesen Blog werbefrei halten kann, verwende ich Affiliate-Links (mit * markiert). Wenn du darüber etwas kaufst, erhalte ich eine kleine Provision von Amazon – für dich ändert sich am Preis rein gar nichts. Danke für deinen Support meiner Projekte!

Für den Aufbau benötigst du nur wenige Komponenten:

ESP32 Development Board

ESP32 Development Board mit USB-C-Anschluss
Das ESP32 Development Board übernimmt die Kommunikation mit dem GPS-Modul

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

Geekstory BE-220 GNSS-Modul mit Anschlusskabel
Das BE-220 mit vierpoligem Anschluss

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

ESP32 Breakout-Board mit seitlichen Schraubklemmen
ESP32-Breakout-Board mit seitlichen Schraubklemmen

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
Versorgung mit 5 V Das BE-220 wird in meinem Aufbau mit 5 V über den VIN-Anschluss des ESP32 versorgt. Der Hersteller gibt für das BE-220 eine Versorgungsspannung von 3,6 bis 5,5 V und typisch 5 V an. Für einen dauerhaften Aufbau sollte deshalb eine Versorgung innerhalb dieses Bereichs verwendet werden.

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.

BE-220 GPS-Modul mit Breakout Board und Anschlusskabeln
Das Breakout Board erleichtert den Anschluss beim Testaufbau
BE-220 GPS-Modul mit Breakout Board und Anschlusskabeln
Die Anschlüsse im Detail
Breakout-Board im Test- und Dauerbetrieb Das Breakout-Board erleichtert beim Testaufbau das Anschließen und Ändern der Verkabelung, kann bei fachgerechter Montage aber auch dauerhaft verwendet werden. Dafür sollten feindrähtige Leitungen mit passenden Aderendhülsen versehen, zugentlastet und alle Komponenten in einem geeigneten Gehäuse befestigt werden. In feuchten oder vibrationsbelasteten Umgebungen sind zusätzlich entsprechend geschützte und dafür geeignete Verbindungen erforderlich.

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.

Beim ersten Test etwas Geduld haben Wenn nach dem Einschalten zunächst keine Position angezeigt wird, ist das nicht automatisch ein Fehler. Besonders beim ersten Start oder nach einem Standortwechsel kann es etwas dauern, bis ausreichend Satellitendaten empfangen wurden und eine gültige Position bestimmt werden kann.

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.

Übersicht der GPS-Sensoren in Home Assistant
Die einzelnen GPS-Sensoren in der Home Assistant Übersicht.

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.

Entity IDs kontrollieren Die Entity IDs können abhängig von deiner ESPHome-Konfiguration etwas anders heißen. In Home Assistant kannst du unter Entwicklerwerkzeuge → Zustände nach „GPS Breitengrad“ und „GPS Längengrad“ suchen und die tatsächlich verwendeten Entity IDs übernehmen. Bei mir waren es sensor.esp32_gps_gps_breitengrad und sensor.esp32_gps_gps_langengrad.

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.

GPS-Verlauf auf der Home Assistant Karte
Darstellung der aktuellen Position und des GPS-Streckenverlaufs auf der Map-Karte.
Voraussetzung für die Positionsanzeige Die Karte benötigt einen Device Tracker mit gültigen Latitude- und Longitude-Attributen. Solange das GPS-Modul noch keinen gültigen Fix geliefert hat, kann deshalb zunächst keine Position auf der Karte angezeigt werden.

Verwendete Hardware-Komponenten

Folgende Komponenten kamen in diesem Projekt zum Einsatz:

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.

Ansteuerung eines 3-Farben RGB-LED-Moduls

Schritt-für-Schritt-Anleitung zum Anschluss mehrerer RGB-LED-Module mittels G-V-S Expansion Board und der Erstellung individueller Lichteffekte in ESPHome.

Temperaturmessung mit dem DS18B20 am ESP32

Schritt-für-Schritt-Anleitung zum Anschluss des DS18B20 und zur Auswertung der Temperaturdaten mit ESPHome.

Schwimmschalter am ESP32: Füllstand mit ESPHome überwachen

Ein weiterer Praxisaufbau mit ESP32 und ESPHome zur Überwachung eines Wasserstands.

Zisternen-Füllstand mit dem JSN-SR04T am ESP32 messen

Schritt-für-Schritt-Anleitung zum Anschluss des wasserdichten Ultraschallsensors JSN-SR04T an einen ESP32 sowie zur Konfiguration der Entfernungsmessung in ESPHome.