LoRaWAN UDP Packet Forwarder 1
17.12.2024
Elektronik | Funk | Software
Der Technik-Blog
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).
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.
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.
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.
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
Zunächst muss das Board in der Arduino IDE eingerichtet werden. Dazu wird der Boards Manager geöffnet:
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.
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
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:
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:
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:
Im Beispielcode werden die drei Schlüssel aus der Console eingebunden. Dies könnte wie folgt aussehen:
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:
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;
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.
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:
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:
Einstieg in das LoRaWAN (TTN) mit dem Heltec LoRa32 V3 und Einrichtung vom Board in der Arduino IDE
WeiterlesenStarthilfe LoRaWAN - Diese Seite richtet sich an alle Einsteiger, die mit LoRaWAN starten wollen und ihre Sensoren in das IoT-Netzwerkt TTN integrieren wollen
WeiterlesenAEQ-WEB © 2015-2024 All Right Reserved