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.
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:
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!):
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); } }
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: unsere Zeichen die wir per Tastatur eingeben auch wieder zurückgesendet bekommen, Voilà !
Bauteile (Bezugsquellen):
eBay: | Arduino Breadboard Breadboard Kabel Pegelwandler Raspberry Pi |
Amazon: | Breadboard Breadboard Kabel Pegelwandler Raspberry Pi |
Gut?











