arduino uno

Arduino

Arduino und Raspberry Pi miteinander kommunizieren lassen

Wie der Arduino funktioniert und welche Modelle es gibt, habe ich bereits in einem vorherigen Artikel beschrieben. Nun gibt es massig Artikel über den Arduino an sich, aber nur wenige in Verbindung mit dem Raspberry Pi, jedoch bietet diese Kombination sehr viele Möglichkeiten.

Da ich mehr über den Arduino in Verbindung mit dem Raspberry Pi zeigen möchte, fange ich an, indem ich die direkte Kommunikation beider zeige.

Du brauchst nichts weiteres als einen Raspberry Pi, ein USB Kabel und einen Arduino (z.B. Uno oder Nano).



 

Vorbereitung

Damit der Arduino später mit dem Raspberry Pi kommunizieren kann, muss erst einmal entsprechender Code darauf geladen werden. Am einfachsten ist dies über den PC/Mac. Wie dies geht, habe ich bereits hier gezeigt.

Das ist nur ein kleines Beispiel, wie du die Serial-Komponente benutzt. Natürlich kannst du auch auf die Eingaben reagieren, indem du Funktionen startest, I/O setzt oder ausliest, etc.

 

Inbetriebnahme am Raspberry Pi

Am Pi werden zusätzliche Bibliotheken benötigt, diese installieren wir zuerst:

sudo apt-get install minicom python-serial

 

Du solltest den Arduino vom Pi trennen, falls du ihn verbunden hattest, da wir den Port Namen herausfinden müssen. Dazu führst du folgendes zwei mal aus: Einmal ohne und einmal mit Arduino über USB verbunden.

ls /dev/tty*

Du wirst feststellen, dass am Ende der Liste ein neuer Name hinzugefügt wurde (bei mir ist das /dev/ttyUSB0). Mittels diesem Namen kannst du den Arduino über die serielle Schnittstelle ansprechen.  Da die Bibliothek für serielle Verbindungen unter Python installiert wurde, können wir ganz einfach darüber zugreifen.

Dazu erstellen wir eine neue Datei

sudo nano serialTest.py

mit folgendem Inhalt:

Und ausführen:

sudo python serialTest.py

Die Ausgabe sieht dann folgendermaßen aus (mit STRG + C kannst du es stoppen):

pi@raspberrypi ~ $ sudo python serialTest.py
Folgender char wurde empfangen: 116
Folgender char wurde empfangen: 101
Folgender char wurde empfangen: 115
Folgender char wurde empfangen: 116

Die Ausgabe der eingelesenen Zeichen findet im ASCII Format statt (DEC für dezimal, HEX für den Hexadezimal Code). Du kannst natürlich auch das Zeichen direkt ausgeben bzw. darauf reagieren.

 

Was bringt mir das?

Zum einen bietet der Arduino, abhängig vom Modell, verschiedene Features, die nützlich sein können. Außerdem hat der Arduino auch viele digitale und analoge I/O Pins, die ganz einfach gesteuert werden können. Er könnte also als GPIO Expander verwendet werden, der sehr viel einfacher zu steuern ist. Außerdem kann man mit Arduino Bibliotheken/Programme einfach kommunizieren, falls man diese nicht auf dem Pi zum Laufen bringen möchte.



, , , , , , , ,


12 Kommentare

  1. Markus sagt:

    Leider überdeckt die Werbung an der rechten Seite die Hälfte des Artikels, so das es keinen Spaß macht ihn zu lesen. (Mac OSX, Safari)

    • Felix sagt:

      Welche Auflösung hast du denn? Kannst du die Seite neu laden, einen Screenshot machen und mir schicken? Die Sidebar sollte nämlich eigentlich auf der linken Seite angezeigt werden.

    • Gerd Hunhe sagt:

      ja bei mir auch

  2. Markus sagt:

    1440×900.

  3. Hebergement web sagt:

    dein Projekt ist echt klasse.. genau sowas habe ich gesucht habe schon mit dem raspberry versucht aber es leider nicht hinbekommen. Jetzt habe ich mir auch einen arduino zulegt und wollte gleich mal dein Projekt in die tat umsetzten nur leider komme ich bei dem Punkt mit dem Arduino nicht weiter. Habe diesen ber usb-angschlossen. Vllt kannst du mir weiterhelfen.

    • Felix sagt:

      Wo genau kommst du nicht weiter? Bekommst du Fehlermeldungen etc.? Bitte beschreibe dein Problem etwas genauer 🙂

  4. peddi sagt:

    Ich bin bei dem selben Projekt, allerdings kommt bei nur in minicom etwas an (ich lasse den arduino 3 x 4 Werte ausgeben also 1 2 3 4 . 5 6 7 8 . 9 10 11 12 mit je 1 Sekunde Abstand) in minicom kommt meist nur 5 6 7 8 an selten nur die anderen beiden. im Python kommt mit ttyusb0 nichts an (usb Verbindung) . wo liegt der fehler?

    • Marcus sagt:

      Wie lang ist denn dein USB Kabel? Bei USB Druckern darf das Kabel nicht zu lang sein weil sonst Datenverluste auftreten.

  5. TimeMen sagt:

    Hey, toller Artikel.
    Aber habe folgendes Problem:

    Wenn ich mit ls /dev/tty* die verfügbaren Ergebnisse mir anschaue, und dabei zwei listings mit Arduino und ohne Arduino durchführe, kommt kein Ergebnis hinzu.
    Bin dementsprechend auch nicht in der Lage etwas rumzuprobieren mit Ardu und RPi, weil mir schon der Serielle Port fehlt, den ich in der .py Datei angeben muss.
    Woran könnte das liegen? Gibt es einen Standardport?

    Am Arduino liegt es nicht, denn ich habe jetzt drei verschiedene angeschlossen, und jeweils ls ausgeführt. Bei keinem kam ein Ergebnis hinzu.

    Hoffe du kannst mir helfen 🙂
    Liebe Grüße

  6. Passa sagt:

    Hallo,
    ich hab das alles gemacht nur kommt dann diese Fehlermeldung:
    File „serialTest.py“, line 13
    except.KeyboardInterrupt:
    ^
    SyntaxError: invalid syntax

    Hoffe du könntest mir da helfen.

    • Passa sagt:

      Ok ich hab den Fehler gefunden.
      Eine weitere Frage:
      Wenn ich serialTest.py ausführe dann komm nur einer Meldung, dass der Port offen ist machen tut er aber nichts.

      Bitte Hilfe.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!