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.

Aufbau und Bauteile

Raspberry Pi Pico: RAK4200 Breakout Board verbinden und testen

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:

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