Raspberry Pi und Arduino: Serielle Verbindungen

Der einfachste Weg einen Raspberry Pi und einen Arduino miteinander kommunizieren zu lassen ist der serielle Port (UART). Prinzipiell wären dazu auch nur 3 Kabel notwendig, wenn wir nicht, wie bei den vielen Arduinos, das Problem hätten, dass wir es mit 2 unterschiedlichen Spannungen, beider Parteien, an den IO-Pins zu tun hätten.

Raspberry Pi und Arduino - serielle Verbindung - blog.simtronyx.de

Raspberry Pi und Arduino – serielle Verbindung – blog.simtronyx.de

So verfügen die meisten Arduinos (bspw. Arduino Uno, Arduino Nano, Arduino Pro Mini 5V) über eine Versorgungsspannung von 5V, wo hingegen der Raspberry Pi nur 3,3V an den GPIO-Pins verträgt.

Hardware

Alle folgenden Varianten haben gemein, dass die Massen beider Geräte miteinander verbunden werden müssen.

Pegelwandler-Breakoutboard

Eine zuverlässige Lösung auch für höhere Geschwindigkeiten:

Schaltplangröße:

1afbgchdie1j55101015152020252530afbgchdie30jArduino Nano - http://blog.simtronyx.de - SVG created by Ronny Simon - All rights reserved.Logic level converter - 2 Channel - http://blog.simtronyx.de - SVG created by Ronny Simon - All rights reserved.
Für weitere Informationen (z.B. Pinbelegungen von Bauteilen oder genaue Kabelverbindungen)
mit der Maus über Elemente fahren (oder im Touch-Modus: Elemente antippen)...

In diesem Fall wird der Arduino über USB mit Strom versorgt und die Masse wird hier über den Pegelwandler verbunden.

Ausnahmen

Einige Arduinos laufen von vornherein mit 3,3V, bzw. können auf 3,3V Versorgungsspannung eingestellt werden. So beispielsweise der Arduino Due (3,3V von Hause aus), spezielle Arduino Pro Mini mit 3,3V und 8Mhz und spezielle Modelle wie bspw. der Olimexino-32U4, welcher auf 3,3V umgestellt werden kann. Diese Modelle können direkt an den UART-Leitungen verbunden werden (in diesem Beispiel ein Olimexino-32U4 (mit Switch auf 3,3V!):

Schaltplangröße:

Olimexino-32U4 (Arduino compatible) - http://blog.simtronyx.de - SVG created by Ronny Simon - All rights reserved.
Für weitere Informationen (z.B. Pinbelegungen von Bauteilen oder genaue Kabelverbindungen)
mit der Maus über Elemente fahren (oder im Touch-Modus: Elemente antippen)...

Natürlich gibt es auch noch weitere Möglichkeiten, beispielsweise mit ICs, auf die hier aber (vorläufig) nicht weiter eingegangen wird.

Software

Raspberry Pi

Um Daten von der seriellen Schnittstelle unseres Raspberry Pi zum Arduino zu übertragen müssen wir zuerst per

sudo nano /etc/inittab

in der Datei folgende Zeile auskommentieren, falls nicht schon geschehen:

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

durchStrg+X,J,↵abspeichern und schliessen und danach mit

sudo nano /boot/cmdline.txt

entfernen wir noch in folgender Zeile:

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

die rot markierten Einträge (eventuell sind diese gar nicht vorhanden, dann muss natürlich nichts gelöscht werden) und speichern natürlich im Anschluss die Datei ab. Anschließend starten wir mit

sudo reboot

unseren Raspberry Pi neu um die Änderungen abzuschließen.

Ein Neustart ist natürlich nicht notwendig wenn die Dateien nicht geändert worden mussten.

Nun ist die serielle Schnittstelle an den GPIO-Pins für die Benutzung freigegeben. Um später auch überprüfen zu können ob die Verbindung zwischen Arduino und Raspberry Pi funktioniert, installieren wir uns noch ein kleines Terminalprogramm mit:

sudo apt-get install minicom

dazu später mehr…

Arduino

Achtung, es empfiehlt sich den Arduino erst dann mit dem Raspberry Pi zu verbinden, nachdem der Sketch hochgeladen wurde, um durch eventuell anliegende 5v am Arduino RX-Pin den Raspberry Pi nicht zu beschädigen! Der folgende Sketch macht nichts weiter als, die empfangenen Zeichen direkt wieder zurückzusenden, natürlich erst nachdem wir ihn hochgeladen haben und alles verbunden ist.

void setup() {
   Serial.begin(9600);
}

void loop() {

    if (Serial.available() > 0) {
        char incoming = Serial.read();
        Serial.print("Empfangen: ");
        Serial.println(incoming);
    }
}

Download Source Code

Testen der Verbindung zwischen Raspberry Pi und Arduino

Raspberry Pi – Konsole

Nun starten wir mit

minicom -b 9600 -o -D /dev/ttyAMA0

die Konsolenverbindung zum Arduino und sollten dann: Raspberry-Pi-Arduino-serial-minicom-test-blog.simtronyx.de unsere Zeichen die wir per Tastatur eingeben auch wieder zurückgesendet bekommen, Voilà!

Bauteile (Bezugsquellen):

eBay: Arduino
Breadboard
Breadboard Kabel
Pegelwandler
Raspberry Pi
Amazon: Arduino
Breadboard
Breadboard Kabel
Pegelwandler
Raspberry Pi

Gut?

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail