Einfache Realisierung einer Funkstrecke LoRa ohne WAN

Sensorfunkstrecke mit Raspberry Pi

Die Kommunikation mit einem RN2483-Modul erfordert wie erläutert eine einfache UART-Schnittstelle, die von einem Notebook oder auch von einem Computerboard wie einem Raspberry Pi unter Zuhilfenahme eines USB-zu-TTL-Adapters zur Verfügung gestellt werden kann. Mit einem Notebook als Host und einem Rasp­berry Pi [4] als Sensorknoten ergibt sich eine flexible LoRa-Anwendung, mit der sich im Grunde genommen alle wesentlichen Aspekte dieser »weitreichenden« Funklösung erproben und erschließen lassen.

Auf dem Notebook arbeitet Tera Term mit einem Makro, welches sich nach der Modulinitialisierung in einer kontinuierlichen Empfangsschleife befindet und alle empfangenen Daten automatisch in einer Log-Datei mit Datum und Uhrzeit speichert. Die Grundlage des Makros ist in [3] veröffentlicht, für die Aufgabe hier wurde es entsprechend erweitert.
Mit »timeout = 0« wird zunächst festgelegt, dass auf einen Timeout nicht reagiert werden soll. In der Datei »setup_commands.txt« sind die drei folgenden Kommandos gespeichert, die zur Initialisierung ausgeführt werden:
sys reset
mac pause
radio set wdt 0

In der Schleife reception_loop wird das Modul mit »sendln radio rx 0« zum kontinuierlichen Empfang eingestellt und auf den Empfang einer Nachricht gewartet. Über »waitregx« pausiert das Makro solange bis entweder ein String »radio_rx« oder »radio_err« empfangen wird. Bei erfolgreichem Empfang wird »result« auf 1 gesetzt und die Schleife weiterhin ausgeführt, andernfalls wird das Modul neu gestartet. Das Empfangsmakro für das RN2483-Modul ist im Textkasten auf Seite MF 46 zu sehen.

Der Raspberry Pi wird in C als Sensorknoten programmiert. Dabei sind die Sensoren nicht am Raspberry Pi angeschlossen, sondern am RN2483-Modul, beispielsweise ein analoger Temperatursensor vom Typ »TMP36« von Analog Devices, womit sich eine flexible Lösung ergibt, die nicht vom steuernden Computer abhängt. Der TMP36 wird mit der 5-V-Spannung vom Delock-USB-Kabel betrieben und liefert eine zur Temperatur lineare Ausgangsspannung von 10 mV/K, sodass er direkt mit dem GPIO1-Pin des Moduls (Pin 36) verbunden werden kann. Für das Senden der Kommandos ist eine eigene Funktion sinnvoll, die als »writeACM« implementiert und im Messprogramm verwendet wird.
Bild 6 zeigt die wichtigen Codeabschnitte. Nach dem Setup wird der Sensorwert vom GPIO1-Pin gelesen und über »buf« in einen Temperaturwert umgerechnet, der daraufhin als »wert-int« über die LoRa-Funkstrecke versendet wird.
In der Praxis erweist sich die LoRa-Funkstrecke tatsächlich über Strecken von mehreren Kilometern als funktionsfähig und übertrifft damit Bluetooth und WLAN bei Weitem. In einem LoRaWAN kommen Gateways zum Einsatz, die an zentralen Punkten wie auf Gebäudedächern oder Funktürmen positioniert sind, was bei einer Point-to-Point-Funkstrecke nicht der Fall ist, sodass unterschiedlichen Höhen und Hindernissen besondere Beachtung zu schenken ist. Ideal ist natürlich das Funken über freie Strecken mit einer Sichtverbindung (»Line of Sight«).
Grundsätzlich ist die europäische Norm EN 300 220-2 v2.4.1 beim Betrieb des LoRa-Funks zu beachten. Sie verlangt, die Einhaltung der »Duty Cycle Limitations«. Im Frequenzbereich 863 MHz bis 870 MHz darf die maximale Sendeleistung 25 mW, also rund 14 dBm, nicht überschreiten, und das Tastverhältnis (Duty Cycle) darf innerhalb einer Stunde und pro Kanal 0,1 % nicht überschreiten. Dies ist deswegen von Bedeutung, da LoRa weder »Listen before Talk« (LBT) noch »Adaptive Frequency Agility« (AFA) unterstützt.(rh)

Empfangsmakro für RN2483-Modul

timeout = 0
EnterPath = ‚C:\Users\kd\Desktop\Tera Term Skripte\2. Empfangsknoten‘
;put the command file containing the list of commands in this path
setdir EnterPath
changedir EnterPath
;logfile will be created with below name and appended with current timestamp
gettime logfile »log-%Y%m%d-%H%M%S.txt«
;start logging
logopen logfile 0 0
;open commandfile
fileopen commandfile ‚setup_commands.txt‘ 0
;start loop
:loop2
filereadln commandfile statement
if result goto fclose2
sendln statement
waitregex ‚\r\n‘
pause 3
goto loop2
;close commandfile
:fclose2
fileclose commandfile
;start continuous reception
:reception_loop
pause 3
sendln ‚radio rx 0‘
;Warte auf Antwort vom Receiver
waitregex ‚radio_rx‘ ‚radio_err‘
if result = 1 then
goto reception_loop
elseif result = 2 then
goto loop2

else
goto reception_loop
endif
;stop logging
:end_programm
logclose
clearscreen 1
end

Referenzen

[1] LoRa Alliance, www.lora-alliance.org
[2] Sigfox, www.sigfox.com/de
[3] Ingenu, www.ingenu.com
[4] LoRa-Technologie von Microchip, goo.gl/R9Zxrl
[5] Makros mit Tera Term, http://teratermscript.blogspot.de/
[6] Command Reference User´s Guide, goo.gl/6SyNT4
[7] Klaus Dembowski, »Raspberry
Pi – Das technische Handbuch«, Springer-Verlag 2015, goo.gl/eqGFnQ