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.

Aufbau und Bauteile

Raspberry Pi Pico: RAK3272S Breakout Board verbinden und testen

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. Hierbei ist zu beachten, dass es RAK3272S-Module gibt, deren UART2-Schnittstelle mit 9600 Bit/s und welche mit 115200 kBit/s arbeiten.
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
uart0 = UART(0, 115200, rxbuf=2048) # Empfänger
# uart1 = UART(1, 9600, rxbuf=2048) # Sender
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: 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:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

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

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

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.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren