preloader

Auf AEQ-WEB Suchen

AEQ-WEB | Blog

Selbstbau ESP32 LoRa WiFi Gateway

Selbstbau LoRa Gateway

LoRa ist eine sehr gute Funklösung für IoT Geräte. Neben bekannten Cloud-Lösungen wie von TTN (The Things Network) gibt es aber auch sehr viele kleine oft nur regionale LoRa-Netzwerke. Die Hauptfunktion eines Gateways ist die Weitergabe von empfangen LoRa Datenpaketen an einen Server oder Cloud. In diesem Artikel geht es um den Bau eines kleinen LoRa Gateways mit einem ESP32 LoRa Board, das in der Lage ist, die Daten an einem Webserver über HTTPS POST weiterzugeben.

Wie das Gateway funktioniert

Das IoT-Gerät (Wetterstation, GPS-Tracker, Datenlogger...) sammelt Sensordaten und sendet diese über Funk (LoRa) aus. Werden diese Daten von einem oder mehreren Gateways empfangen, so werden diese Daten zuerst im Gateway gepuffert. Anschließend wird der empfangene Datensatz unverändert an einem im Gateway hinterlegten Webserver über HTTPS mittels POST oder GET Request gesendet. Zusätzlich zum empfangenen Datensatz fügt das Gateway seine eigene ID und die Empfangssignalstärke hinzu. Am Server werden die Daten anschließend verarbeitet und in einer Datenbank oder Datei gespeichert.

LoRa IoT Gateway Overview

Warum ein ESP32 Board

Der ESP32 mit integriertem LoRa ist eine sehr günstige LoRa Gateway Lösung. Für gerade mal 20 Euro bekommt man ein Board mit den bekannten SX1276 LoRa-Chip, WiFi und einem integrierten OLED-Display. Auf dem Display kann man sich den Verbindungsstatus oder auch die LoRa Pakete anzeigen lassen.

Das Datenpaket vom IoT Gerät

Das versendete Datenpaket vom IoT Gerät enthält neben den zu übertragenen Daten auch eine eindeutige ID, die noch vor den Nutzdaten mit gesendet wird. Diese eindeutige ID benötigt der Server, um das Datenpaket entsprechend dem IoT Gerät zuordnen zu können. Die ID und die einzelnen zu übertragenden Werte werden anschließend mit einer Zeichenkette ausgesendet. Zwischen jeden einzelnen Wert befindet sich ein Semikolon bzw. Strichpunkt, der die einzelnen Daten abgrenzt. Das Gateway wandelt diese Zeichenkette in einem String um und gibt diesen entsprechend an den Server weiter. Erst am Server werden die Daten durch das Semikolon getrennt und entsprechend eingeordnet.

LoRa IoT RAW Data Packet

HTTPS und Sicherheitsinformation

HTTPS ist mittlerweile weltweit auf fast jedem Server Standard. Viele Webhosting Provider und Server akzeptieren gar keine normalen HTTP Verbindungen mehr, weshalb aus kompatibilitätsgründen auch dieses Gateway ausschließlich über HTTPS arbeitet. Achtung: HTTPS ist nur mit gültigen und vom Client überprüften Zertifikaten sicher! Das LoRa Gateway überprüft keine SSL-Zertifikate, was bedeutet, dass die Daten auch an einen Server mit gefälschten oder abgelaufenen Zertifikat gesendet werden. Da es sich bei Sensordaten in der Regel um keine vertraulichen oder persönlichen Daten handelt, kann dies vernachlässigt werden.
LoRa bietet ebenfalls eine Verschlüsselung an, die aber in diesem Beispiel aufgrund der Einfachheit nicht verwendet wird.

Wie die Software funktioniert

Im Setup stellt der ESP32 eine Verbindung zum eingestellten WiFi Netzwerk her und verbindet sich über SPI mit dem LoRa-IC. Am OLED-LCD und im Serial Monitor werden dazu entsprechende Details ausgegeben. In der Hauptschleife befinden sich mehrere Timer und die ständige Empfangsbereitschaft für LoRa-Datenpakete. Wird ein Datenpaket empfangen, so geht das Programm in eine Schleife über, wo die empfangen Zeichen zu einem String zusammengefasst werden. Außerdem wird während dessen die Signalstärke vom empfangenen Gerät ermittelt. Wurde der gesamte Datensatz empfangen, so wird anschließend eine weitere Funktion aufgerufen, welche die empfangenen Daten an den eingestellten Webserver weiterleitet. Wurden die Daten erfolgreich an den Server übertragen oder das Timeout wurde überschritten, wechselt das Programm wieder in den Empfangsmodus.

Die Basiskonfiguration

Am Anfang der Software befindet sich nach den Bibliotheken die Basiskonfiguration für das Netzwerk und die Hardware. Die gelb markierten Bereiche (1) sind Pin-Konfigurationen für das LoRa Modul und das OLED -Display. Im "void setup()" werden noch SPI-Pins definiert, die für LoRa notwendig sind. Hinweis: Diese Pins sind für das Heltec ESP32 LoRa Board definiert und sind auf anderen Boards anzupassen. Der blau markierte Bereich ist die Basiskonfiguration für das Netzwerk. Dazu zählen Netzwerkname und Passwort von WiFi-Netzwerk sowie die Domain vom Webserver an dem die Pakete gesendet werden sollen. In der letzten Zeile wird noch eine ID vom Gateway definiert, die beim PHP-Beispielcode frei definiert werden kann. Bei der AEQ-WEB IoT Cloud wird diese entsprechend vom Server vorgegeben und ist hier einzugeben.

ESP32 LoRa Gateway Basic Configuration

Timer in der Software

In der Software sind einige Timer (zeitgesteuerte regelmäßige Abläufe) vorhanden, die in bestimmten Intervallen Funktionen aufrufen. Dazu zählt unter anderem die automatische Aktualisierung vom OLED-Display, das senden von Beacons an den Server und die Überwachung der WiFi-Verbindung.

Die Timer im Detail:

-Timer OLED Update-
Über diesen Timer wird das integrierte OLED Display am Board aktualisiert. Der Timer ist so konfiguriert, dass die Funktion (display_status()) alle 5 Sekunden aufgerufen wird.

-Timer Send Beacon-
Dieser Timer ruft die Funktion (call_https()) mit einem Beacon Parameter auf. Dabei wird wie bei der Weiterleitung von einem LoRa-Packet, ein HTTP-Request durchgeführt. Hier werden jedoch keine Werte übertragen, sondern nur ein "Lebenszeichen (Beacon)" versendet. Dadurch erkennt der Server, dass das Gateway online ist. Der Timer ruft diese Funktion alle fünf Minuten auf.

-Timer Check Wifi-
Da es hin und wieder passieren kann, dass die WiFi Verbindung verloren geht oder es zu einem Fehler kommt muss die Verbindung unter umständen erneut aufgebaut werden. Um die Konnektivität zu überprüfen, wird hier die Funktion (check_wifi()) alle 10 Minuten aufgerufen.

-Timer Reboot ESP-
Um gegen eventuelle Zeitüberläufe oder Systemfehler vorzubeugen, die ein Hangup verursachen könnten, wird der ESP nach etwas mehr als 24 Stunden automatisch neu gestartet. Das Zeitintervall kann hier auch auf eine Woche oder ein Monat gestellt werden, dadurch würde die kurze Downtime von weinigen Sekunden jeden Tag entfallen.

Funktionen im Code

get_lora_data():
Über diese Funktion werden die einzelnen Zeichen, die über LoRa empfangen wurden in einen String zusammen gesetzt. Dieser String wird anschließend unverändert mit Zusatzinformationen vom Gateway an den Server gesendet.

call_https():
In dieser Funktion wird der HTTPS-Request durchgeführt. Beim Aufrufen der Funktion werden drei Parameter, wie der zu übertragende Datensatz, die Signalstärke und der Request-Typ an die Funktion übergeben. Anschließend werden hier die Informationen und der Header an die definierte Serveradresse mittels POST gesendet. Über den Serial-Monitor werden sämtliche Informationen wie etwa der Response vom Server ausgegeben.

display_status():
Mit dieser Funktion wird das OLED-Display aktualisiert und die einzelnen Zeilen und Parameter sowie deren Position generiert.

check_wifi():
In dieser Funktion wird die W-Lan Konnektivität überprüft. Sollte das WiFi-Netzwerk getrennt sein, so wird versucht, eine erneute Verbindung herzustellen. Nach 5 fehlgeschlagenen Verbindungsversuchen wird der ESP neu gestartet.

Benötigte Bibliotheken

Auch für dieses Projekt werden wieder einige Librarys benötigt. Die WiFiClientSecure und SPI Bibliothek sollten bereits standardmäßig im Arduino IDE vorhanden sein. Noch zu installieren sind über den Library-Manager folgende Bibliotheken:
Für LoRa: Sandeep Mistry LoRa | Version: 0.5.0
Für das Display: U8G2 OLED Display | Verision: 2.26.14

PHP Beispielcode & Webserver

Der PHP-Beispielcode ist sehr einfach aufgebaut. Wird das Programm "Gateway.php" aufgerufen, so wird der empfange POST-Datensatz mit einem Zeitstempel versehen und in eine einfache Textdatei gespeichert. Wichtig: Auf dem Server bzw. Webspace, wo die Dateien liegen, müssen Schreibrechte (0777) vorhanden sein. Über die Index-Datei wird die Textdatei aufgerufen und im Browser angezeigt. Der gesamte Beispielcode dient hauptsächlich als Testbeispiel. Durch entsprechende Weiterentwicklung können die Daten auch in eine MySQL-Datenbank gespeichert werden.

Debuging via Serial Monitor

Über den Serial Monitor werden sehr viele Informationen während des Programmablaufes ausgegeben. So sieht man, ob die WiFi-Verbindung funktioniert, der Webserver erreichbar ist und wann Daten via LoRa empfangen werden. Außerdem wird während der Datenübertragung zum Webserver auch die Ausgabe von PHP im Serial Monitor angezeigt. Nachfolgend ein Screenshot von der Serial-Monitor Ausgabe, wo ein Datenpaket via LoRa empfangen wurde und erfolgreich an den Server übermittelt wurde.

ESP32 LoRa Gateway Serial Monitor
LoRa Gateway ESP32
Download
LoRa Gateway PHP
Download

Share:
thumbnail
24.05.2018
Baofeng Tipps & Tricks

In diesem Artikel zeigen wir, wie das Baofeng eingestellt wird und was die einzelnen Parameter in den Einstellungen bedeuten sowie die Programmierung am PC

Alex @ AEQ-WEB
thumbnail
29.08.2018
Baofeng programmieren mit Chirp

In diesem Beitrag zeigen wir, wie das Baofeng UV5-R mit einem USB-Kabel und der Software Chirp programmiert wird.

Alex @ AEQ-WEB