Die analoge Wetterstation SEN-15901 soll mithilfe eines Arduino Uno Daten über LoRa versenden und im The Things Network (TTN) ausgewertet werden.
Die Anwendung entstand im Rahmen des Projektseminars 2021/22 bei Prof. Dr. Jörg Vogt an der HTW-Dresden.
Für eine Erklärung und einen genauen Aufbau betrachten Sie bitte die Dokumentation.
Das Repository ist folgendermaßen aufgebaut:
LoRaWAN-Wetterstation-SEN-15901
├── docs
│ ├── documentation.pdf Projektdokumentation
│ ├── documentation.tex Projektdokumentation LaTeX-Quelldatei
│ ├── img enthält Bilder für die Dokumentation
│ │ └── *
│ ├── links.md Linksammlung (Wetterstation, Arduino)
│ └── schaltplan.fzz Fritzing Schaltplan der Anwendung
├── README.md
└── src
├── local_weather_station Implementation ohne LoRa
│ └── local_weather_station.ino
└── lora_weather_station Implementation mit LoRa
├── config.h Konfigurationsdatei für den Nutzer
├── lora_weather_station.ino Hauptprogramm für Arduino
├── payload_formatter.js Uplink Payload Formatter für TTN
├── secret.template.h Template für Secrets
├── ttn_send.cpp LoRa Sendefunktionalität
└── ttn_send.h
Um die Anwendung zu nutzen, wird folgende Hardware benötigt:
- Wetterstation SEN-15901
- Arduino Uno
- Dragino LoRa Shield 1.4 für Arduino
- LoRa-Gateway (sofern nicht in Reichweite)
- 2x RJ11 Einbaubuchsen
- 1x Widerstand (10 kOhm)
- Breadboard, Jumper-Kabel
Außerdem muss ein TTN-Account angelegt werden.
-
Arduino IDE herunterladen (https://www.arduino.cc/en/software)
-
Installationsanleitung folgen: https://ubuntu.com/tutorials/install-the-arduino-ide#2-installing-via-a-tarball
-
Arduino Uno anschließen
-
Arduino IDE starten mit
sudo arduino
-
Unter
Werkzeuge->Board
"Arduino Uno" wählen -
Unter
Werkzeuge->Port
"/dev/ttyUSB0" wählen -
Um die Funktionalität zu testen, kann ein Testskript ausgeführt werden:
- Dazu in der Arduino IDE
Datei->Beispiele->01 Basics->Blink
wählen, dann "Hochladen" drücken. - Die "L" LED (PIN 13) des Arduino Uno sollte aufblinken.
- Dazu in der Arduino IDE
-
Bibliothek
Arduino-LMIC
als ZIP herunterladen (https://github.com/dragino/arduino-lmic) -
Arduino IDE starten
-
Unter
Sketch->Bibliothek einbinden->.ZIP-Bibliothek hinzufügen
die heruntergeladene ZIP hinzufügen -
Die Frequenz in der LMIC-Library anpassen (siehe https://github.com/dragino/arduino-lmic#configuration)
- Die benötigte Datei befindet sich unter
home/Arduino/libraries/arduino-lmic-master/src/lmic/config.h
- Hier muss die Region gegebenenfalls angepasst werden.
- Die benötigte Datei befindet sich unter
-
vsciot-vscode.vscode-arduino
Microsoft Extension installieren -
In den VSCode Einstellungen folgende Zeilen hinzufügen (Pfad zum Arduino Binary Verzeichnis ggf. ändern):
"arduino.path": "/usr/local/bin/arduino/arduino-1.8.16",
"arduino.logLevel": "info",
"arduino.enableUSBDetection": true,
"C_Cpp.intelliSenseEngine": "Tag Parser"
"arduino.defaultBaudRate": 9600
- Im Terminal die Berechtigung für den USB Port
/dev/ttyUSB0
aktivieren:
sudo chmod a+rw /dev/ttyUSB0
-
VSCode neustarten
-
eine
lora_weather_station.ino
Datei öffnen, um Arduino Optionen einsehen zu können -
Arduino Uno anschließen
-
In der Taskleiste folgende Optionen einstellen:
- das Board auf
Arduino Uno
- Programmer auf
avrispmkii
- Port auf
/dev/ttyUSB0
- das Board auf
- Der Serielle Monitor ist dort ebenfalls für Debugging verfügbar
- LaTeX-Pakete installieren:
sudo apt install texlive texlive-lang-german texlive-latex-extra latexmk
-
VSCode Extension
james-yu.latex-workshop
installieren -
Gegebenenfalls VSCode neustarten
- Add application
- Add end device
- Manually
- Frequency Plan: Europe 863-870 MHz (SF9 for RX2 - recommended)
- LoRaWan version: MAC V1.0.2
- Regional Parameters version: PHY V1.0.2 REV A
- DeEUI, AppEUI, AppKey generieren und in Code einfügen (lsb beachten)
- Register end device
- Add application
- Add end device
- Manually
- Frequency Plan: Europe 863-870 MHz (SF9 for RX2 - recommended)
- LoRaWan version: MAC V1.0.2
- Regional Parameters version: PHY V1.0.2 REV A
- Show advanced activation !
- Activation mode: Activation by personalization (ABP)
- Device address, AppSKey, NwkSKey generieren und in Code einfügen
- Register end device
- Frame Counter deaktivieren
- In den General settings Tab wechseln
- unter Network Layer -> Expand
- unten Advanced MAC settings
- das Häkchen in Resets frame counters setzen
- In den General settings Tab wechseln
- unter Network Layer -> Expand
- unten Advanced MAC settings
- das Häkchen in Use adaptive data rate (ADR) entfernen
Für eine Beispielkonfiguration betrachten Sie bitte das Beispiel und die Erklärungen in config.h
- TTN End Device erstellen (entweder OTAA oder ABP)
- siehe Dokumentation
- Repository in VSCode öffnen
- Die Datei
secret.template.h
mit den entsprechenden Secrets füllen - Die Datei
secret.template.h
umbenennen insecret.h
- Die Konfigurationsdatei
config.h
anpassen- Beispiel siehe
config.h
- Beispiel siehe
- Arduino Uno anschließen
- Berechtigung für den USB Port aktivieren:
sudo chmod a+rw /dev/ttyUSB0
- Die Datei
lora_weather_station.ino
öffnen - Die Anwendung auf den Arduino Uno schreiben
- Zum TTN End Device wechseln und auf Pakete warten
Der Payload Formatter in payload_formatter.js muss ins TTN eingepflegt werden und gibt JSON-Objekte nach folgendem Schema aus:
"decoded_payload": {
"0": {
"max_wind_speed": "0.00 km/h",
"rain_amount": "0.0000 mm",
"wind_direction": "N",
"wind_speed": "0.00 km/h"
},
"1": {...},
}
- Bilder in Aktion hinzufügen
- Dokumentation auf Englisch übersetzen
- Prüfen warum bei ABP nicht alle Frequenzen funktionieren