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.

christ schmuck.jpgIm 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: , , , , , , , ,

Dies könnte dich auch interessieren

DynDNS-Alternative im Eigenbau

Wer ohnehin über einen eigenen Webserver/Webspace im Internet und etwas Programmierkenntnisse verfügt, kann sich ohne großen Aufwand einen Service wie DynDNS.org & Co. sparen, will man auf Teile seines Heimnetzwerkes von Unterwegs aus zugreifen. Solche Services stellen einen Hostnamen/URL bereit (z.B. mein-heimnetzwerk.dyndns.org) welche dann auf die IP-Adresse des Heimnetzwerkes weitergeleitet wird. Neben einem oft kostenpflichtigem [...] Weiterlesen »


Silly Billy Hair Salon

Es gibt eine neue Kinderapp aus dem Hause wonderkind: Mit der App Silly Billy Hair Salon kann nach Herzenslust gestylt, geschnitten, gewaschen und gefärbt werden. Ob Irokesen-Schnitt, Disko-Look, Sufer-Matte, kurz oder lang, lockig oder glatt – der Fantasie sind keine Grenzen gesetzt. Die Stylingkunden sind lustige Tiere mit niedlichen Charakteren, die genau wissen, was für [...] Weiterlesen »


Hinzufügen von Website-Icons für iPhone, iPad und Android-Geräte

So ziemlich jeder Webseitenbetreiber hinterlegt im Wurzelverzeichnis seiner Webseite ein Favicon. Diese kleine Grafik wird dann im Browser-Tab oben neben dem Namen der Webseite angezeigt, genauso wie beim setzen eines Bookmarks bzw. Lesezeichens. Manch einer vergisst jedoch, dass inzwischen etliche Benutzer vorwiegend mit Mobilgeräten bzw. Smartphones wie iPhone, iPad oder Android-Smartphones und Tablets im Internet [...] Weiterlesen »


Kleine Helfer für den erfolgreichen Börsenhandel

BÖRSE ONLINE ist das etablierteste unabhängige Anlegermagazin in Deutschland. Seit mehr als 25 Jahren hilft es Anlegern Woche für Woche bei ihren Anlageentscheidungen. BÖRSE ONLINE richtet sich gleichermaßen an institutionelle Leser in Banken, Versicherungen, Vermögensverwaltungen und Kapitalanlagegesellschaften sowie an selbstentscheidende, kapitalmarktaffine Privatanleger. • Informiert schwerpunktmäßig über deutsche und internationale Aktien. • Fokussiert die Berichterstattung auf [...] 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 »