Events

:

:

Elektronik | Funk | Software

Der Technik-Blog

  • Social Media

    YouTube

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden

    Der Technik-Blog

    Heltec LoRa32 LoRaWAN Tutorial

    LoRaWAN mit dem Heltec LoRa32 V3

    Alex @ AEQ-WEB

    Heltec hat vor einigen Monaten die dritte Version vom LoRa32 Board veröffentlicht. Beim neuen LoRa32 V3 hat Heltec einige Änderungen an der Hardware vorgenommen. So besitzt die Version 2 den bekannten SX1276 LoRa Chip von Semtech. Mit Version 3 wurde dieser durch einen SX1262 (ebenfalls von Semtech) ersetzt. Diese Änderung führt dazu, dass praktisch fast alle Projekte mit LoRaWAN nicht mehr funktionieren, da Projekte für das V2 Board überwiegend die LMIC-Library als Basis für LoRaWAN nehmen. Die LMIC-Librarys bieten aktuell aber keine Unterstützung für den SX1262 und ein Einstieg in LoRaWAN ist somit komplizierter geworden. In diesem Artikel geht es um die Einrichtung vom Heltec LoRa32 in der Arduino IDE und um einen ersten Verbindungsaufbau zum LoRaWAN Netzwerk TTN (The Things Network).

    Ist der SX1262 besser?

    Der SX1262 ist zwar besser als der SX1276, jedoch sind diese Änderungen für die klassischen Anwender von LoRaWAN nicht weiter wichtig. Lediglich der Energieverbrauch beim Empfang ist etwas geringer, was sich bei einem Sensor/Aktor im Klasse-C Betrieb positiv auswirken würde. Der SX1262 kann einen sehr breiten Frequenzbereich von ungefähr 160 MHz bis 960 MHz bedienen und ist somit weltweit für LoRaWAN einsetzbar. Die Sendeleistung kann minimal erhöht werden, wobei fraglich ist, ob eine höhere Sendeleistung den Fernmeldebestimmungen noch entspricht und im lizenzfreien ISM-Band zulässig ist.

    Heltec LoRa32 V2 vs. V3

    Nicht nur der LoRa-Chip wurde geändert, sondern auch der Mikrocontroller selbst. Version 2 verwendet einen ESP32-D0 WDQ6 aus dem Jahr 2016, Version 3 einen ESP32-S3 aus dem Jahr 2020. Bis auf die Unterstützung von BLE 5.0 bringt das Prozessorupgrade der Maker-Community kaum weitere nennenswerten Features. Der Formfaktor vom Board selbst bleibt unverändert gleich, der externe 64-Mbit Flash wurde bei Version 3 entfernt. Als USB-Serial Converter verwenden beide Boards den CP2102 von Sillabs.

    Einrichtung in der Arduino IDE

    Für die Programmierung wird die Arduino IDE Version 2 (2.0.4) verwendet. Arduino hat standardmäßig keine Unterstützung für den ESP32, daher muss das Board über den Board Manager zuerst installiert werden.

    Die richtige Board-Library

    Heltec bietet für seine Boards eine eigene Bibliothek an. Zurzeit bietet die orginale Heltec Library für den ESP32 noch keine Unterstützung für das LoRa32 V3 an. Als alternative gibt es einen Clone von der originalen Bibliothek des Chipherstellers espressif, welche seit Version 0.0.7 bereits das Heltec LoRa32 V3 unterstützt und über ein funktionierendes Beispiel für LoRaWAN verfügt. In der Arduino IDE wird für das LoRa32 V3 Board die Heltec Aaron Lee Wifi Kit Library verwendet.

    In der Arduino IDE wird in den Einstellungen folgende URL für den Boards Manager eingegeben:

    https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series/releases/download/0.0.7/package_heltec_esp32_index.json

    Einstellungen für das Heltec V3

    Zunächst muss das Board in der Arduino IDE eingerichtet werden. Dazu wird der Boards Manager geöffnet:

    Werbung:

    Sucht man nach "heltec", so sollte folgender Treffer kommen:

    Für die Unterstützung vom LoRa32 V3 Board muss mindestens Version 0.0.7 installiert werden.

    Beispielcode von Heltec

    Nach der Board-Einrichtung steht in der Arduino IDE bereits ein funktionierender LoRaWAN Beispielcode zur Verfügung. Dazu wird folgendes Beispiel geöffnet: Heltec-Example -> LoRaWAN -> LoRaWAN

    Board-Konfiguration

    Ein Config-File wie bei der LMIC-Library gibt es hier nicht. Die Frequenzeinstellung für LoRa erfolgt diesmal direkt in der Arduino IDE. Folgende Einstellungen können in der Arduino IDE für das Heltec LoRa32 V3 verwendet werden:

    • Board: Wifi LoRa 32(V3)
    • Port: COM-Port vom angeschlossenen Board
    • CPU Frequency: 240Mhz
    • Upload Speed: 921600

    • LoRaWAN_DEVEUI: Wifi LoRa32(V3)
    • LoRaWAN_Preamble_Length: 8 (default)
    • LoRaWAN Region: REGION_EU868

    Einrichtung im LoRaWAN Netzwerk

    Für die Kommunikation mit einem LoRaWAN-Netzwerk werden für OTAA drei verschiedene Schlüssel benötigt. Für dieses Beispiel wird das LoRaWAN Netzwerk The Things Network (TTN) verwendet. In TTN wird zuerst eine neue Application mit einem frei wählbaren Namen und einer optionalen Beschreibung angelegt:

    Werbung:

    Die Application umfasst mindestens ein Endgerät. In der Praxis fasst man alle baugleichen Sensoren in einer Application zusammen und kann dafür einen zentralen Decoder einsetzen. In der Application muss unter dem Menüpunkt "End devices" ein neues Gerät angelegt werden. Entweder entscheidet man sich für die Konfiguration aus der "Device Repository" oder legt manuell eine Konfiguration an. Aktuell unterstützt die Bibliothek (Version 0.0.7) die LoRaWAN Version 1.0.2:

    Anschließend werden die Schlüssel für das Endgerät angelegt oder generiert. Die JOIN-EUI (APP-EUI) für das Board kann über die Arduino IDE ausgelesen werden. Alternativ kann aber auch selbst ein 16-Stelliger Schlüssel erzeugt werden. DEV-EUI und APP-KEY können in der TTN-Console generiert werden.

    Alle drei Schlüssel werden als Array im MSB-Format kopiert und anschließend im Beispielcode eingefügt:

    OTTA-Keys einbinden

    Im Beispielcode werden die drei Schlüssel aus der Console eingebunden. Dies könnte wie folgt aussehen:

    Encoder schreiben

    LoRaWAN ist nicht nur mit dem Energieverbrauch extrem sparsam, sondern auch bei der Datenübertragung. Ziel ist es, nur so wenige Bytes an Information zu übertragen, wie absolut notwendig sind. Parameternamen, Kommastellen und ähnliches "verbrauchen" unnötige Bytes, weshalb diese Informationen mit einem Encoder entfernet werden und später am LoRaWAN Application Server mittels Decoder wieder richtig zusammengesetzt werden. Als Beispiel sollen zwei Werte einer Wetterstation (Temperatur & Feuchtigkeit) übertragen werden. Der Encoder multipliziert beide Werte um den Faktor 10 bzw. 100 und entfernt damit die Kommastellen. Anschließend werden die zwei Integer-Werte auf jeweils zwei Bytes aufgeteilt und hintereinander gereiht. Die Payload beträgt anschließend nur noch vier Byte. Der originale Payload-Encoder vom Beispielcode:

    Werbung:

        appDataSize = 4;
        appData[0] = 0x00;
        appData[1] = 0x01;
        appData[2] = 0x02;
        appData[3] = 0x03;
    

    wird durch folgenden Encoder ersetzt:

      float temperature = 22.55;  //example 22.55 *C
      float humidity = 72.5;    //example 72.5 %
    
      int int_temp = temperature * 100; //remove comma
      int int_hum = humidity * 10; //remove comma
    
      appDataSize = 4;
      appData[0] = int_temp >> 8;
      appData[1] = int_temp;
      appData[2] = int_hum >> 8;
      appData[3] = int_hum;
    

    Beispielcode hochladen

    Nachdem Schlüssel und Decoder im Beispielcode angepasst wurden, kann der Code auf das Board hochgeladen werden. Das Sendeintervall (uint32_t appTxDutyCycle = 15000) sollte im Anschluss angepasst werden und auf mindestens 60 Sekunden (60000 ms) oder länger eingestellt werden! Das Board sendet direkt nach dem Upload einen JOIN-Request aus. Ist ein LoRaWAN Gateway in Reichweite, kommt es zu einem JOIN-Success:

    Der Verbindungsaufbau war erfolgreich. Ab sofort sendet das Board regelmäßig im zuvor eingestellten Intervall die encodierten Daten an das LoRaWAN-Netzwerk.

    Decoder einbinden

    Der Application-Server benötigt für die eintreffenden Bytes eine Information, wie er diese wieder zusammensetzen kann. Diese Information hat der Decoder. Der Decoder arbeitet in der Regel immer umgekehrt zum Encoder. Multipliziert der Encoder Werte oder verschiebt Bytes nach rechts, so dividiert der Encoder Werte oder verschiebt Bytes wieder nach links. Der Decoder kann in der TTN-Console an zwei Stellen eingesetzt werden:

    • Beim Endgerät:
      Der Decoder kann beim Endgerät unter dem Menüpunkt "Payload formatters"->"Uplink" eingefügt werden. Diese Option ist sinnvoll, wenn verschiedene Geräte einer Application zugeordnet sind.
    • In der Application:
      Der Decoder kann auch in der Application selbst unter dem Menüpunkt "Payload formatters"->"Uplink" eingefügt werden. Diese Option ist dann sinnvoll, wenn der Application mehrere gleiche Endgeräte zugewiesen sind. Beim Endgerät muss dann die Option "Use application payload formatter" ausgewählt werden.

    Folgender Payload-Decoder wandelt die im Beispielcode encodierten Werte wieder in ihre ursprünglichen Werte um:

    function decodeUplink(input) {
      
        var temp = input.bytes[0] << 8 | input.bytes[1];
        var hum = input.bytes[2] << 8 | input.bytes[3];
      
        return {
          data: {
            temperature: temp/100,
            humidity: hum/10
          }
        };
    

    Im Anschluss zeigt TTN die Daten vom Endgerät decodiert an:


    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:

    Heltec LoRa32 LoRaWAN Tutorial

    LoRaWAN mit dem Heltec LoRa32 V3

    • Video

    Einstieg in das LoRaWAN (TTN) mit dem Heltec LoRa32 V3 und Einrichtung vom Board in der Arduino IDE

    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