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

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 »


App des Tages: Mekorama

Die heutige App des Tages heißt Mekorama! Bewege einen Roboter durch über 50 Level. Grafisch ansprechend aufbereitet ist dieses Spiel ein echter Knaller, nicht umsonst steht die App schon seit einiger Zeit in den Top 10 der Download-Charts und hat schon allein im Android-Appstore knapp 40.000 fast durchweg 5-Sterne Bewertungen. Neben den bereits integrierten liebevoll [...] Weiterlesen »


Meine Piraten - Interaktive Wimmelapp

"Aahhrrr - Stelle deine Mannschaft zusammen und steche in See!" In dieser App können Kinder spielerisch nach dem Ursache-Wirkung Prinzip die Welt der Piraten entdecken und spannende Situationen erleben. Diese App ist für iOS (iPhone, iPad) verfügbar. Alles ist interaktiv und kann entdeckt werden: • Stelle deine eigene Mannschaft zusammen (über 65 Millionen Variationen) • [...] Weiterlesen »


Kinder MP3 Player / Radio

Auf der Suche nach einem schönen und individuell konfigurierbaren MP3-Player für meine kleine Tochter, kam ich realativ schnell auf den Kinder-MP3-Player namens Hörbert . Ein schickes Gerät, gut verarbeitet und eigentlich genau das was ich gesucht habe - allerdings etwas zu teuer für meinen Geschmack. Inhaltsverzeichnis:Kinder MP3 Radio Player selber bauenProduktempfehlung - Kinder MP3-Player Kinder [...] Weiterlesen »