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
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
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
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 utime 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:
- Raspberry Pi Pico: Grundlagen zum UART
- Raspberry Pi Pico: Gerät mit AT-Kommandos über UART steuern
- Raspberry Pi Pico: GPIO-Grundlagen
- Raspberry Pi Pico: I2C verbinden und programmieren
- Raspberry Pi Pico: Anschlüsse und Schnittstellen
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
Hardware-nahes 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)
Elektronik-Set Pico Edition
Raspberry Pi Pico: Hardware-nahes Programmieren mit MicroPython
Leichter Einstieg mit All-in-one-Set zum sofort Loslegen, um eigene Steuerungen programmieren.
Elektronik-Set Pico WLAN Edition
Raspberry Pi Pico W: IoT und Smart Home mit WLAN und MQTT
Betreibe Deinen Raspberry Pi Pico W als drahtloser Sensor in Deinem WLAN, versende E-Mails mit Daten und kommuniziere per MQTT im Internet of Things oder Smart Home.
Elektronik-Set Sensor Edition
Erweiterung zu den Elektronik-Sets Pico Edition und Pico WLAN Edition
Elektronik-Set mit den beliebtesten Sensoren zum Messen von Temperatur, Helligkeit, Bewegung, Lautstärke und Entfernung.
Elektronik-Set Eingabe Ausgabe Edition
Erweiterung zu den Elektronik-Sets Pico Edition und Pico WLAN Edition
Damit kannst Du MP3-Dateien abspielen, eine Stoppuhr bauen, einen Servo-Motor mit Drehschalter oder Joystick steuern, Lichteffekte mit einem WS2812-LED-Lichtstreifen erzeugen, Schalten mit einem Relais und Signalisieren mit einem Vibrationsmotor.