19.01.2026

Prijenosni GPS tracker: GNSS + OLED + baterija

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

Table of contents

Uvod GNSS GPS L86-M33 Kako to radi? Primjer osnovnog koda Projekt prijenosnog GPS uređaja za praćenje
Table of contents
Uvod GNSS GPS L86-M33 Kako to radi? Primjer osnovnog koda Projekt prijenosnog GPS uređaja za praćenje

Uvod

Ako ste ikada željeli izraditi vlastiti prijenosni GPS uređaj za praćenje – nešto što možete nositi sa sobom u svakom trenutku kako biste vidjeli svoj smjer, brzinu i trenutnu lokaciju – onda je ovaj projekt za vas. Bez obzira na to bavite li se planinarenjem, biciklizmom ili jednostavno uživate u stvaranju gadgeta koji se mogu koristiti u stvarnim situacijama, "uradi sam" (DIY) GPS tracker zabavan je projekt i dobar način za istraživanje svijeta navigacijske tehnologije.

Koristeći GNSS modul, mali OLED zaslon i punjivu bateriju, možete stvoriti kompaktan uređaj koji vam prikazuje podatke o kretanju u stvarnom vremenu gdje god krenuli. Ovaj sustav izgrađen je pomoću ESP32 mikrokontrolera, a iako je sve povezano na eksperimentalnoj pločici (breadboard), cilj ovog članka je dati vam ideju i inspiraciju da stvorite nešto još fleksibilnije i kompaktnije što služi vašim potrebama. Provest ćemo vas kroz to kako sustavi rade i kako ih sve zajedno možete koristiti za izradu vlastitog prijenosnog GPS uređaja za praćenje.

GNSS GPS L86-M33

GNSS GPS L86-M33 kompaktan je modul visokih performansi dizajniran za precizno pozicioniranje i navigacijske primjene. Opremljen podrškom za GNSS (Global Navigation Satellite System), ovaj prijemnik može pratiti više satelitskih sustava, osiguravajući pouzdane podatke o lokaciji čak i u zahtjevnijim okruženjima.

Ključne značajke:

  • Točnost pozicioniranja od +/- 2,5 metara
  • Podrška za više GNSS sustava (GPS, GLONASS, GALILEO)
  • Visoka osjetljivost
  • Niska potrošnja energije

Također, modul podržava napredne značajke kao što su EASY (Embedded Assist System), AlwaysLocate i integrirani LOCUS data logger. Ove značajke omogućuju brže i bolje pozicioniranje, održavajući stabilan signal čak i u ekstremnijim okruženjima, a sve to uz osiguranje energetski učinkovitog rada i dobre točnosti.

Kako to radi?

Modul L86-M33 određuje svoj položaj slušajući radio signale koje emitira više navigacijskih satelita koji kruže oko Zemlje. Svaki satelit kontinuirano šalje precizne informacije o vremenu zajedno sa svojim točnim položajem u svemiru. GNSS modul ima visoko osjetljiv radio prijemnik koji hvata te signale.

Unutar modula, maleni procesor mjeri koliko je vremena trebalo svakom signalu da stigne. Usporedbom mjerenja udaljenosti od najmanje četiri satelita, modul tada može izračunati vašu zemljopisnu širinu i dužinu, nadmorsku visinu, brzinu i vaš smjer kretanja (heading).

Modul komunicira s mikrokontrolerima i drugim uređajima putem UART sučelja.

Primjer osnovnog koda

Proces početka korištenja naše L86-M33 breakout pločice vrlo je jednostavan i izravan. Pločica dolazi u dvije varijante:

  • UART verzija - koristi TX (Transmit - slanje) i RX (Receive - primanje) linije za komunikaciju s drugim uređajima
  • I2C verzija - koristi Qwiic/easyC priključak za plug-and-play rad

Također, osigurana je namjenska Arduino biblioteka kako bi se osigurao jednostavan i brz razvoj vaših projekata, a možete je pronaći na ovoj poveznici.

Inicijalizacija (UART i Qwiic verzija):

Prvo uključite odgovarajuću biblioteku; ako koristite UART verziju pločice, morate definirati komunikacijske pinove, zatim stvoriti instancu GNSS objekta i inicijalizirati je u setup funkciji:

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

// ...

 

Nakon inicijalizacije, loop funkcija neprestano provjerava jesu li dostupni novi podaci i prikazuje ih na odgovarajući način u funkciji displayInfo().

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();
}

Projekt prijenosnog GPS uređaja za praćenje

Jednostavan projekt koji koristi L86-M33 GNSS GPS modul za precizno mjerenje položaja, brzine i smjera. OLED zaslon od 0,96'' koristi se za prikaz podataka na dva načina: jedan zaslon ispisuje položaj, podatke o datumu/vremenu i brzinu, drugi zaslon prikazuje kompas koji pokazuje trenutni smjer u kojem se krećete. Zasloni se izmjenjuju svakih 5 sekundi.

Korištene komponente:

  • ESP32
  • GNSS GPS L86-M33 modul
  • OLED zaslon 0,96''
  • 3,7V Li-ion baterija

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);
    }
  }
}

 

Proizvodi u ovom članku

Povezani članci