Projekt: pi_robot - Raspberry Pi, iPad und etwas Code

Amazon

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 3 Raspberry Pi 3 auch mit ausreichend CPU-Leistung und Arbeitsspeicher ausgestattet, um auch etwas komplexere Aufgaben zu lösen.

Mit dem 1,2 GHz quad-core ARM Cortex-A53 CPU, 1 Gig RAM, 40 GPIO-Pins , Ethernet-Anschluss, WLan, Bluetooth, 4 USB-Ports und einem Full HDMI-Port kann man eine menge Spaß haben.

Als Betriebssystem dient bei mir Raspbian, ein Debian-Linux-Ableger.

Inhaltsverzeichnis:

Ein Raspberry Pi, ein iPad und etwas Code

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 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, genau wie für Smarthome-Projekte, 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.

AmazonIm 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. Auch ein kleines Messenger Modul habe ich integriert um Nachrichten per Telegram zu versenden.

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: 23. Mai, 2019
Tags: , , , , , , , ,

Weitere interessante Beiträge

Streams und Apps um Radio zu hören

Der Empfang von deutschen oder auch ausländischen Rundfunkstationen ist kein Problem mit der passenden App. Auch Empfangsprobleme gehören so der Vergangenheit an. Inzwischen werden die meisten Sender auch über das Internet digital ausgestrahlt, sodass man nicht zwangsläufig auf ein Radio als Empfangsgerät angewiesen ist. Wer dennoch auf sein herkömmliches Radio nicht verzichten möchte, für den [...] Weiterlesen »


DIYS Smart-Home V1 - Irgendwo muss man ja anfangen!

Schon seit einiger Zeit plane ich mein Smart-Home. Neben dem Kostenfaktor für all die tollen Dinge die ich mir so vorstelle fehlt es oft an der notwendigen Zeit zur detailierten Planung und Umsetzung. Daher habe ich beschlossen einfach mal irgendwo anzufangen und dieses DIY-Projekt parallel niederzuschreiben...mal sehen wohin das führt...Ich bitte um Nachsicht wenn ich [...] Weiterlesen »


Unity 2D Platformer - Level Generator

Seit einiger Zeit experimentiere ich hier und da mit der 2D- und 3D Engine Unity. Insbesondere die Programmierung eines 2D-Platformers hat es mir aktuell angetan. Allerdings ist das programmieren eines 2D-Games (sofern man Programmierer ist) nicht das größte Problem, sondern meiner Meinung nach die Optik, da ich kein Grafiker bin. :D So kommt man nicht [...] Weiterlesen »


App des Tages: Hunter & Co. - Dein digitaler Jagdgefährte

Heute mal eine kostenfreie App aus dem Bereich Sport - genauer gesagt aus dem Bereich der Jagd. Dein digitaler Jagdgefährte ist eine kostenlose App für iOS (iPhone) sowie Android-Mobilgeräte. Obwohl die App noch relativ "jung" ist, wurde Sie bereits weit über 10.000 mal in den Appstores heruntergeladen und auch schon knapp 100mal bewertet (nahezu positiv; [...] Weiterlesen »


App-Suchmaschine für iOS und Android

In den letzten Wochen habe ich mich viel mit dem Lesen, Auswerten und Visualisieren von Daten aus den verschiedenen Appstores auseinander gesetzt. Dabei entstanden einige nette kleine Tools die zum Teil hier veröffentlicht wurden, wie z.B. der Apfel-Appstore-Reader und der ITC-Umsatz-Rechner. Irgendwann bin ich dann über diverse App-Suchmaschinen wie AppTicker oder AppGefahren gestolpert. Schön finde [...] Weiterlesen »