Raspberry Pi Pico: UART verbinden und programmieren

UART ist eine Standard-Schnittstelle, die eine Vielzahl von Geräten haben, um Daten mit anderen Geräten austauschen zu können.
Der Raspberry Pi Pico hat insgesamt 2 UART-Schnittstellen. Das heißt, man kann zwei Geräte per UART mit dem Raspberry Pi Pico verbinden. Die Verbindung erfolgt jeweils über eine TX- und RX-Leitung, die auf unterschiedlichen GPIO-Pins zu finden sind. Außerdem muss die Kommunikation mit dem jeweiligen Gerät, also Senden und Empfangen programmiert werden.

UART-Geräte miteinander verbinden

UART-Geräte miteinander verbinden

Für die Kommunikation werden zwei Datenleitungen verwendet. Eine Leitung dient zum Senden von Daten und wird als Transmit, kurz TX, bezeichnet. Die zweite Leitung dient zum Empfangen von Daten und wird als Receive, kurz RX, bezeichnet.

Damit zwei Geräte miteinander kommunizieren können muss die TX-Leitung eines Geräts mit der RX-Leitung des andere Geräts verbunden werden. Was bei einem Gerät Senden ist, das ist beim anderen Empfangen.

Wichtige Frage: Erfordert eine UART-Verbindung eine gemeinsame Masse (GND) beider Geräte?

Kurze Antwort: Ja, eine gemeinsame Masse-Verbindung ist in der Regel erforderlich.

Lange Antwort: Nein, tut es nicht. UART ist eine Schnittstelle mit einem Kommunikationsprotokoll, das oft verwendet wird, wenn eine gemeinsame Masse zwischen den Geräten ausgeschlossen ist. Es gibt viele Beispiele für UART-Anwendungen, die keine gemeinsame Masse verwenden.
Abgesehen davon wird die überwiegende Mehrheit der UART-Verbindungen als Direktverbindungen zwischen zwei Geräten verwendet, die eine gemeinsame Masse verwenden. Das liegt an der Nähe der meisten UART-Geräte. Sind beide Geräte direkt miteinander verbunden, dann ist eine gemeinsame Masse erforderlich.
Es gibt jedoch viele Situationen, in denen eine gemeinsame Masse schwierig ist. Zum Beispiel wenn das Signal-Rausch-Verhältnis unter das für eine zuverlässige Kommunikation erforderliche Maß fällt. Dann muss man die gemeinsame Masse auftrennen.

GPIO-Belegung

Raspberry Pi Pico GPIO Belegung

Beim Raspberry Pi Pico ist zu berücksichtigen, dass es insgesamt nur 2 UART-Schnittstellen gibt (0 und 1), die auf verschiedene GPIOs verteilt sind. Der UART 0 kann über die GPIOs 0/1 (Standard), 12/13 oder 16/17 und der UART 1 über die GPIOs 4/5 (Standard) oder 8/9 initialisiert werden.
Das heißt, die GPIOs 0/1, 12/13 und 16/17 können nicht zusammen als UART verwendet werden. Ebenso können die GPIOs 4/5 und 8/9 ebenfalls nicht zusammen als UART verwendet werden.
Die GPIO für TX und RX müssen bei der Initialisierung der UARTs korrekt angegeben werden.

Aufbau zum Testen

Raspberry Pi Pico: UART testen

Der folgende Aufbau sieht vor, dass die beiden UART-Schnittstellen des Raspberry Pi Pico miteinander verbunden werden. Auf diese Weise kann sich der Pico selber etwas schicken. Das scheint im ersten Moment unsinnig zu sein. Der Vorteil dabei ist, dass man die UART-Schnittstelle testen kann.

Hinweis zur Verkabelung: Damit das gegenseitige Senden und Empfangen funktionieren kann, müssen TX und RX zwischen den beiden Gegenstellen verdreht verbunden sein. Das heißt, die TX-Leitung beim einen Gerät ist die RX-Leitung beim anderen Gerät. Genauso die RX-Leitung der einen Gegenstelle ist die TX-Leitung der anderen Gegenstelle. Falsch wäre TX mit TX und RX mit RX zu verbinden. Richtig ist jeweils TX mit RX zu verbinden. Was auf der einen Seite der Kommunikation die Sendeleitung (TX) ist, ist auf der anderen Seite der Kommunikation die Empfangsleitung (RX).

Konfiguration und Initialisierung

Für eine erfolgreiche Übertragung mit UART zwischen zwei Geräten müssen ein paar Übertragungsparameter auf beiden Seiten der seriellen Schnittstelle übereinstimmen. Typischerweise gibt es hierzu Standard-Werte, die bei vielen Geräten, aber auch nicht immer, eingesetzt werden.

  • Baudrate: typischerweise 9600
  • Anzahl der Datenbits: typischerweise 8
  • Anzahl der Stopbits: Typischerweise 1
  • Parität: Typischerweise None oder 0

Die Werte für Datenbits, Stopbits und Parität sind oft wie angegeben. Nur die Baudrate ist in der Regel individuell zu wählen. 9600 wird oft verwendet. Aber auch 115200 ist gängig. Das ist zu jedem Gerät oder der Komponenten zu ermitteln. Oft hilft ein Blick in ein Datenblatt oder eine Anleitung mit Anwendungsbeispielen.

Programmcode: UART testen

Um Daten per UART-Schnittstelle zu übertragen, bedarf es einer Gegenstelle, die die Daten empfangen kann. Wenn Du diese Gegenstelle nicht hast, dann kannst Du den Raspberry Pi Pico, den Du zum Senden verwendest, auch zum Empfangen verwenden. Das heißt, der Pico sendet sich die Daten selber.

Der folgende Programmcode sieht vor, sofern der Aufbau von oben verwendet wird, dass ein UART (uart0) zum Senden verwendet wird und die Daten auf dem anderen UART (uart1) empfangen und dann auf der Kommandozeile ausgegeben werden.

# Bibliotheken laden
from machine import UART, Pin
from time import sleep

# UART0 initialisieren
uart0 = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1), bits=8, parity=None, stop=1)
print('UART0:', uart0)
print()

# UART1 initialisieren
uart1 = UART(1, baudrate=9600, tx=Pin(8), rx=Pin(9), bits=8, parity=None, stop=1)
print('UART1:', uart1)
print()

# Daten zum Senden
txData = 'Hallo Welt'
print('Daten senden:', txData)

# Daten senden
uart0.write(txData)
sleep(1)

# Daten empfangen und ausgeben
rxData = uart1.readline()
print('Daten empfangen:', rxData.decode('utf-8'))

Programmcode: UART mit einer Gegenstelle testen

Wenn Du eine Gegenstelle zum Testen hast, zum Beispiel ein zweiter Raspberry Pi Pico, dann kannst Du mit folgenden Programmcodes das Senden und Empfangen von Daten ausprobieren. Natürlich müssen dazu die beiden Geräten über mindestens zwei Leitungen für RX und TX verbunden sein.

Hinweis: Du musst sicherstellen, dass die UART-Einstellungen auf dem Raspberry Pi Pico und dem anderen Gerät übereinstimmen, um eine erfolgreiche Übertragung sicherzustellen.

  • Baudrate (bps): typischerweise 9600
  • Anzahl der Datenbits: typischerweise 8
  • Anzahl der Stopbits: Typischerweise 1
  • Parität: Typischerweise None oder 0

Hier ist ein Beispiel in MicroPython, um Daten an ein externes Gerät über UART zu senden:

from machine import UART, Pin
uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1), bits=8, parity=None, stop=1)
uart.write('Hello World')

Hier ist ein Beispiel in MicroPython, um Daten von einem externen Gerät über UART zu empfangen:

from machine import UART, Pin
uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1), bits=8, parity=None, stop=1)
rxData = uart.readline()
print(rxData.decode('utf-8'))

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