Raspberry Pi Pico: Daten an das TTN-LoRaWAN mit LoRa-Modul RAK3272S senden
LoRa (Long Range) in ist ein offener Funkstandard für ein Low Power Wide Area Network (LPWAN) zur Übertragung kleiner Datenmengen und mit hoher Reichweite. Ein Funknetzwerk mit LoRA nennt man dann LoRaWAN.
Um ein LoRaWAN nutzen zu können benötigt man ein LoRa-Modul zum Senden und Empfangen, das zum Beispiel mit dem Raspberry Pi Pico gesteuert wird.
Um ein LoRaWAN nutzen zu können benötigt man ein LoRa-Modul zum Senden und Empfangen, das zum Beispiel mit dem Raspberry Pi Pico gesteuert wird.
Das RAK3272S Breakout Board von RAK Wireless ist ein LoRa-Modul. Das Board kann auf ein Steckbrett gesteckt und mit nur 4 Verbindungskabeln mit dem Pico verbunden werden.
Mit dem Raspberry Pi Pico wollen wir das LoRa-Modul RAK3272S über die UART-Schnittstelle mit AT-Kommandos steuern, um Daten an das LoRaWAN von The Things Network (TTN) zu senden.
The Things Network (TTN) kann nach einer Registrierung kostenlos genutzt werden. Wenn Du noch keine Erfahrung mit LoRa und TTN hast, empfiehlt es sich, Dich über LoRa und TTN zu informieren.
Wenn Du noch keine Erfahrung mit dem RAK3272S Breakout Board hast, empfiehlt sich, zuerst die UART-Verbindung mit dem Pico zu testen.
- Mehr Informationen über das RAK3272S Breakout Board
- Raspberry Pi Pico: RAK3272S Breakout Board verbinden und testen
Aufbau und Bauteile
Für die Verbindung vom Raspberry Pi Pico zum RAK3272S Breakout Board werden nur 4 Leitungen benötigt. Zwei Leitungen für die Stromversorgung und zwei weitere für die UART-Schnittstelle.
Hinweis: Die Belegung des 3V3-Pins auf dem RAK3272S Breakout Board unterscheidet sich zwischen der Hardware-Version B und C. Der hier dargestellt Aufbau ist für die Hardware-Version C. Die Hardware-Version ist auf der Platine aufgedruckt.
Raspberry Pi Pico | RAK3272S | |
---|---|---|
3V3 | Pin 36 | 3V3 |
GND | Pin 33 | GND |
GPIO0 UART0 TX | Pin 1 | UART2_RX |
GPIO1 UART0 RX | Pin 2 | UART2_TX |
Voraussetzungen für die TTN-Nutzung
Die sinnvolle Nutzung des folgenden Aufbaus und Programmcodes setzt voraus, dass man sich in der Nähe eines TTN-Gateways befindet, dass man einen TTN-Account hat, sowie das RAK3272S Breakout Board als Endgerät in diesem TTN-Account registriert ist.
Bei der Registrierung des RAK3272S-Moduls sind Geräte-spezifische Angaben zu machen. Bei einigen Angaben ist es sinnvoll diese generieren zu lassen.
Aktivierungsmethode | OTAA (empfohlen) | ABP |
---|---|---|
Frequenzbereich | EU868 / SF9 | |
LoRaWAN-Version | 1.0.3 / RP001 Regional Parameters 1.0.3 revision A | |
Endgeräte-Klasse | A | |
JoinEUI | 0000000000000000 | |
DevEUI | Ist auf dem LoRa-Modul aufgedruckt. | |
AppEUI | 0000000000000000 | |
AppKey | Generieren lassen. | |
Device address | Generieren lassen. | |
AppSKey | Generieren lassen. | |
NwkSKey | Generieren lassen. |
Einige dieser Angaben werden später im Programmcode verwendet. In der Regel lassen sich diese bei Bedarf aus der TTN-Verwaltungsoberfläche ablesen oder herauskopieren.
Programmcode für das OTAA-Verfahren (bis RAK3272S-Firmware-Version 1.0.4)
Der folgende Programmcode dient dazu, über eine UART-Verbindung das RAK3272S Breakout Board zu steuern. Die Steuerung besteht darin, das RAK3272S Breakout Board für das LoRaWAN des The Things Network (TTN) zu konfigurieren. Für das OTAA-Verfahren müssen folgende Parameter aus der TTN-Console ermittelt werden:
- Device EUI (DEVEUI)
- Application EUI (APPEUI)
- Application Key (APPKEY)
Für das Senden der AT-Kommandos und Empfangen der Rückmeldung dient eine Funktion. Im Programm wird die Rückmeldung direkt auf der Kommandozeile ausgegeben.
Im folgenden Programmcode wird zuerst das LoRa-Modul konfiguriert. Diese Konfiguration wird automatisch gespeichert und bleibt beim Verlust der Stromversorgung erhalten. Sie muss also nur einmal ausgeführt werden, sofern alle Konfigurationsparameter korrekt sind.
Zum Senden von Daten sind das Join-AT- und das Send-AT-Kommando auszuführen. Der zu sendende Payload (Daten) ist die hexadezimale Darstellung. Hier wird beispielhaft die Zeichenfolge „0123456789ABCDEF“ verwendet.
# Bibliotheken laden from machine import UART import time # LoRaWAN/TTN-Konfiguration für OTAA DEVEUI = 'xxxxxxxxxxxxxxxx' APPEUI = '0000000000000000' APPKEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # Daten in hexadezimaler Schreibweise payload = '0123456789ABCDEF' # Initialisierung: UART # UART 0, TX=GPIO0 (Pin 1), RX=GPIO1 (Pin 2) # UART 1, TX=GPIO4 (Pin 6), RX=GPIO5 (Pin 7) uart = UART(0, 9600, rxbuf=2048) # Funktion: AT-Kommando senden und Rückmeldung empfangen def sendCmdAT (at_cmd, wait=1): char = '' dataString = '' uart.write(at_cmd + '\r\n') time.sleep(wait) # Warten nach dem Senden des AT-Kommandos while char is not None: char = uart.read(1) try: dataString += char.decode() except: pass if dataString == '': return 'Keine Rückmeldung. Bitte TX und RX prüfen.' return dataString ### ### Konfiguration: TTN mit OTAA für RAK3272S ### print('Typ: LoRaWAN') print(sendCmdAT('AT+NWM=1')) print('Endgeräte-Klasse: A') print(sendCmdAT('AT+CLASS=A')) print('Sendebestätigung: Ja') print(sendCmdAT('AT+CFM=1')) print('Aktivierung: OTAA') print(sendCmdAT('AT+NJM=1')) print('Region/Frequenzbereich: EU868') print(sendCmdAT('AT+BAND=4')) print('Device EUI (DEVEUI)') print(sendCmdAT('AT+DEVEUI=' + DEVEUI)) print('Application EUI (APPEUI)') print(sendCmdAT('AT+APPEUI=' + APPEUI)) print('Application Key (APPKEY)') print(sendCmdAT('AT+APPKEY=' + APPKEY)) ### ### Daten senden: JOIN + SEND ### print('Test: AT') print(sendCmdAT('AT')) print('OTAA: TTN beitreten (Join)') print(sendCmdAT('AT+JOIN=1:0:10:8', 10)) print('Daten senden') print(sendCmdAT('AT+SEND=2:' + payload, 10))
Ob der Beitritt (Join) und das Senden der Daten erfolgreich waren, kann man in der Kommandozeile und in der TTN-Console unter Live Data prüfen.
OTAA-Join prüfen
Nach etwa 5 bis 6 Sekunden ist der Beitritt (Join) des LoRa-Endgeräts an einem LoRa-Gateway erfolgreich abgeschlossen. Das Ergebnis auf der Kommandozeile sollte „+EVT:JOINED“ sein. In der TTN-Console wird ein erfolgreicher Beitritt verzeichnet (Live Data). Ein NICHT erfolgreicher Betritt erscheint dort ebenfalls.
Sollte der Beitritt fehlschlagen, dann sind folgende Punkte zu prüfen:
- Wenn in der TTN-Console kein Join-Versuch verzeichnet ist, dann muss geprüft werden, ob sich ein TTN-Gateway in Reichweite zum LoRa-Endgerät befindet.
- Desweiteren ist ein Betritt nur dann erfolgreich, wenn die OTAA-Parameter (DEVEUI, APPEUI, and APPKEY) korrekt sind.
Datenempfang prüfen
Nach dem Join-AT-Kommando werden die Daten gesendet. Der erfolgreiche Versand wird mit „+EVT:SEND CONFIRMED OK“ bestätigt.
Den Datenempfang kann man auch in der TTN-Console prüfen (Live Data).
Programmcode für das ABP-Verfahren (bis RAK3272S-Firmware-Version 1.0.4)
Der folgende Programmcode dient dazu, über eine UART-Verbindung das RAK3272S Breakout Board zu steuern. Die Steuerung besteht darin, das RAK3272S Breakout Board für das LoRaWAN des The Things Network (TTN) zu konfigurieren. Für das ABP-Verfahren müssen folgende Parameter aus der TTN-Console ermittelt werden:
- Device Address (DEVADDR)
- Application Session Key (APPSKEY)
- Network Session Key (NWKSKEY)
Für das Senden der AT-Kommandos über die UART-Schnittstelle und Empfangen der Rückmeldung vom LoRa-Modul dient eine Funktion. Im Programm wird die Rückmeldung direkt auf der Kommandozeile ausgegeben.
Im folgenden Programmcode wird zuerst das LoRa-Modul konfiguriert. Die Konfiguration wird automatisch gespeichert und muss nur einmal ausgeführt werden, sofern alle Konfigurationsparameter korrekt sind.
Zum Senden von Daten sind das Join-AT- und das Send-AT-Kommando auszuführen. Der zu sendende Payload (Daten) müssen hexadezimal sein.
# Bibliotheken laden from machine import UART import time # LoRaWAN/TTN-Konfiguration für ABP DEVADDR = 'xxxxxxxx' NWKSKEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' APPSKEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # Daten in hexadezimaler Schreibweise payload = '0123456789ABCDEF' # Initialisierung: UART # UART 0, TX=GPIO0 (Pin 1), RX=GPIO1 (Pin 2) # UART 1, TX=GPIO4 (Pin 6), RX=GPIO5 (Pin 7) uart = UART(0, 9600, rxbuf=2048) # Funktion: AT-Kommando senden und Rückmeldung empfangen def sendCmdAT (at_cmd, wait=1): char = '' dataString = '' uart.write(at_cmd + '\r\n') time.sleep(wait) # Warten nach dem Senden des AT-Kommandos while char is not None: char = uart.read(1) try: dataString += char.decode() except: pass if dataString == '': return 'Keine Rückmeldung. Bitte TX und RX prüfen.' return dataString ### ### Konfiguration: TTN mit ABP für RAK3272S ### print('Typ: LoRaWAN') print(sendCmdAT('AT+NWM=1')) print('Endgeräte-Klasse: A') print(sendCmdAT('AT+CLASS=A')) print('Sendebestätigung: Ja') print(sendCmdAT('AT+CFM=1')) print('Aktivierung: ABP') print(sendCmdAT('AT+NJM=0')) print('Region/Frequenzbereich: EU868') print(sendCmdAT('AT+BAND=4')) print('Device Address (DEVADDR)') print(sendCmdAT('AT+DEVADDR=' + DEVADDR)) print('Network Session Key (NWKSKEY)') print(sendCmdAT('AT+NWKSKEY=' + NWKSKEY)) print('Application Key (APPSKEY)') print(sendCmdAT('AT+APPSKEY=' + APPSKEY)) ### ### Daten senden: SEND ### print('Test: AT') print(sendCmdAT('AT')) print('ABP: TTN beitreten (Join)') print(sendCmdAT('AT+JOIN=1:0:10:8', 10)) print('Daten senden') print(sendCmdAT('AT+SEND=2:' + paypload, 10))
Ob das Senden der Daten erfolgreich war, kann man in der Kommandozeile und in der TTN-Console unter Live Data prüfen.
ABP-Join und Datenempfang prüfen
Die Daten werden über ein TTN-Gateway an einen TTN-Server gesendet. In der TTN-Console kann man prüfen, ob die Daten dort eingegangen sind (Live Data).
Weitere verwandte Themen:
- Raspberry Pi Pico: LoRa, LoRaWAN und The Things Netzwork (TTN)
- Raspberry Pi Pico: LoRa-Funkmodule
- Raspberry Pi Pico: RAK4200 Breakout Board verbinden und testen
- Raspberry Pi Pico: Daten an das TTN-LoRaWAN mit LoRa-Modul RAK4200 senden
- Raspberry Pi Pico: Smart Home (Ideen und Projekte)
Teilen:
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)