Projekt: pi_robot - Raspberry Pi, iPad und etwas Code

raspberry_piDer Raspberry Pi ist nach wie vor einer der beliebtesten Mini-Computer, nicht nur unter Bastlern. Kostengünstig (je nach Modell um die 30 bis 40,- EUR), flexibel im Anwendungsbereich und spätestens seit dem Raspberry Pi 2 Model B Raspberry Pi 2 Model B auch mit ausreichend CPU-Leistung und Arbeitsspeicher ausgestattet, um auch etwas komplexere Aufgaben zu lösen. Mit der 900MHz quad-core ARM Cortex-A7 CPU, 1 Gig RAM, 40 GPIO-Pins , Ethernet-Anschluss, 4 USB-Ports und einem Full HDMI-Port kann man eine menge Spaß haben. Als Betriebssystem dient Raspbian, ein Debian-Linux-Ableger.

Die GPIO-Pins nutze ich unter anderem für einen externen Reset-Knopf, der den Raspberry Pi auf Wunsch sauber herunterfährt, ohne die Partition der MicroSD-Karte MicroSD-Karte zu schrotten, was schnell passiert, wenn man einfach den Netzstecker ziehen würde. Zu diesem Zweck habe ich eine kleine Java-Software programmiert, die beim Start des Pi's automatisch geladen wird, und die Events auf den GPIO-Ports handled. Um auf die GPIO des Raspberry Pi Raspberry Pi zuzugreifen, nutze ich die OpenSource-Library von -=The Pi4J Project=-, welche den Zugriff unter der Programmiersprache Java stark vereinfacht.

So ist der Schalter zum Herunterfahren des Pi's mit einigen wenigen Zeilen Code angebunden. Auf Hardware-Seite legt kurz gesagt an einem Pin (im Beispiel GPIO_00) eine Spannung an, und schaltet das Ganze so, das die Spannung durch den Knopfdruck des Schalters von 1 auf 0 gezogen wird. Dann braucht man im Code nur einen GpioPinListenerDigital auf diesen Port setzen und diesen bei PULL_DOWN feuern lassen.

GpioController gpio = GpioFactory.getInstance();
final GpioPinListenerDigital shutdownListener = new GpioPinListenerDigital() {
@Override
public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent arg0) {
if (arg0.getState() == PinState.LOW)
{  commandShutdownPi();  }
}};
final GpioPinDigitalInput pinShutdown = gpio.provisionDigitalInputPin(RaspiPin.GPIO_00, PinPullResistance.PULL_DOWN);
pinShutdown.addListener(shutdownListener);

Die Funktion commandShutdownPi() macht nichts anderes als den Shutdown-Befehl auszuführen. Einfacher geht es wohl kaum.

Runtime.getRuntime().exec("sudo shutdown -h now");

Das Programm (Jar-File) muss dann nurnoch mit Root-Rechten (für Vollzugriff auf die GPIO-Schnittstelle) beim Systemstart des Pi geöffnet werden. Dies macht man ganz einfach, indem man folgenden Eintrag in den Crontab (/etc/crontab) einfügt.

@reboot root java -jar /home/pi/Desktop/Apps/pi.jar &

raspberry_pi2In der pi.jar zusammen mit den verschiedenen GPIO-Pins habe ich auch noch andere Spielereien realisiert, wie zum Beispiel einen IR-Reader und -Sender (Infrarot-Dioden an GPIO_02 und _03), um Befehle von der Fernbedienung des Fernsehers entegegen zunehmen, und um Fernbedienungen (DVD-Player bedienen etc.) zu emulieren. Hierfür gibt es bereits allerhand Libraries und Tutorials im Internet, genau wie zu Funktransmittern (RFM12B), die man nutzen kann, um z.B. Funklichtschalter und Steckdosen fernzusteuern. Ein Blick auf die Projekt-Seiten von WiringPi und Pi4J lohnen. Dort gibt es etliche Code-Beispiele um besagtes zu realisieren. :-)

HomeServer, MediaCenter und SmartTV

Relativ simpel und schnell lässt sich der Raspberry Pi auch in einen Home-Server, in ein Media-Center oder Smart-TV verwandeln. Zu den Themen gibt es ebenfalls schon unzählige Images, die man nurnoch installieren muss, jedoch ist selber machen die schönere Alternative. Um auch hier den Aufwand möglichst klein zuhalten, nutze ich zum Beispiel zum Abspielen von MP3-, MP4-, AVI- und sonstigen Audio- und Video-Dateien den freien OMX-Player für Linux bzw. die Raspberry-Pi-Version. In Kombination mit dem Python-Programm Livestreamer lassen sich nicht nur lokale Videos und Musik abspielen, sondern auch Live-Streams aus dem Internet.

Im Endeffekt besteht mein kleines Programm pi_robot.jar aus 2 wesentlichen Modulen. Zum einen gibt es ein Server-Client-Modul. Dieses lauscht auf Port 4444 und nimmt Verbindungen  aus dem LAN vom iPad (siehe weiter unten) an, nimmt Steuerkommandos wie das Abspielen von Filmen entgegen und leitet diese an das zweite Modul weiter, den eigentlichen Robot, welcher die Kommandos ausführt und ein Resultat liefert. Für die Kommunikation zwischen iPad und Raspberry Pi habe ich mich fürs Erste für eine Klartext-Übertragung im CSV-Format (Semikolon als Limiter) entschieden. Um einen Film von einer Festplatte zu starten, schicke ich vom iPad z.B. einen Befehl wie "openmedia;/pfad/zur/videodatei.avi;2" an den Pi. Der erste Teil des Befehles ist das eigentliche Steuerkommando, der zweite Teil ist der absolute Pfad zur Videodatei, und der dritte Part wird mit 0, 1 oder 2 übergeben und gibt den Audio-Port an, welcher beim Abspielen genutzt werden soll. (0=HDMI, 1=AUX, 2=beides). Alles ganz schlicht und simpel.

Gestartet wird die fertige Server-Software pi_robot.jar ebenfalls wie die GPIO-Handler @reboot aus der Crontab heraus. Allerdings habe ich hier noch ein export DISPLAY hinzugefügt, damit ich über den java.awt.robot() auf Tastatur und Maus zugreifen kann, und die entsprechenden Treiber auch geladen werden, wenn keine Tastatur oder Maus am Raspberry Pi angeschlossen ist. Gerade wenn man den Pi später im Wohnzimmer direkt am Fernseher anschließen will, macht das Sinn. Wer will dort schon Tastatur und Maus herumliegen haben.

Starten der pi_robot.jar aus der /etc/crontab
@reboot pi export DISPLAY=:0.0 && java -jar /home/pi/Desktop/Apps/pi_robot.jar &

iPad-App zum Steuern des Raspberry Pi

Aus der Tatsache heraus, das ich keine Tastatur und Maus am Pi haben möchte, habe ich mich dazu entschieden die Software soweit aufzubohren, dass diese auch Tastatur- und Maus-Eingaben emulieren kann.

rasp_pi_ipad_keyboard

 

Das iPad soll in diesem Fall die volle Steuerung des Pi mit allen Funktionen übernehmen. Das Steuern des Webbrowsers, der Lautstärkeregelung des Pi, und aller OMX-Player-Funktionen (lauter, leiser, vorspulen, zurück, pause, etc...) wurden ebenfalls integriert, sodass der Zigaretten-Schachtel-Große Computer nun als Homeserver, Mediacenter, SmartTV und vieles mehr dient.rasp_pi_ipad_mediacenter
Aktuell betreibe ich noch etwas Feinschliff. In der Registerkarte "Verschiedenes" der iPad-App habe ich eine Funktion zum Herunterfahren des Pi integriert, sowie einige Buttons für den schnellen Webzugriff auf beliebte Internetseiten.

rasp_pi_ipad_schnellzugriff

Da sich noch einige Kinderkrankheiten gezeigt haben, und eine Absicherung per Passwort noch integriert werden sollte, verzichte ich derzeit auf eine Veröffentlichung der App und der Steuersoftware für den Raspberry Pi. Das Projekt werde ich weiter verfolgen und verfeinern soweit es die Zeit zulässt, und dann hier veröffentlichen. Feedback, Ideen, Fragen oder Anmerkungen zu diesem Projekt? -= Zum Kontaktformular =-

Zuletzt bearbeitet: 17. November, 2016
Tags: , , , , , , ,

Verwandte Beiträge

Telegram Messenger und die Bot API

Telegram ist im Prinzip ein Messenger ähnlich Whatsapp oder Threema , kostenlos und leicht zu bedienen. Ich möchte nicht sagen das dieser besser oder schlechter ist als andere Messenger, allerdings gefällt mir die Telegram Bot API sogut, dass ich an dieser Stelle ein kleines Tutorial dazu schreiben möchte. Aber zunächst ein paar Randinformationen. Telegram ist [...] Weiterlesen »


App des Tages: Super Mario Run

In diesem Spiel bewegt sich Mario durch die jeweiligen Level vorwärts und du lenkst ihn mithilfe diverser Sprünge in Richtung Ziel. Marios Verhalten ist dabei vom Timing deiner Berührungen des Bildschirms abhängig. Dein Geschick entscheidet, ob es dir gelingt, Münzen zu sammeln, das Ziel zu erreichen und Mario dabei auch noch gut aussehen zu lassen. [...] Weiterlesen »


App des Tages: Pokemon GO

Offensichtlich kann niemand dem Pokemon GO hype entfliehen, daher wird das heute zur App des Tages ausgerufen. :-) Viel Spaß beim Suchen und Fangen! Die Pokémon sind da draußen und du musst sie finden. Läufst du in deiner Nachbarschaft herum, vibriert dein Smartphone, wenn sich ein Pokémon in der Nähe befindet. Ziele und wirf einen [...] Weiterlesen »


Projekt: Makiwara 2.0

Es gibt bereits unzählige Bauanleitungen im Internet, wie man einen Makiwara (aus Japan stammendes Sportgerät) herstellt. Mein Eigenbau ist daher absolut nicht neu, aber alternativ und vor allem funktional. Ziel des Ganzen ist die Schlagwirkung mit dem iPad aufzuzeichnen und zu analysieren. Desweiteren sind verschiedene Modi möglich um neben Kraft auch ein nettes Reaktionstraining durchzuführen. [...] Weiterlesen »


Raspberry Pi und weitere Mini-Computer

Der Raspberry Pi ist nach wie vor einer der beliebtesten Mini-Computer. Dieser und andere Kleinst- und Einplatinencomputer sind nicht nur bei Bastlern und Hobbyschraubern beliebt. Kostengünstig, flexibel im Anwendungsbereich und mit ausreichend CPU-Leistung und Arbeitsspeicher ausgestattet, um auch etwas komplexere Aufgaben lösen zu können. Ethernet-Anschluss, HDMI-Ausgang, und Quadcore-CPUs mit über 1 Ghz machen Spass und [...] Weiterlesen »