Aus Raspberry Pi Geek 05/2015

Raspberry Pi und Arduino via UART koppeln (Seite 2)

  • Serial an den Pins 0 (RX) und 1 (TX),
  • Serial1 an den Pins 19 (RX) und 18 (TX),
  • Serial2 an den Pins 17 (RX) und 16 (TX) sowie
  • Serial3 an den Pins 15 (RX) und 14 (TX).

Arduino spricht C

Für die Programmierung des Arduino steht die leicht zu bedienende Programmierumgebung Arduino Software zur Verfügung (Abbildung 5). Viele Linux-Distributionen halten sie als Paket in ihren Repositories vor, die aktuelle Versionsnummer lautet 1.6.4 [3]. Gerade bei den neueren Arduino-Boards sollten Sie die jeweils aktuellste Version verwenden.

Abbildung 5: Die Arduino-Programmierumgebung bietet eine komfortable Möglichkeit, eigene Programme für den SBC zu schreiben.

Abbildung 5: Die Arduino-Programmierumgebung bietet eine komfortable Möglichkeit, eigene Programme für den SBC zu schreiben.

Nach der Installation wählen Sie zunächst das Arduino-Modell aus, für das Sie ein Programm erstellen möchten, für den Uno etwa Werkzeuge | Platine | Arduino Uno. Anschließend erstellen Sie im Editor ein C-Programm. Ein Beispielprogramm für eine serielle Ausgabe zeigt Listing 1. Mit einem Klick auf den linken Button in der Menüleiste kompilieren Sie das Programm, mit dem Button rechts daneben laden Sie es in den Arduino.

Listing 1

 

int counter = 0;
void setup() {
  Serial.begin(9600);
}
void loop() {
  delay(1000);
  Serial.println(counter);
  counter = (counter + 1) % 10;
}

Eine gute Einführung in die Programmierung des Mini-Rechners finden Sie im Buch “Arduino für Einsteiger” [4]. Das Programm aus Listing 1 konfiguriert in der Funktion setup(), die es beim Anschalten des Arduino einmal ausführt, die serielle Schnittstelle. Danach läuft bis zum Ausschalten immer wieder die Funktion loop(). Das Programm legt zunächst eine Pause von einer Sekunde ein, gibt dann die Variable counter auf der seriellen Schnittstelle aus und zählt anschließend counter um eins hoch und speichert modulo 10. Dadurch zählt die Variable immer wieder von 0 bis 9 durch.

RasPi auf Empfang

Schließen Sie den Arduino an den seriellen USB-Adapter des RasPi an, so empfängt dieser die Ausgaben mit einem seriellen Terminal und stellt sie etwa mit GTKTerm dar (Abbildung 6). Die Einstellung des Programms erfolgt unter Configuration | Port. Entsprechend dem Beispielprogramm aus Listing 1 stellen Sie am Port /dev/ttyUSB0 eine Baudrate von 9600, Parity none, 8 Bits, 1 Stoppbit und Flow Control none ein. Das funktioniert aber auch mit anderen Terminalprogrammen wie Screen. Darin gibt der Aufruf von screen /dev/ttyUSB0 9600 die Nachrichten vom Arduino aus.

Abbildung 6: GTKTerm zeigt die vom Arduino generierten Ausgaben auf einem seriellen Terminal auf dem RasPi an.

Abbildung 6: GTKTerm zeigt die vom Arduino generierten Ausgaben auf einem seriellen Terminal auf dem RasPi an.

Seriell skripten

Möchten Sie Daten automatisiert erfassen, eignen sich dafür am besten eigene Skripte. Die meisten Skriptsprachen bringen Bibliotheken mit, die die Arbeit mit seriellen Schnittstellen erleichtern. So verfügt Python beispielsweise über die Bibliothek pySerial. Listing 2 zeigt, wie ein einfaches Python-Skript die serielle Schnittstelle ausliest und die Daten auf der Konsole ausgibt. Genauso gut könnte das Skript die Daten weiterverarbeiten, in einer Datei speichern oder per E-Mail verschicken.

Listing 2

 

import serial
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=None)
line = ser.readline()
while (1):
  line = ser.readline()
  if (len(line) > 0):
  print line,
ser.close()

In seinem Blog beschreibt der Autor dieses Artikels auch, dass der RasPi Daten an den Arduino senden kann, die dieser dann auswertet [5]. Dort misst ein Arduino mit einem Fotowiderstand die Lichtstärke und schaltet ab einem bestimmten Schwellwert eine LED an. Wird es zu dunkel, schaltet der Arduino die LED an. Die Messwerte schickt der Mini-Rechner an einen RasPi. Antwortet der mit einem Zeichen i, bewertet Arduino die Messwerte umgekehrt. Dann schaltet er die LED an, wenn viel Licht auf den Fotowiderstand fällt, und schaltet sie aus, wenn zu wenig Licht einfällt.

Fazit

Die serielle Schnittstelle stellt oft den kleinsten gemeinsamen Nenner dar, auf den sich verschiedene Systeme zur Kommunikation miteinander einigen können. Gerade zwischen RasPi und Arduino eignet sie sich besonders gut, um Daten hin- und herzuschieben. Für den Arduino gibt es mit dem Firmata-Protokoll [6] sogar eine Bibliothek, mit deren Hilfe Sie die Schnittstellen des Arduino vollständig über die serielle Anbindung kontrollieren [7]. Auf diese Weise bringen Sie die elektronische Welt des Arduino auf einfache Weise mit der Linux-Welt des RasPi zusammen. 

Der Autor

Marcus Nasarek ist Linux seit Langem treu und schwer begeistert von Skripting, von Ruby und von Projekten mit dem Raspberry Pi.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben