19.01.2026

Tragbarer GPS-Tracker: GNSS + OLED + Akku

Qwiic
Inkplate
Arduino
Portable GPS tracker: GNSS + OLED + Battery

Table of contents

Einführung GNSS GPS L86-M33 Wie funktioniert es? Einfaches Code-Beispiel Tragbares GPS-Tracker-Projekt
Table of contents
Einführung GNSS GPS L86-M33 Wie funktioniert es? Einfaches Code-Beispiel Tragbares GPS-Tracker-Projekt

Einführung

Wenn Sie schon immer Ihren eigenen tragbaren GPS-Tracker bauen wollten – etwas, das Sie immer bei sich tragen können, um Ihre Richtung, Geschwindigkeit und Ihren aktuellen Standort zu sehen – dann ist dieses Projekt genau das Richtige für Sie. Egal, ob Sie gerne wandern, Rad fahren oder einfach gerne Gadgets entwickeln, die in realen Situationen verwendet werden können: Ein DIY-GPS-Tracker ist ein unterhaltsames Projekt und eine gute Möglichkeit, die Welt der Navigationstechnologie zu erkunden.

Mit einem GNSS-Modul, einem kleinen OLED-Display und einem wiederaufladbaren Akku können Sie ein kompaktes Gerät erstellen, das Ihnen überall Echtzeit-Bewegungsdaten anzeigt. Dieses System basiert auf einem ESP32-Mikrocontroller. Während alles auf einem Steckbrett verbunden ist, ist das Ziel dieses Artikels, Ihnen eine Idee und Inspiration zu geben, etwas noch Flexibleres und Kompakteres zu schaffen, das Ihren Bedürfnissen entspricht. Wir zeigen Ihnen Schritt für Schritt, wie die Systeme funktionieren und wie Sie sie alle zusammen verwenden können, um Ihren eigenen tragbaren GPS-Tracker zu bauen.

GNSS GPS L86-M33

Das GNSS GPS L86-M33 ist ein kompaktes Hochleistungsmodul, das für genaue Positionierungs- und Navigationsanwendungen entwickelt wurde. Ausgestattet mit **GNSS (Global Navigation Satellite System)**-Unterstützung kann dieser Empfänger mehrere Satellitensysteme verfolgen und so zuverlässige Standortdaten auch in anspruchsvolleren Umgebungen gewährleisten.

Hauptmerkmale:

  • Positionierungsgenauigkeit von +/- 2,5 Metern
  • Unterstützung mehrerer GNSS (GPS, GLONASS, GALILEO)
  • Hohe Empfindlichkeit
  • Geringer Stromverbrauch

Außerdem unterstützt das Modul fortschrittliche Funktionen wie **EASY (Embedded Assist System), AlwaysLocate** und einen integrierten **LOCUS-Datenlogger**. Diese Funktionen ermöglichen eine schnellere und bessere Positionierung und halten ein stabiles Signal auch in extremeren Umgebungen aufrecht, während sie gleichzeitig einen energieeffizienten Betrieb und gute Genauigkeit gewährleisten.

Wie funktioniert es?

Das L86-M33-Modul bestimmt seine Position, indem es Funksignale abhört, die von mehreren Navigationssatelliten ausgestrahlt werden, die die Erde umkreisen. Jeder Satellit sendet kontinuierlich präzise Zeitinformationen zusammen mit seiner genauen Position im Weltraum aus. Das GNSS-Modul verfügt über einen hochempfindlichen Funkempfänger, der diese Signale aufnimmt.

Im Inneren des Moduls misst ein winziger Prozessor, wie lange jedes Signal gebraucht hat, um anzukommen. Durch den Vergleich von Entfernungsmessungen von mindestens vier Satelliten kann das Modul dann Ihren Längen- und Breitengrad, die Höhe, die Geschwindigkeit und Ihren Kurs (Richtung) berechnen.

Das Modul kommuniziert mit Mikrocontrollern und anderen Geräten über eine UART-Schnittstelle.

Einfaches Code-Beispiel

Der Einstieg in die Verwendung unseres L86-M33 Breakout-Boards ist sehr einfach und unkompliziert. Das Board ist in zwei Varianten erhältlich:

  • UART-Version - verwendet TX (Senden) und RX (Empfangen) Leitungen zur Kommunikation mit anderen Geräten
  • I2C-Version - verwendet Qwiic/easyC-Anschluss für Plug-and-Play-Betrieb

Außerdem wird eine spezielle Arduino-Bibliothek bereitgestellt, um eine einfache und schnelle Entwicklung Ihrer Projekte zu gewährleisten; Sie finden sie unter diesem Link.

Initialisierung (UART- und Qwiic-Version):

Binden Sie zuerst die richtige Bibliothek ein. Wenn Sie die UART-Version des Boards verwenden, müssen Sie die Kommunikations-Pins definieren, dann eine Instanz des GNSS-Objekts erstellen und sie im Setup initialisieren:

// Include the GNSS L86-M33 library
#include "GNSS-L86-M33-SOLDERED.h"

// Define pins for the GNSS module
#define GNSS_RX 3
#define GNSS_TX 4

// Create an object for the GNSS library
GNSS gps(GNSS_TX, GNSS_RX);

void setup()
{
    Serial.begin(9600); // Initialize serial communication with the PC
    gps.begin();            // Initialize the GNSS module
}

// ...

 

Nach der Initialisierung prüft die Loop-Funktion ständig auf neue verfügbare Daten und zeigt diese entsprechend in der displayInfo()-Funktion an.

void loop()
{
    while (gps.gnssSerial->available() > 0)
    {
        // If something is successfully decoded, display new data.
        if (gps.encode(gps.gnssSerial->read()))
        {
            // Check if 500 milliseconds have passed since the last data display.
            if ((unsigned long)(millis() - lastGnssDisplay) > 500UL)
            {
                // Capture new timestamp.
                lastGnssDisplay = millis();

                // Display new data.
                displayInfo();
            }
        }
    }
    // If 5 seconds passed after startup - error
    if (millis() > 5000 && gps.charsProcessed() < 10)
    {
        Serial.println(F("No GPS detected: check wiring."));
        while (true)
        {
            // Delay is needed for the ESP8266.
            delay(10);
        }
    }
}

// Function that displays decoded data from the GNSS library.
void displayInfo()
{
    // Print out GPS latitude and longitude. If there is no valid data, show an error message.
    Serial.print(F("Location: "));
    if (gps.location.isValid())
    {
        Serial.print(gps.location.lat(), 6);
        Serial.print(F(","));
        Serial.print(gps.location.lng(), 6);
    }
    else
    {
        Serial.print(F("INVALID"));
    }

    // Print out time and date. If there is no valid data, show an error message.
    Serial.print(F("  Date/Time: "));
    if (gps.date.isValid())
    {
        Serial.print(gps.date.month());
        Serial.print(F("/"));
        Serial.print(gps.date.day());
        Serial.print(F("/"));
        Serial.print(gps.date.year());
    }
    else
    {
        Serial.print(F("INVALID"));
    }

    Serial.print(F(" "));
    if (gps.time.isValid())
    {
        if (gps.time.hour() < 10)
            Serial.print(F("0"));
        Serial.print(gps.time.hour());
        Serial.print(F(":"));
        if (gps.time.minute() < 10)
            Serial.print(F("0"));
        Serial.print(gps.time.minute());
        Serial.print(F(":"));
        if (gps.time.second() < 10)
            Serial.print(F("0"));
        Serial.print(gps.time.second());
        Serial.print(F("."));
        if (gps.time.centisecond() < 10)
            Serial.print(F("0"));
        Serial.print(gps.time.centisecond());
    }
    else
    {
        Serial.print(F("INVALID"));
    }

    // Move to a new line, ready to print new data.
    Serial.println();
}

Tragbares GPS-Tracker-Projekt

Ein einfaches Projekt, das das L86-M33 GNSS-GPS-Modul verwendet, um Position, Geschwindigkeit und Richtung genau zu messen. Das 0,96-Zoll-OLED-Display wird verwendet, um Daten auf zwei Arten anzuzeigen: Ein Bildschirm gibt die Position, Datums-/Zeitinformationen und Geschwindigkeit aus, der andere Bildschirm rendert einen Kompass, der die aktuelle Bewegungsrichtung anzeigt. Die Bildschirme wechseln alle 5 Sekunden.

Verwendete Komponenten:

  • ESP32
  • GNSS GPS L86-M33 Modul
  • OLED-Display 0,96''
  • 3,7V Li-Ion-Akku

void loop()
{
  // If there is any data on the UART of the GNSS, read it and send every char to the library
  while (gps.gnssSerial->available() > 0)
  {
    // Is something is successfully decoded, display new data.
    if (gps.encode(gps.gnssSerial->read()))
    {
      if (millis() - lastScreenFlip >= SCREEN_PERIOD) {
        lastScreenFlip += SCREEN_PERIOD;
        info_screen = !info_screen;
      }
      // Check if the 500 milliseconds passed from the last data display.
      if ((unsigned long)(millis() - lastGnssDisplay) > 500UL)
      {
        // Capture new timestap.
        lastGnssDisplay = millis();
        display.clearDisplay();
        display.setCursor(0, 0);
        if (info_screen) {
          // Update the display with new info
          displayInfo();
        }
        else {
          displayCompass();
        }
        display.display();
      }
    }
  }
  // No data in the first 5 seconds from the startup? Something is wrong... Check wires!
  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while (true)
    {
      // Delay is needed for the ESP8266.
      delay(10);
    }
  }
}

 

In diesem Artikel erwähnte Produkte

Verwandte Artikel