Sonntag, 21. Juni 2015

Kommunikation Arduino - Raspberry Pi

In diesem Artikel geht es um die automatische Kommunikation von Raspberry Pi und Arduino über die serielle Konsole. Dadurch kann man dann, ähnlich wie beim PC und Processing, den Raspberry Pi als Webserver für die Heimautomation verwenden. Der klare Vorteil vom Raspberry Pi gegenüber dem PC ist, dass er wesentlich billiger ist(ca. 30€) und trotzdem alle notwendigen Features beinhaltet.

Vorbereitung

Vor dem eigentlichen Programmieren müssen ein paar Dinge erledigt werden. Zunächst einmal benötigt der Raspberry Pi  ein Betriebssystem, falls er noch keins hat. Ich verwende Raspbian, so etwas, wie das Standardbetriebsystem für den Pi. Ein weiterer Punkt ist, dass obwohl der Arduino über den USB Port mit dem Raspberry Pi verbunden ist, der serielle Port variieren kann. Deshalb müssen wir herausfinden auf welchem er angeschlossen ist. Dazu entfernen wir den Arduino noch einmal und starten die Konsole/das Terminal. Dort tippen wir den Befehl

ls /dev/tty*

ein. Nun erscheinen alle Verbindungen. Wenn wir nun den Arduino an den USB Port anschließen und den Befehl noch einmal eintippen, erscheint eine weitere Verbindung. Die müsst ihr euch merken.


Nun öffnen wir eine Python IDE, die euren Code live ausführt. Dadurch kann man sein Programm sehr gut überprüfen. Sobald ihr sicher seid, dass alles passt, könnt ihr die Befehl auch in einer Textdatei  mit der Endung ".py" speichern, und diese dann auf einmal ausführen lassen. Um die IDE zu öffnen klickt ihr rechts oben auf den Startknopf, und dann auf Programming > Python 2.
Mit einem Klick öffnet sich nach einer kurzen Pause ein Eingabefeld.

Vom Arduino zum Raspberry Pi

Wenn wir uns nun beispielsweise den, vom Arduino über die serielle Verbindung gesendeten, Text ausgeben lassen wollen, müssen wir zuerst die serial Bibliothek nachladen. Das geht über den Befehl import serial. Den müsst ihr nach ">>> " eingeben und Enter drücken. Wenn alles klappt erscheint wieder ">>>" und ihr könnt den nächsten Befehl eingeben. Jetzt müssen wir die serielle Verbindung mit dem Arduino starten. Dazu erstellen wir den Arduino vom Typ serial mit dem jeweiligen Port, den ihr oben herausgefunden habt, und einer gewissen Datenrate, die mit der am Arduino übereinstimmen muss. Ich verwende 9600. Jetzt können wir über arduino.readline() die aktuell, über die serielle Verbindung, gesendete Zeile auslesen. Da wir den Code "live" ausführen wird auch das Ergebnis sofort angezeigt, ohne print oder Sonstiges. Zum nachlesen hier der gesamte Code:
Da auf meinem Arduino ein Sketch ist, der alle 2 Sekunden den Text "Hallo, hier spricht der Arduino", sendet wir das auch in Python angezeigt. Hier der Arduino Sketch:

Vom Raspberry Pi zum Arduino

Wenn man Daten vom Raspberry Pi zum Arduino senden möchte, beispielsweise, um eine LED zu steuern, verwendet man wieder die serial Bibliothek in Python. Danach muss man wieder die serielle Verbindung mit dem Objekt arduino starten. Wenn wir nun einen Text senden wollen, verwenden wir den Befehl arduino.write('der Text'). Das ist alles was in Python passiert.

Der Arduino Sketch muss eine serielle Verbindung mit derselben Datenrate starten. Wenn wir eine LED steuern wollen, wird über Python die Zahl 1 oder 0 als String gesendet. Deshalb verwendet man die Funktion Serial.readString() um die Zahl einzulesen, und die LED am Pin 13(die Interne), zu steuern. Der fertige Sketch sieht dann so aus:


Das sind zwei kurze Beispiele, wie man die serielle Verbindung zum übertragen vom Daten nutzen kann. Durch das Ausbauen des Beispiels, ähnlich wie mit Processing, könnte man sich ein ganzes Smart Home bauen.

Keine Kommentare:

Kommentar veröffentlichen