Hi @ all,
Tjoar, ich hab auch einfach mal Lust, mein Bastelobjekt vorzustellen :
Ausgangssituation
Vorhandene Hardware:
- Raspberry Pi Modell B + Netzteil
- Watterott 2,8'' Touch-Display
Mein Ziel war es, eine Art „Framework“ für den Raspberry zu programmieren, um mit wenig Aufwand eine touchfähige Oberfläche programmieren zu können.
Beim Hochfahren des Raspis sieht man, ca. 10-15 Sekunden nach dem Hochfahren, folgendes Bild:
Ehe ich mich versah, habe ich damit nun eine Steuerzentrale geschaffen, um nur mit dem Raspberry + Touchdisplay + Netzteil sämtliche Dienste mit nur einem Fingerzeig starten und beenden zu können.
Mal ein „richter“ GUI-Screenshot:
Um zu sehen, wie das „Framework“ im Einsatz funktioniert, hier ein Ausschnitt des Quellcodes für diese drei GUI-Elemente. Als Programmiersprache kam dabei Python zum Einsatz, als grafische Oberfläche wird Tkinter verwendet:
Spoiler anzeigen
import pitouch
def main(p):
p.gen_grid(3, 3)
p.locate(0, 0)
p.set_text("Benutzerdefinierte\nAnwendungen")
p.set_bgcolor("#88ff88")
p.set_nextcommand(user_apps)
p.locate(2, 0)
p.set_text("System-\nEinstellungen\nändern")
p.set_bgcolor("#88ff88")
p.set_nextcommand(systemsettings)
p.locate(2, 2)
p.set_text("Raspberry Pi\nherunterfahren")
p.set_bgcolor("#ff8888")
p.set_nextcommand(rpi_shutdown)
def user_apps(p):
# [... weiterer Quellcode ...]
def systemsettings(p):
# [... weiterer Quellcode ...]
def rpi_shutdown(p):
# [... weiterer Quellcode ...]
if __name__ == "__main__":
p = pitouch.pitouch()
main(p)
p.mainloop()
Alles anzeigen
Ziemlich selbsterklärend, oder? Bevor ich aber zu sehr selbstgefällig werde: Der eigentliche Quellcode hinter dem Modul „pitouch“ (da liegt das „Framework“ für die GUI) sieht ziemlich „hingehackt“ aus und ist alles andere als sauber. Mich solls dennoch nicht stören, da es für meine Verhältnisse einfach funktioniert^^.
Noch ein Screenshot, diesmal an der Stelle, wenn man „Systemeinstellungen“ auswählt:
Ich denke, spätestens jetzt kann man langsam erahnen, was ich alles damit steuern kann
Das Schöne ist, dass ich mir in Python natürlich sämtliche Abfragen schnappen und in andere (Linux-)Befehle koppeln kann; selbst die Erstellung der Buttons kann ich, wie es sich für eine nützliche Programmiersprache gehört, an Bedingungen knüpfen (z.B. ob der Samba-Server, der für die Dateifreigabe zuständig ist, schon läuft – dann wäre die Schaltfläche rot und als Text stünde dort stattdessen „Freigabe beenden“...)
---
Als weitere Herausforderung habe ich auch eine USB-Kamera angeschlossen, die mit einem Klick (auch das Touch-Display) das Bild in 20fps auf das kleine Touch-Display überträgt, Mplayer sei Dank – und bei einem weiteren Klick beendet sich Mplayer auch wieder (was allerdings in einer Mplayer-Konfigurationsdatei eingestellt werden muss).
---
Wie habe ich das alles konfiguriert, dass die grafische Oberfläche startet? Zuerst habe ich eingestellt, dass der Benutzer root automatisch eingeloggt wird (ich nutze Archlinux auf dem RPi und habe diese Anleitung dazu benutzt. Unter Raspbian ist die Vorgehensweise aber definitiv anders...)
(Warum ausgerechnet Benutzer root, der auf „alles“ Zugriff hat? Ich gebs offen und ehrlich zu: Bequemlichkeit. Ich hatte keine Lust mich darum zu kümmern, welche Rechte erforderlich sind, um das Datum einstellen zu können (was auf meiner programmierten GUI möglich ist). Da der RPi sowieso nicht direkt im Internet verbunden und in einer sicheren Umgebung ist, sollten die Sicherheitsbedenken trotzdem minimal sein...)
Danach habe ich eine Datei im Homeverzeichnis namens .bash_login (inkl. dem führenden Punkt) erstellt mit folgendem Inhalt:
(Mein Skript läuft derzeit nur unter Python Version 2.x... In Archlinux heißt die dafür zuständige Binary auch „python2“, während sie unter Raspbian „python“ heißt!)
Die Datei habe ich in einer Linux-Konsole auch noch ausführbar gemacht:
Sowohl mein programmiertes „Framework“ als auch der vorher gepostete Code liegt im Homeverzeichnis von Benutzer root unter „pitouch“.
Danach habe ich noch erforderliche Pakete installiert, um auch Bilder in der GUI darstellen zu können (nochmal erwähnt, unter Arch!)
Nach einem Neustart lief dann alles so, wie ich es wollte!
Alles mit der GUI verbundene (z.B. Mplayer, die Samba-Freigabe und das Mounten des USB-Sticks) mussten natürlich auch konfiguriert werden, aber das ist so umfangreich, dass man dafür eigene Beiträge verfassen müsste^^.
---
Tjoar... Falls jemand Interesse am Quellcode hat, ich stelle ihn mal hier rein:
Spoiler anzeigen
ACHTUNG: Ich weise explizit darauf hin, dass der Quellcode alles andere als „sauber“ ist, das heißt: Es fehlen u.a. Fehlerbehandlungen und es wurde nicht auf irgendwelche Spezialausnahmen geachtet. Die Verwendung des Quellcodes geschieht auf eigene Gefahr, ich bin nicht für Schäden, ob direkt oder indirekt mit dem Quellcode verursacht, verantwortlich! (Ich würde die Funktion „USB-Stick formatieren“ sein lassen, wenn eine USB-Platte angeschlossen ist!)
Ein Hinweis noch: Das Starten und Beenden von Diensten und der Shutdown des RPi wurden - wieder - für Archlinux ausgelegt. Das Haupt-"Framework" pitouch.py sollte zwar auch unter Raspbian einwandfrei laufen, ich glaube aber kaum, dass das bei main.py der Fall sein wird^^. (Vermutung: Auf Raspbian wird die main.py zwar laufen, aber gefühlt 90% der Schaltflächen werden nicht funktionieren...)
Downloadlink:
pitouch-2016-03-16.zip
Tjoar²... Ich mag einfach die Tatsache, dass ich mal eben die wichtigsten Dienste einstellen und konfigurieren kann, ohne dass ich gleich eine Tastatur oder ein LAN-Kabel anschließen und PuTTy anwerfen muss.
EDIT: Einfach weil ich Lust darauf habe, ein aktueller Screenshot vom 20.01.2016 - ich arbeite gerade an eine Art "USB-Virenscanner für Unterwegs", dessen Imagedatei ich bei Bedarf zum Download anbieten werde. Die GUI sieht momentan so aus: