Raspberry Pi Pico: P2P-LoRa mit RAK3272S Breakout Board
Die Funktechnik LoRa kann man im Rahmen eines LoRaWANs nutzen. Neben LoRa-Gateways braucht man weitere Infrastruktur für die Kommunikation zwischen LoRa-Endgeräten und Anwendungen.
Wenn es nur darum geht, dass zwei Geräte direkt miteinander kommunizieren sollen, dann kann man die LoRa-Funktechnik auch im P2P-Modus betreiben.
Im folgenden Aufbau wird **ein** Raspberry Pi Pico zur Steuerung von **zwei** LoRa-Modulen vom Typ RAK3272S Breakout Board verwendet. Der dazugehörige Programmcode steuert zwei RAK3272S-Module jeweils einen als Sender und einen als Empfänger für eine P2P-LoRa-Verbindung.
Wenn Du noch keine Erfahrung mit LoRa und dem LoRa-Modul RAK3272S Breakout Board hast, empfiehlt es sich zuerst mit den Grundlagen zu beschäftigen.
- Mehr Informationen über LoRa und LoRaWAN
- Mehr Informationen zum 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 |
Programmcode
Der folgende Programmcode dient dazu, in einem Test-Aufbau mit einem Raspberry Pi Pico zwischen zwei RAK3272S Breakout Boards eine P2P-LoRa-Verbindung herzustellen. Die beiden RAK3272S Breakout Boards werden jeweils über eine eigene UART-Verbindung konfiguriert und gesteuert. Die Steuerung besteht darin, die RAK3272S Breakout Boards für eine P2P-LoRa-Verbindung und jeweils eines als Sender und das andere als Empfänger zu konfigurieren.
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 werden zuerst die LoRa-Module 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 und gleich bleiben.
Nach der Konfiguration werden die Daten vom einen LoRa-Modul gesendet und vom anderen empfangen und auf der Kommandozeile ausgegeben. Der zu sendende Payload (Daten) ist die hexadezimale Darstellung. Hier wird beispielhaft die Zeichenfolge „0123456789ABCDEF“ verwendet.
# Bibliotheken laden from machine import UART import time # 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) uart0 = UART(0, 9600, rxbuf=2048) # Empfänger uart1 = UART(1, 9600, rxbuf=2048) # Sender # Funktion: AT-Kommando senden und Rückmeldung empfangen def sendCmdAT (uart, 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: LoRa-P2P-Mode für RAK3272S (Empfang) ### print('Konfiguration: Empfänger (Receiver)') print() print('LoRa-P2P-Mode') print(sendCmdAT(uart0, 'AT+NWM=0', 2)) print(sendCmdAT(uart0, 'ATE')) print('LoRa-P2P-Parameter') print(sendCmdAT(uart0, 'AT+P2P=868000000:7:125:0:10:14')) print('Empfangsmodus') print(sendCmdAT(uart0, 'AT+PRECV=0')) print(sendCmdAT(uart0, 'AT+PRECV=65534')) print('Konfiguration für Empfangen abgeschlossen') print() ### ### Konfiguration: LoRa-P2P-Mode für RAK3272S (Senden) ### print('Konfiguration: Sender (Transmitter)') print() print('LoRa-P2P-Mode') print(sendCmdAT(uart1, 'AT+NWM=0', 2)) print(sendCmdAT(uart1, 'ATE')) print('LoRa-P2P-Parameter') print(sendCmdAT(uart1, 'AT+P2P=868000000:7:125:0:10:14')) print('Konfiguration für Senden abgeschlossen') print() ### ### Daten senden ### print('Senden per LoRa-P2P-Mode') print(sendCmdAT(uart1, 'AT+PSEND=' + payload)) ### ### Daten empfangen und ausgeben ### print('Empfangsbereit') print() while True: time.sleep(2) rxData = uart0.readline() if rxData is not None: print('Daten empfangen:', rxData.decode('utf-8'))
Der Empfang der Daten erfolgt zweistufig. Zuerst werden die Informationen zum Datenempfang auf der UART-Schnittstelle ausgegeben:
+EVT:RXP2P, RSSI -1, SNR 13
Erst im zweiten Schritt erfolgt die Datenausgabe:
+EVT:0123456789ABCDEF
Hinweise zur P2P-LoRa-Konfiguration
P2P-Empfangsmodus: AT+PRECV
Mit dem AT-Kommando „AT+PRECV“ wird das LoRa-Modul empfangsbereit geschaltet.
- Als Parameter muss ein Timeout von 1 bis 65533 Millisekunden (ms) angegeben werden (1000 Millisekunden gleich 1 Sekunde). Nach Ablauf des Timeouts wird die Empfangsbreitschaft abgeschaltet.
- Ein Wert von 65534 belässt die Empfangsbereitschaft dauerhaft.
- Ein Wert von 0 schaltet die Empfangsbereitschaft ab und schaltet das LoRa-Modul in den Sendemodus.
P2P-Parameter: AT+P2P=868000000:7:125:0:10:14
- Frequenz (Hz): 868000000
- Spreizfaktor: 7
- Bandbreite (kHz): 125
- Kodierrate (4/5): 0
- Präambel-Länge: 10
- Sendeleistung (dBm): 14
Hinweis: Die hier verwendete Werte sind Default-Werte.
Dokumentation zur P2P-LoRa-Konfiguration
Lust auf mehr?
Der hier dargestellte Aufbau und Programmcode sieht vor, dass der Raspberry Pi Pico zwei LoRa-Module steuert. Es handelt sich also nur um einen Test-Aufbau für eine P2P-LoRa-Verbindung. Ein anwendungsorientierter Aufbau erfordert zwei unabhängig voneinander gesteuerte LoRa-Module.
Weitere verwandte Themen:
- Raspberry Pi Pico: P2P-Kommunikation mit LoRa
- Raspberry Pi Pico: LoRa-P2P mit RAK4200 Breakout Board
- Raspberry Pi Pico: LoRa, LoRaWAN und The Things Netzwork (TTN)
- Raspberry Pi Pico: LoRa-Funkmodule
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)