Startseite>Raspberry Pi und Arduino via UART koppeln
Aus Raspberry Pi Geek 05/2015

Raspberry Pi und Arduino via UART koppeln

© Corina Rosu, 123RF

Anschluss unter dieser Nummer

Marcus Nasarek

Sowohl der RasPi als auch der Arduino bringen serielle Schnittstellen mit. Kleine Anpassungen genügen, um beide darüber kommunizieren zu lassen. So können Sie viele bestehende Arduino-Projekte auch mit dem Raspberry Pi nutzen.

Ähnlich wie sich die Robots R2-D2 und C-3PO aus “Star Wars” pfeifend und quietschend unterhalten, geschieht das auch bei Modemverbindungen. Eine solche eignet sich auch bestens zum seriellen Informationsaustausch zwischen Arduino und einem RasPi.

Wie C-3PO beherrscht der RasPi dank Linux unzählige Programmiersprachen und Kommunikationsprotokolle, außerdem verfügt er über eine leicht zu bedienende grafische Benutzeroberfläche. Der Arduino hingegen siedelt viel näher an der Elektronikwelt, lässt sich mit C programmieren und kommuniziert mithilfe der Mikrocontroller-Schnittstellen UART, I2C und SPI mit der Außenwelt. Die serielle Schnittstelle realisiert dabei der Universal Asynchronous Receiver Transmitter, kurz UART.

Serielle Datenübertragung

Grundsätzlich besteht eine serielle Verbindung aus drei Leitungen: Eine dient zum Senden (TX), eine zum Empfangen (RX) der Signale, die dritte als Masse (GND). Optionale Steuerleitungen kommunizieren die Empfangsbereitschaft (CTS), die Sendeanforderung (RTS), die Betriebsbereitschaft der Gegenseite (DSR) sowie die eigene Betriebsbereitschaft (DTR).

Das Prinzip einer seriellen Datenübertragung beruht darauf, dass beide Seiten zunächst eine gemeinsame Taktgeschwindigkeit vereinbaren (Baud-Rate), indem sie Datenpakete übertragen. Die bestehen in der Regel aus einem Startbit, einer festgelegten Anzahl von Datenbits, einem optionalen Paritätsbit und einem oder zwei Stoppbits. Eine gängige Abkürzung für die Einstellung der Schnittstelle lautet 9600 8-N-1. Das bedeutet, die Verbindung nutzt eine Taktrate von 9600 Baud, schickt 8-Bit-Datenpakete, also je ein ASCII-Zeichen, keine (N) Paritätsbits und nur ein Stoppbit. Damit die Übertragung funktioniert, müssen beide Seiten die gleichen Einstellungen verwenden.

Serielle Schnittstellen am RasPi

Der RasPi bietet zwei Wege an, eine serielle Schnittstelle zu nutzen. Einen davon stellt der GPIO-Port bereit. Über dessen Pins 8 und 10 steht die serielle Schnittstelle des BCM2835-Controllers in Form der Gerätedatei /dev/ttyAM0 zur Verfügung (Abbildung 1). Der zweite Weg bedient sich eines seriellen USB-Adapters. Er bietet den Vorteil, dass er die Spannungsunterschiede der Datenleitungen zwischen Arduino (5 Volt) und RasPi (3.3 Volt) ausgleicht; zudem bleibt der GPIO-Port für andere Aufgaben frei.

Abbildung 1: Der GPIO-Port beim Raspberry Pi B+ und seine Belegung. Pin 8 und 10 (UART) stellen die serielle Schnittstelle bereit.

Abbildung 1: Der GPIO-Port beim Raspberry Pi B+ und seine Belegung. Pin 8 und 10 (UART) stellen die serielle Schnittstelle bereit.

Raspian verbindet die serielle Schnittstelle standardmäßig mit einem Getty-Terminal, das es erlaubt, mit einem Terminalprogramm von einem anderen Computer aus auf die Konsole des RasPi zuzugreifen [1]. Um die serielle Schnittstelle am GPIO-Port für eigene Projekte zu nutzen, müssen Sie zunächst das Getty-Terminal von der Geräte-Datei abklemmen. Dazu kommentieren Sie in der Datei /etc/inittab die folgende Zeile mit # aus:

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Zusätzlich benötigt die Boot-Konfiguration in /boot/cmdline.txt eine Anpassung, da der RasPi die Konsolenausgabe beim Start über die serielle Schnittstelle ausgibt. Hier entfernen Sie den Eintrag console=ttyAMA0,115200, sodass die Datei anschließend den folgenden Inhalt zeigt:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Nach einem Neustart des RasPi steht der serielle Port dann für die eigene Verwendung zur Verfügung.

Serielle USB-Adapter kosten im Internet etwa 6 bis 8 Euro. Einige sind direkt in den USB-Stecker integriert, andere bestehen aus einer kleinen Platine mit USB-Stecker und Steckanschlüssen (Abbildung 2). Nach dem Einstecken in den USB-Port des RasPi erscheint die neue Gerätedatei /dev/ttyUSB0. Weitere serielle USB-Adapter erzeugen Gerätedateien mit fortlaufenden Nummern wie ttyUSB1 oder ttyUSB2.

Abbildung 2: Um die serielle Schnittstelle via USB-Adapter zu nutzen, stehen verschiedene Varianten zur Auswahl bereit.

Abbildung 2: Um die serielle Schnittstelle via USB-Adapter zu nutzen, stehen verschiedene Varianten zur Auswahl bereit.

Spannend

Während die seriellen Anschlüsse des Arduino meist mit 5 Volt arbeiten, vertragen die GPIO-Ports des RasPi maximal 3,3 Volt. Wenn Sie eine Signalleitung vom Arduino also direkt an den RasPi anschließen, zerstört die zu hohe Spannung den RasPi unwiederbringlich. Das Problem lässt sich auf zwei Arten lösen.

Ein serieller USB-Adapter arbeitet selbst mit 5 Volt und hat in der Regel kein Problem mit den Datenleitungen des Arduino. Die meisten seriellen USB-Adapter erlauben es darüber hinaus, den Anschlusspegel wahlweise auf 5 oder 3,3 Volt einzustellen. Abbildung 2 zeigt ganz rechts einen solchen Adapter mit einem Jumper zum Einstellen der Spannung. Die Einstellung 3,3 Volt benötigt zum Beispiel der Arduino Due, da dieser wie der RasPi mit 3,3-Volt-Anschlüssen arbeitet.

Wollen Sie die UART-Pins am GPIO-Port des RasPi nutzen, so müssen Sie zumindest den Pegel des RX-Pins reduzieren, da hier der Arduino mit 5 Volt sendet. Am einfachsten gelingt das mit einem Level-Converter (Abbildung 3). Den erhalten Sie – mit einen oder mehreren Kanälen – für etwa 3 Euro bei vielen Elektronikhändlern im Internet. Sie schalten den Converter zwischen die seriellen Pins des Arduino und den GPIO-Port des RasPi. Die Bezeichnung LV steht dabei für die niedrigere Spannung von 3,3 Volt, HV kennzeichnet die höheren 5 Volt.

Abbildung 3: Damit Arduino den RasPi nicht röstet, gilt es, die UART-Spannung mittels 2-Kanal-Level-Converter von 5 auf 3,3 Volt zu reduzieren.

Abbildung 3: Damit Arduino den RasPi nicht röstet, gilt es, die UART-Spannung mittels 2-Kanal-Level-Converter von 5 auf 3,3 Volt zu reduzieren.

Arduino

Abbildung 4 zeigt einen kleinen Überblick über die gängigsten Modelle des Arduino. Im Hinblick auf die serielle Kommunikation besteht der wesentliche Unterschied in der Spannungsversorgung der Ports. Während Uno, Leonardo und Nano mit 5 Volt an den Ports arbeiten, ist der Due grundsätzlich für 3,3 Volt ausgelegt. Die Modelle Mini, Micro und Trinket gibt es jeweils in beiden Ausführungen.

Abbildung 4: Arduinos Modellvielfalt: Oben Uno und Leonardo, unten Due, Nano und Trinket-kompatibles Miniboard.

Abbildung 4: Arduinos Modellvielfalt: Oben Uno und Leonardo, unten Due, Nano und Trinket-kompatibles Miniboard.

Die verschiedenen Arduino-Modelle verfügen teilweise über mehrere serielle Schnittstellen, was es später beim Programmieren zu beachten gilt. Beim Uno ist der serielle Port direkt mit dem USB-Port verbunden. Daher lässt sich bei diesem die serielle Schnittstelle Serial über die Pins 0 (RX) und 1 (TX[2] oder über den USB-Anschluss nutzen, der beim Anschluss am RasPi als /dev/ttyAM0 erscheint.

Der Leonardo verfügt über eine virtuelle serielle USB-Schnittstelle am USB-Anschluss (Serial) und eine serielle Schnittstelle (Serial1) an den Pins 0 (RX) und 1 (TX). Der Due bringt gleich vier serielle Schnittstellen mit, und zwar:

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland