[Mikrocontroller]

Ein GPS Tracker mit Mobilfunk auf Basis eines ESP32

/ein-gps-tracker-mit-mobilfunk-auf-basis-eines-esp32
Ein GPS Tracker mit Mobilfunk auf Basis eines ESP32

Ich habe schon viel Zeit mit unterschiedlichsten Mikrocontrollern verbracht und sie mit etlichen Sensoren und Funktechniken ausgestattet.

Nur vom Mobilfunk ließ ich bisher die Finger, da ich keine normale SIM-Karte für ein Bastelprojekt bezahlen möchte, die mir nur als Spielerei bzw. für einfache Sensordaten dient.

Nun habe ich vor kurzem IoT-SIM-Karten entdeckt. Dabei handelt es sich letztlich um normale SIM-Karten, für die man nur einmalig 10–20 € bezahlt und dafür 5–10 Jahre lang ein festes Datenvolumen (typischerweise 0,5–2 GB) erhält.

Das klingt extrem wenig, aber wenn man auf MQTT setzt, kommt man damit wirklich sehr weit. Je nach Sendeintervall reicht das Datenvolumen für viele Jahre.

Also habe ich mir den Lilygo T-SIM bestellt. Dieses Board verfügt über:

  • GPS
  • Mobilfunk (SIM7000-Modul)
  • Batteriefach für einen 18650-Akku
  • Ladeelektronik zur direkten Nutzung mit einer Solarzelle

Damit eignet es sich perfekt für Sensordaten oder einen GPS-Tracker.


Erste Schritte

20 Tage später war es soweit: Der T-SIM sowie die IoT-SIM-Karte waren angekommen.

Die Einrichtung gestaltete sich einfacher als erwartet, da Lilygo umfangreichen Beispielcode mitliefert.

Ich habe den Beispielcode des MQTT-Clients mit dem Beispielcode des GPS-Tests kombiniert. Herausgekommen ist ein GPS-Tracker, der in einem frei definierbaren Intervall folgende Daten via MQTT an einen beliebigen Broker überträgt:

  • aktuelle Uhrzeit (im UNIX-Format)
  • Akkuspannung
  • Koordinaten (Latitude, Longitude)

Für Testzwecke könnt ihr die Server von HiveMQ verwenden.


Voraussetzungen

  • Arduino IDE
  • Board-Auswahl: ESP32 Dev Kit
  • Modul: SIM7000
  • APN des SIM-Karten-Anbieters
  • MQTT-Server (z. B. HiveMQ oder eigener Server)

Beispielcode

```cpp

define TINY_GSM_MODEM_SIM7000

define TINY_GSM_RX_BUFFER 1024

include

include

include

include

define SerialMon Serial

define SerialAT Serial1

define GSM_PIN ""

const char apn[] = "Dein-APN";
const char gprsUser[] = "";
const char gprsPass[] = "";
const char broker = "Dein MQTT Server";
const char
topicTelemetry = "Dein MQTT Topic";
const char* clientID = "Deine Client ID";

define UART_BAUD 9600

define PIN_TX 27

define PIN_RX 26

define PWR_PIN 4

define LED_PIN 12

define BAT_ADC_PIN 35

// Sendeintervall in Millisekunden (hier: 5 Minuten)
const unsigned long SEND_INTERVAL_MS = 300000;

define DBG(x) SerialMon.println(x)

TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
PubSubClient mqtt(client);

// Hilfsfunktionen: Zeitstempel, Distanzberechnung, Modemsteuerung, GPS-Steuerung ...
// (hier im Originalcode vollständig enthalten)

void setup() {
SerialMon.begin(115200); delay(10);
pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, HIGH);
pinMode(BAT_ADC_PIN, INPUT);

modemPowerOn();
SerialAT.begin(UART_BAUD, SERIAL_8N1, PIN_RX, PIN_TX);

SerialMon.println("Initialisiere Modem und Netzwerk...");
delay(10000);

if (!modem.testAT()) {
SerialMon.println("Modem reagiert nicht, starte neu...");
modemRestart();
}

SerialMon.println("Warte auf Netzwerk...");
if (!modem.waitForNetwork(60000L)) SerialMon.println("Kein Netzwerk verfügbar.");
else SerialMon.println("Netzwerk gefunden.");

SerialMon.println("Setze NB-IoT Modus...");
modem.sendAT("+CMNB=2");
modem.waitResponse(2000L);

SerialMon.print("Verbinde zu APN: "); SerialMon.println(apn);
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
SerialMon.println("NB-IoT Verbindung fehlgeschlagen.");
} else {
SerialMon.println("NB-IoT verbunden.");
}

mqtt.setServer(broker, 1883);
}

void loop() {
// Verbindung prüfen, ggf. GPS aktivieren, Daten erfassen, via MQTT senden
// (hier im Originalcode vollständig enthalten)
}
````


Funktionsweise

  • Das Gerät verbindet sich per NB-IoT mit dem Mobilfunknetz.
  • GPS-Daten werden abgerufen, bis ein Fix erreicht ist.
  • Zeitinformationen werden bevorzugt aus GPS, alternativ aus GSM bezogen.
  • Der Akku wird überwacht und die Spannung in die Payload aufgenommen.
  • Die Daten werden als JSON via MQTT an den definierten Server übertragen.
  • Optional wird eine Distanzprüfung durchgeführt, damit nur bei ausreichender Bewegung neue Daten gesendet werden.

Fazit

Mit einer günstigen IoT-SIM-Karte, einem Lilygo T-SIM7000 und ein wenig Anpassung im Code lässt sich ein batteriebetriebener, solarunterstützter GPS-Tracker aufbauen, der über MQTT viele Jahre hinweg zuverlässig Daten liefern kann.

Anzeige

/comments0 Einträge

Kommentare

> NO_COMMENTS_FOUND

> INITIATE_COMMENT_PROTOCOL

MARKDOWN_SUPPORT: ENABLED
CHARS: 0