|
|||
Bedienungsanleitung Hardware Zuerst werden die Sensoren gestartet, indem
man die Module an die Powerbanks anschließt und somit den ESP32 mit
5V Spannung versorgt. Am besten positioniert man die Sensoren schon
am Messort, allerdings ist das nicht zwingend notwendig. Danach wird
das Gateway gestartet, indem man die Powerbank an das Modul
anschließt. Hierbei ist es wichtig, dass dieses in der Nähe des
konfigurierten WiFi eingeschaltet wird. Wahlweise können die Module
auch an einem Computer per USB angeschlossen werden und damit der
Serialport des Gateway-Moduls über die Arduino IDE ausgelesen
werden, um das Senden/Empfangen der Daten und den Progammablauf zu
kontollieren. Über das verbundene Thingspeak-Konto können
dann die Daten eingesehen werden. Bei Thingspeak kann man sich mit
seinem Mathworks Account einloggen und muss dann die entsprechenden
Fields in der Oberfläche erstellen und anschließend den API Key im
Arduino Code des Gateways abändern.
Bedienungsanleitung Code:
Downloaden des Codes:
-
LoRa Gateway.zip
-
LoRa Sensor.zip
-
CFeinstaubsensor.zip
-
Ssensordata.zip
Downloaden der Abhängigkeiten:
-
Libhydrogen-master.zip
-
QueueList.zip
-
Arduino-LoRa-master.zip
-
Adafruit Sensor-master.zip
-
DHT Sensor-master.zip
-
Thingspeak-arduino-master.zip
-
SDS011-select-serial-master.zip
Struct Ssensordata: Ssensordata ist eine struct-Deklaration, das
für die zu speichernden Messdaten zuständig ist. Dieses struct
bildet auch den Grundstein für die verkettete Liste, die als Puffer
genutzt wird.
Klasse CFeinstaubsensor: Im Konstruktor wird die Sensor ID übergeben.
Die Funktion request_data() dient dazu, die Daten der Sensoren
anzufordern. Mit push_queue und pop_queue werden Daten an die
verkettete Liste angefügt oder herausgenommen. Im private-Bereich
befinden sich en invalid_response flag, eine Countervariable, die
Sensor ID, das Message-byte, ein struct-Ssensordata Objekt, der
Verschlüsselungskey und eine verkettete Liste aus den
struct-Ssensordata. Das flag invalid_response kennzeichnet invalide
Nachrichten, also Nachrichten, die beim Senden oder Verschlüsseln
Fehler vorweisen. Diese Daten werden nicht an die verkettete Liste
angehängt. Die Countervariable cntr zählt die Messagebytes mit. Im
struct en_data werden die zu verschlüsselnden Messwerte gespeichert.
void request_data: Am Anfang wird die Sensor ID über LoRa
ausgesendet. Danach wird in der Busy-loop gewartet und die Zeit
gemessen, bis die Nachricht ankommt. Sollte die Nachricht nicht
innerhalb von max_response_time ankommen, wird fortgeschritten und
invalid_response gesetzt, um das Programm nicht dauerhaft zu
blockieren. Falls die Nachricht ankam, wird sie nun ausgelesen und
im array ciphertext gespeichert und entschlüsselt. Falls die
Entschlüsselung nicht gelingt (return != 0), wird ebenfalls
invalid_response gesetzt. Wenn die Entschlüsselung funktioniert,
wird die entschlüsselte Nachricht aus dem array encrypted in das
struct-Objekt kopiert und an die verkettete Liste gehängt.
LoRa Gateway: Dies ist das Arduino-Programm für den ESP32,
der die Sensoren abfragen soll und anschließend über WLAN die Daten
auf Thingspeak veröffentlichen soll. Die Ausgabe des Serial Monitors sieht
üblicherweise aus, wie folgt: Requesting data… :
Daten werden angefragt
LoRa Sensor: Als Erstes sollte die, für diesen Sensor in
LoRa Gateway, vereinbarte Sensor ID als byte gesetzt werden. Auch in
LoRa Sensor wird ein struct-Objekt global deklariert, in welchem die
Daten zwischengespeichert werden. Die Ausgabe des Serial Monitors sieht
üblicherweise aus, wie folgt: h, t, pm10, pm25 updated:
Sensorwerte wurden ausgelesen
Der Aufbau wurde zwei Langzeittests
unterzogen. Zum einen wurde über ca. 10h Messungen durchgeführt. Der
Test verlief ohne Fehler. Zum anderen wurden in einem 2. Test über 4
Stunden Messwerte übertragen und ausgewertet, wie viele davon
fehlerfrei übertragen wurden. Dabei waren von 910 Nachrichten, 3
Stück invalide. Die Ausfallquote der Nachrichten lag somit bei
0,33%.
Problembehandlung: LoRa failed: Auf den Hochschulrechnern bekamen wir nach
dem flashen des ESP32 oftmals den Fehler, dass LoRa nicht mehr
starten wollte. Wir konnten nicht herausfinden, wieso das der Fall
ist. Sensor DHT22: Sendet ab und an nur „nan“. Dies liegt
unseres Erachtens am Steckbrettaufbau. Wenn man das Bauteil aus dem
Steckbrett herausnimmt und neu einsetzt, funktioniert er wieder.
Dokumentationen der abhängigen Libraries:
·
https://github.com/sandeepmistry/arduino-LoRa/blob/master/API.md
·
https://github.com/jedisct1/libhydrogen/wiki/Secret-key-encryption
·
https://playground.arduino.cc/Code/QueueList
·
https://github.com/sensebox/SDS011-select-serial |
Mit Unterstützung von Prof. J. Walter | Sommersemester 2018 |