Raspberry Pi Pico: P2P-LoRa mit RAK4200 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 RAK4200 Breakout Board verwendet. Der dazugehörige Programmcode steuert beide RAK4200-Module jeweils als Sender und Empfänger für eine P2P-LoRa-Verbindung.
Wenn Du noch keine Erfahrung mit LoRa und dem LoRa-Modul RAK4200 Breakout Board hast, empfiehlt es sich zuerst mit den Grundlagen zu befassen.
- Mehr Informationen über LoRa und LoRaWAN
- Mehr Informationen über das RAK4200 Breakout Board
- Raspberry Pi Pico: RAK4200 Breakout Board verbinden und testen
Aufbau und Bauteile
Für die Verbindung vom Raspberry Pi Pico zum RAK4200 Breakout Board werden nur 4 Leitungen benötigt. Zwei Leitungen für die Stromversorgung und zwei weitere für die UART-Schnittstelle.
Raspberry Pi Pico | RAK4200 | |
---|---|---|
3V3 | Pin 36 | 3V3 |
GND | Pin 38 | GND |
GPIO0 UART0 TX | Pin 1 | RX2 (UART) |
GPIO1 UART0 RX | Pin 2 | TX2 (UART) |
Hinweis: In der Dokumentation des RAK4200 Breakout Boards wird empfohlen die RX2/TX2-Pins für die Verbindung zu einem Mikrocontroller zu verwenden.
Programmcode
Der folgende Programmcode dient dazu, in einem Test-Aufbau mit einem Raspberry Pi Pico zwischen zwei RAK4200 Breakout Boards eine P2P-LoRa-Verbindung herzustellen. Die RAK4200 Breakout Boards werden über jeweils eine eigene UART-Verbindung konfiguriert und gesteuert. Die Steuerung besteht darin, die RAK4200 Breakout Boards für die P2P-LoRa-Verbindung jeweils einen 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. Nach der Konfiguration wird das Modul neu gestartet und damit die Konfiguration gespeichert. Sie muss also nur einmal ausgeführt werden, sofern alle Konfigurationsparameter korrekt sind und unverändert bleiben.
Nach der Konfiguration werden die Daten vom einem 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 # Payload: 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, 115200, rxbuf=2048) # Empfänger uart1 = UART(1, 115200, 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: Empfänger für LoRa-P2P für RAK4200 ### print('Konfiguration: Empfänger') print() print('LoRa-P2P-Mode') print(sendCmdAT(uart0, 'at+set_config=lora:work_mode:1')) print('LoRa-P2P-Parameter') print(sendCmdAT(uart0, 'at+set_config=lorap2p:869525000:12:0:1:8:14')) print('Speichern und Neustarten') print(sendCmdAT(uart0, 'at+set_config=device:restart', 9)) print('Receiver-Mode') print(sendCmdAT(uart0, 'at+set_config=lorap2p:transfer_mode:1')) ### ### Konfiguration: Sender für LoRa-P2P für RAK4200 ### print('Konfiguration: Sender') print() print('LoRa-P2P-Mode') print(sendCmdAT(uart1, 'at+set_config=lora:work_mode:1')) print('LoRa-P2P-Parameter') print(sendCmdAT(uart1, 'at+set_config=lorap2p:869525000:12:0:1:8:14')) print('Speichern und Neustarten') print(sendCmdAT(uart1, 'at+set_config=device:restart', 9)) print('Sender-Mode') print(sendCmdAT(uart1, 'at+set_config=lorap2p:transfer_mode:2')) ### ### Daten senden ### print('Daten senden') print(sendCmdAT(uart1, 'at+send=lorap2p:' + payload)) ### ### Daten empfangen ### print('Empfangsbereit') print() while True: time.sleep(2) char = uart0.readline() if char is not None: print('Daten empfangen:', char.decode())
Die Datenausgabe auf der Kommandozeile lautet:
at+recv=9,7,8:0123456789ABCDEF
Diese Datenausgabe enthält vor den Daten (nach dem Doppelpunkt) durch Komma getrennt die Angaben RSSI, SNR und Datenlänge in Byte.
Hinweise zur P2P-LoRa-Konfiguration
P2P-Parameter: at+set_config=lorap2p:869525000:12:0:1:8:20
- Frequenz (Hz): 869525000
- Spreizfaktor: 12
- Bandbreite (125 kHz): 0
- Kodierrate (4/5): 1
- Präambel-Länge: 8
- Sendeleistung (dBm): 20
Hinweis: Die hier verwendeten 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 RAK3272S 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)