Events

:

:

Elektronik | Funk | Software

Der Technik-Blog

  • Social Media

    YouTube

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden

    Der Technik-Blog

    TTGO ESP32 OTTA LoRaWAN GPS Tracker

    LoRaWAN TTGO GPS Tracker

    Alex @ AEQ-WEB

    Mit dem TTGO (LILYGO) GPS LoRa Board kann man einen sehr günstigen und genauen LoRaWAN GPS-Tracker bauen. Im ersten Teil vom Projekt "LoRa GPS-Tracker" ging es allgemein um dieses Board sowie um die Inbetriebnahme vom UBLOX NEO6 GPS Modul. In diesem Artikel geht es um die Inbetriebnahme von LoRa, die Registrierung im LoRaWAN Netzwerk sowie um das encodieren und decodieren der Payload.

    Voraussetzungen

    Voraussetzungen Grundvoraussetzung ist die Installation des ESP32 im Arduino IDE. Außerdem sollte der GPS-Empfänger bereits vorab wie im ersten Teil erklärt, getestet werden. Für die Inbetriebnahme von LoRa wird eine Library benötigt. Als Library wird die Arduino LMIC LoRa Library von MCCI Catena verwendet. Weitere Informationen dazu gibt es auf der Webseite vom vollständigen Source Code.

    Registrierung bei TTS

    Damit die Kommunikation zum LoRaWAN Netzwerk TTS (Nachfolger von TTN, The Things Network) funktioniert, muss das Device vorab im Netzwerk registriert werden. Eine allgemeine Anleitung zur Registrierung von ESP32 & Arduino Boards mit OTAA gibt es hier. Anschließend können alle Schlüssel, welche für das jeweilige LoRaWAN Netzwerk notwendig sind, in den Beispielcode kopiert werden. Ein eigenes LoRaWAN Gateway ist grundsätzlich nicht erforderlich, wird jedoch empfohlen. Dadurch beteiligt man sich am Ausbau vom LoRaWAN Netzwerk und hat gleichzeitig ein sehr hilfreiches Tool zur Fehleranalyse. Ein günstiges und gutes Multi-Channel Gateway wäre das MikroTIK LR8.

    Anpassung & Pin Mapping

    Bevor der Beispielcode hochgeladen wird, müssen dafür einiges Pins angepasst werden. Der GPS-Empfänger kommuniziert die Positionsdaten seriell zum ESP32. Die dafür notwendigen RX & TX Pins werden aus dem ersten Teil übernommen. Die folgenden Zeilen definieren die Pins für das GPS-Modul:

    Werbung:

    #define SERIAL1_RX 34 // GPS_TX -> 34
    #define SERIAL1_TX 12 // 12 -> GPS_RX
    

    Die Kommunikation zwischen ESP32 und den LoRa Modul findet über die SPI-Schnittstelle statt. Während SPI-Pins am Arduino eine fixe Zuweisung haben, ist dies am ESP32 nicht der Fall. Hier können verschiedene Pins für SPI genutzt werden. In der Setup-Methode (void setup()) werden daher die SPI-Pins festgelegt. Folgende Zeile definiert die SPI-Pins für den LoRa-Chip:

    SPI.begin(5, 19, 27, 18);
    

    Neben SPI werden für die Kommunikation zwischen ESP32 und LoRa-Chip noch weitere Pins benötigt. Ganz wichtig dabei ist der Reset-Pin und die DIO-Pins, insbesondere der DIO0 Pin. Folgendes Pin-Mapping muss vor den Methoden deklariert werden:

    const lmic_pinmap lmic_pins = {
      .nss = 18,
      .rxtx = LMIC_UNUSED_PIN,
      .rst = 23,
      .dio = {26, 33, 32},
    };
    

    Achtung: Es sind verschiedene Versionen vom LILYGO TTGO Board im Umlauf. Die Pinbelegung variiert zwischen den Versionen und muss möglicherweise angepasst werden


    Anpassung Library

    Im Hauptverzeichnis der MCCI-Library befindet sich der "project_config"-Ordner. In der "lmic_project_config.h"-Datei können verschiedene Optionen aktiviert und deaktiviert werden. Hier wird auch das Frequenzband eingestellt. Eine weitere sehr nützliche Option ist der Debug-Mode. Durch diese Aktivierung (Level 2) werden sämtliche Statusinformationen im Serial Monitor angezeigt. Folgende Beispielkonfiguration aktiviert das EU-Band und den Debug-Level:

    // project-specific definitions
    #define CFG_eu868 1
    //#define CFG_us915 1
    //#define CFG_au915 1
    //#define CFG_as923 1
    // #define LMIC_COUNTRY_CODE LMIC_COUNTRY_CODE_JP	/* for as923-JP */
    //#define CFG_kr920 1
    //#define CFG_in866 1
    #define CFG_sx1276_radio 1
    //#define LMIC_USE_INTERRUPTS
    
    #define LMIC_DEBUG_LEVEL 2
    

    Die Software

    Zuerst müssen in der Software die Schlüssel für das LoRaWAN Netzwerk angepasst werden. AppEUI und DevEUI werden in LSB eingefügt. Der AppKEY wird 1:1 wie in TTS angezeigt in MSB kopiert.

    Die Software startet anschließend mit einem JOIN-Request und wartet in den RX-Zeitfenstern auf eine Antwort vom LoRaWAN Netzwerk mit den Sitzungsschlüsseln. Wurde der JOIN-Request vom LoRaWAN Netzwerk korrekt verarbeitet, sollten im Serial Monitor AppSKey (App Session Key) und NwkSKey (Network Session Key) angezeigt werden. Anschließend erfolgt die Ausgabe "EV_Joined" im Serial Monitor. Der JOIN-Request ist somit abgeschlossen und eine Device-ID wurde zugewiesen. Der Controller hat somit alle notwendigen Daten, um zukünftige Datensätze an das LoRaWAN Netzwerk senden zu können. Erst nachdem der JOIN-Request erfolgreich war, fängt das eigentliche Programm in der Main-Schleife an zu laufen. Der folgende Screenshot zeigt den Serial Monitor nach einem erfolgreichen JOIN bei TTS:

    Werbung:

    Das Hauptprogramm wartet ständig auf neue NMEA Datensätze vom GPS-Modul und holt sich einzelne Parameter aus dem Datenstrom. Anschließend werden die empfangenen Koordinaten in den Dezimalgrad umgerechnet. Eine genaue Beschreibung zum Programmablauf und zur Umrechnung befinden sich im ersten Teil.

    Weitere Methoden

    Neu hinzugekommen ist die Methode "generate_payload()". Beim Aufruf dieser Methode werden die zu übertragenden Parameter (Breitengrad, Längengrad, Höhe & Anzahl aktiver Satelliten) übergeben. In der Methode werden die einzelnen Parameter in das "uint8_t tx_payload[11]"-Array übergeben. Die Aufteilung der Payload sieht wie folgt aus:

    Aufteilung der Payload

    Von Bit Bis Bit Beschreibung
    0 3 Breitengrad (Long)
    4 7 Längengrad (Long)
    8 9 Höhe (Integer)
    10 10 Anzahl aktiver Sat (Byte)


    Eine allgemeine ausführliche Erklärung zur LoRa Payload sowie zum Encoder & Decoder gibt es im Artikel zur LoRa Payload sowie in diesem YouTube Video.

    Das TX-Intervall ist im Beispielcode auf 60 Sekunden eingestellt und dient nur zu Testzwecken. In einem stark frequentierten Netzwerk sollte dieses Intervall jedoch unbedingt erhöht werden, damit Kapazitäten für alle Teilnehmer vorhanden bleiben. Die Payload wird ständig neu generiert und mit aktuellen Positionsdaten gefüllt. Vor der Übertragung wird die hexadezimale Payload, wie sie später auch am Application-Server zu sehen ist, im Serial Monitor ausgegeben.

    TTS Decoder

    Der Decoder wandelt die vom GPS-Tracker generierte Payload wieder in ihre einzelnen Bestandteile um. Zuvor aufgetrennte Varaiblen werden wieder zusammengeführt und teilweise auch gerundet. Der Payload-Decoder wird als Javascript kopiert und kann entweder global in der Application eingefügt werden oder nur für das jeweilige Gerät. Anschließend sollten in der Application neben der hexadezimalen Payload auch die Koordinaten in Klartext angezeigt werden. Folgender Decoder wird in der TTS Application eingefügt:

    function Decoder(bytes, port) {
      var lat_coord = bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3];
      var lat = lat_coord / 1000000 - 90;
    
      var lon_coord = bytes[4] << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7];
      var lon = lon_coord / 1000000 - 180;
      
      var alt = (bytes[8] << 8 | bytes[9]);
      
      var sats = bytes[10];
    
        return {
          latitude:  Math.round(lat*1000000)/1000000,
          longitude:  Math.round(lon*1000000)/1000000,
          altitude: alt,
          sat: sats
        }
    }
    

    Nach einfügen des Decoders sollten die einzelnen Positionsparameter mit dem nächsten eintreffenden Datensatz angezeigt werden:


    Werbung:

    Weiterleitung der Daten

    Generell speichert das LoRaWAN Netzwerk keine Daten. Empfangene Datensätze werden vom Thing Network an eine vom Anwender eingestellte Software weitergeleitet. Dafür gibt es bereits viele, teilweise sogar kostenlose Anbieter, die eine direkte Schnittstelle zum jeweiligen Thing Network haben und die Datensätze vom LoRaWAN Netzwerk entgegennehmen. Sowohl TTN als auch TTS können die Daten an eine eigene Webseite via JSON-Post weiterleiten. Eine Anleitung dazu gibt es im dritten Teil.


    122X122

    Über den Autor

    Alex, der Gründer von AEQ-WEB. Seit über 10 Jahren beschäftigt er sich mit Computern und elektronischen Bauteilen aller Art. Neben den Hardware-Projekten entwickelt er auch Webseiten, Apps und Software für Computer.

    Top Artikel in dieser Kategorie:

    LoRa ESP32 Library Setup Arduino IDE and Test

    ESP32 LoRa Arduino IDE Setup

    • Video

    In diesem Artikel zeigen wir, wie ein ESP32 LoRa Board im Arduino IDE konfiguriert wird und wie der angepasste Beispielcode für LoRa funktioniert

    Weiterlesen
    LoRaWAN - Die Starthilfe

    LoRaWAN - Die Starthilfe für Einsteiger

    Starthilfe LoRaWAN - Diese Seite richtet sich an alle Einsteiger, die mit LoRaWAN starten wollen und ihre Sensoren in das IoT-Netzwerkt TTN integrieren wollen

    Weiterlesen

    Social Media

    YouTube

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden