Serielle Kommunikation einrichten

In diesem Kapitel wird ein Computer mit einem LoRa-Sende- und Empfangsmodul verbunden und gesteuert. Als Computer wird ein Raspberry Pico verwendet, der mit MicroPython programmiert wird. Als LoRa-Modul wird das RAK3272S Breakout Board von RAK-Wireless verwendet. Die hier verwendete Hardware ist nicht zwingend notwendig, wird hier auf Grund der Verwendung von MicroPython und der einfachen Verfügbarkeit benutzt.

Voraussetzungen

Diese Dokumentation geht davon aus, dass Sie die folgende Hard- und Software zur Verfügung haben:

Hardware

Software

Sie haben die Möglichkeit, MicroPython-Code auf dem Raspberry Pico auszuführen. Dazu benötigen Sie:

oder:

UART-Kommunikation einrichten

UART (Universal Asynchronous Receiver/Transmitter) ist ein Protokoll zur seriellen Kommunikation. Es ermöglicht die Übertragung von Daten zwischen Geräten über eine serielle Schnittstelle. In diesem Abschnitt schauen Sie sich die UART-Schnittstelle Ihres Raspberry Pico an, und wie Sie diese nutzen können, um Daten über weite Strecken mit LoRa zu senden und zu empfangen.

Eine UART Schnittstelle besteht aus zwei Leitungen: TX (Transmit) und RX (Receive). Außerdem wird eine gemeinsame Masseleitung (GND) benötigt, um die Signale korrekt zu referenzieren.

UART auf dem Raspberry Pico

Der Raspberry Pico verfügt über zwei UART-Schnittstellen (UART0 und UART1), die Sie nutzen können. Im Folgenden verwenden Sie jedoch nur UART0, das standardmäßig auf den GPIO Pins 0 (TX) und 1 (RX) liegt.

Board-Layout eines Raspberry Pico mit WLAN. Quelle: [Offizielle Dokumentation Raspberry Pico](https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html#layout_wireless)
Board-Layout eines Raspberry Pico mit WLAN. Quelle: Offizielle Dokumentation Raspberry Pico

Verkabelung

Um die UART Kommunikation zwischen zwei Geräten einzurichten, verbinden Sie die TX-Leitung des sendenden Geräts mit der RX-Leitung des empfangenden Geräts. Testen Sie zunächst nur die UART0-Schnittstelle und lassen Sie den Pico mit sich selbst reden. Das ist ein sogenannter Loopback.

Verbinden Sie dazu den TX-Pin (GPIO 0) mit dem RX-Pin (GPIO 1). Das Verbinden der GND-Leitungen ist in diesem Fall nicht notwendig, da Sie nur den einen Pico verwenden.

Loopback-Schaltung auf dem Pico. Die serielle Schnittstelle spricht mit sich selbst. Schaltplan: Benjamin Blessing
Loopback-Schaltung auf dem Pico. Die serielle Schnittstelle spricht mit sich selbst. Schaltplan: Benjamin Blessing

MicroPython Code

Der folgende MicroPython Code initialisiert die UART-Schnittstelle und sendet eine Nachricht. Anschließend wird geprüft, ob Daten empfangen wurden, und diese werden ausgegeben.

Speichern Sie diesen Code als uart_loopback.py auf Ihrem Computer ab und führen Sie ihn auf Ihrem Pico aus.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from machine import UART
import time
uart = UART(0, baudrate=115200, tx=0, rx=1)  # Initialisiere UART0

for i in range(5):
    tx_data = f"Test nummer {i}"
    uart.write(tx_data)
    time.sleep(1)

    rx_data = uart.read().decode('utf-8')
    print(f"Empfange Nachricht: {rx_data}")

Sobald Sie den Code ausgeführt haben, sollten Sie in der Ausgabe die gesendeten und empfangenen Nachrichten sehen. Damit wissen Sie, dass die UART0-Schnittstelle korrekt funktioniert.

Die UART-Klasse

Die UART Klasse in MicroPython, die Sie eben benutzt haben, bietet verschiedene Methoden, um die UART-Schnittstelle zu nutzen. Weiterführende Informationen finden Sie in der offiziellen Dokumentation der UART Klasse

RAK3272S-Modul und AT-Befehle

Das RAK3272S ist ein LoRa-Modul, das über eine UART-Schnittstelle mit dem Raspberry Pico kommuniziert. In diesem Abschnitt lernen Sie, wie Sie das Modul anschließen und grundlegende AT-Befehle verwenden können, um mit dem Modul zu interagieren.

In der offiziellen Dokumentation des Moduls finden Sie weitere Informationen.

Verkabelung

Das RAK3272S Modul verfügt über zwei UART-Schnittstellen: UART1 und UART2. In diesem Beispiel verwenden wir nur die UART2-Schnittstelle.

Das RAK Modul muss immer mit einer Antenne betrieben werden, da sonst das Modul beschädigt werden kann.
Anschluss des RAK3272S an den Raspberry Pico über UART. Schaltplan: Benjamin Blessing
Anschluss des RAK3272S an den Raspberry Pico über UART. Schaltplan: Benjamin Blessing

Verbinden Sie die folgenden Pins des RAK3272S mit dem Raspberry Pico:

Raspberry Pico RAK3272S
UART0 TX Pin 1 UART2 RX J4 Pin 8
UART0 RX Pin 2 UART2 TX J4 Pin 7
3,3 V Pin 36 3V3 J4 Pin 9
GND Pin 38 GND J4 Pin 4

AT-Befehle

Mit den sogenannten AT-Befehlen (Attention Commands) können Sie das RAK-Modul konfigurieren und steuern, also auch Daten senden und empfangen. Diese Befehle werden über die UART-Schnittstelle gesendet, und das Modul antwortet mit entsprechenden Rückmeldungen.

Hier finden sie die offizielle Liste der AT-Befehle für das RAK3272S-Modul.

Aufbau der AT-Befehle

AT-Befehle haben folgende Form AT+XXX, wobei XXX dabei der spezifische Befehl ist. Enden muss jeder Befehl mit einem carriage return und line feed (stammt noch aus den Zeiten der Schreibmaschine): \r\n.

Manchen Befehlen können Sie Parameter mitgeben und manche Befehle geben Ihnen einen Rückgabewert zurück. Was Sie auf jeden Fall immer vom Modul bekommen, ist ein Return Code wie z. B. OK oder ein bestimmter ERROR der anzeigt, dass ein Befehl nicht erfolgreich war.

Der folgende Code initialisiert ein UART-Objekt und sendet dann den AT-Befehl AT+VER=?, der die Firmware-Version des Moduls zurückgibt (siehe Beschreibung dieses Befehls). Das RAK-Modul antwortet wieder auf der UART-Schnittstelle, wo Sie die Nachricht auslesen können.

Speichern Sie diesen Code als at_command_test.py auf Ihrem Computer ab und führen Sie ihn auf ihrem Pico aus:

1
2
3
4
5
6
from machine import UART
import time
uart = UART(0, baudrate=115200, tx=0, rx=1, bits=8, parity=None, stop=1, rxbuf=512)
uart.write("AT+VER=?" + "\r\n")
time.sleep(1)
print(uart.read())

Wenn alles geklappt hat, sollten Sie eine Antwort ähnlich der folgenden erhalten:

b'AT+VER=RUI_4.0.6_RAK3172-E\r\nOK\r\n'

Sie sehen hier die Firmware-Version RUI_4.0.6_RAK3172-E und den Return Code OK, der anzeigt, dass der Befehl erfolgreich ausgeführt wurde. Das vorangestellte b'...' zeigt an, dass es sich um eine Byte-String-Antwort handelt. Auch das Modul antwortet mit \r\n am Ende jeder Zeile.

Zurück
Weiter