Wenn Sie eine Menge Filme, Shows oder andere lokale Videodateien haben und sich nicht entscheiden können, welche Sie ansehen möchten, können Sie Raspberry Pi auf Knopfdruck auswählen lassen. Um fair zu sein, es gibt einfachere Möglichkeiten, ein zufälliges Video abzuspielen, entweder aus lokalen Dateien oder aus dem Internet, aber sie machen nicht so viel Spaß wie dieses Projekt. Also schnapp dir das Popcorn und lass uns anfangen, unseren eigenen zufälligen Raspberry Pi-Videoplayer zu bauen und zu programmieren!
Hardware
Der Aufbau der Schaltung für dieses Projekt ist einfach. Wir benötigen nur drei Tasten, die an den Pins 2,3,4 mit dem GPIO verbunden sind, und jede dieser Tasten muss auch mit GND verbunden sein, dafür können wir einen einzelnen GND-Pin auf dem Pi und ein weibliches zu männliches Überbrückungskabel verwenden . Verbunden mit der – Schiene eines Steckbretts bedeutet, dass wir mehrere GND-Anschlüsse haben, die über die beiden Überbrückungsdrähte von Stecker zu Stecker verbunden werden können. Weitere Informationen finden Sie im Diagramm im Download für dieses Projekt. Wenn die Hardware erstellt ist, schließen Sie alle für Ihren Pi erforderlichen Zubehörteile an und starten Sie den Raspbian-Desktop.
Software
Wie bei den meisten Pi-Projekten müssen Sie, bevor Sie irgendetwas anderes tun, Ihren Raspberry Pi mit einer aktuellen Kopie des Raspbian-Betriebssystems einrichten. Wenn Sie keine dedizierte Tastatur und Maus verwenden möchten, können Sie einen kopflosen Raspberry Pi erstellen, auf den Sie von einem anderen Computer über VNC zugreifen.
Bevor wir Python-Code schreiben können, müssen wir zwei Bibliotheken installieren, die uns beim Erstellen des Projekts helfen. Öffnen Sie ein Terminal und geben Sie Folgendes ein. Denken Sie daran, am Ende jeder Zeile die Eingabetaste zu drücken.
$ sudo pip3 install glob$ sudo pip3 install keyboard
Wir werden später mehr über sie sprechen. Öffnen Sie zunächst den Python 3-Editor im Menü Programmierung und klicken Sie auf Datei >> Neu, um eine neue leere Datei zu erstellen. Klicken Sie im neuen Fenster sofort auf Datei >> Speichern. Speichern Sie den Code als VideoPlayer.py und denken Sie daran, häufig zu speichern!
Also beginnen wir jetzt mit dem Schreiben des Codes, und unsere erste Handlung besteht darin, die Bibliotheken zu importieren, die wir benötigen. Die ersten drei Bibliotheken werden verwendet, um die Tastendrücke zu erkennen (GPIO Zero), den Code daran zu hindern, einmal ausgeführt und beendet zu werden (Pause) und um ein zufälliges Video auszuwählen (Auswahl).
from gpiozero import Buttonfrom signal import pausefrom random import selection
Die letzten drei Importe sind eine Bibliothek, die wir verwenden werden, um den Inhalt eines Verzeichnisses (glob) aufzulisten, Terminalbefehle auszuführen (subprocess) und die letzte ist eine Bibliothek, um eine Tastatur zu emulieren (keyboard.)
import globimport subprocessimport keyboard
Als nächstes erstellen wir drei Funktionen, Codeblöcke, die wir später wiederverwenden können, indem wir ihren Namen aufrufen. Die erste Funktion heißt „play_video“ und erstellt zunächst eine Liste (ein Datenspeicherobjekt) namens „videos“.
def play_video():videos = []
Um die Liste mit Informationen zu füllen, insbesondere eine Liste aller Videos, die wir abspielen können, verwenden wir eine for-Schleife, die über jede Datei in einem Verzeichnis iteriert, solange es sich um eine mp4-Videodatei handelt. Dazu verwenden wir „glob“, um auf das Verzeichnis „/media/pi/Videos“ zuzugreifen, das eigentlich ein USB-Stick namens „Videos“ voller mp4-Dateien ist. Ändern Sie dies so, dass es mit dem Namen Ihres ausgewählten Verzeichnisses voller Videos übereinstimmt. Jedes Mal, wenn eine mp4-Datei gefunden wird, wird sie an die soeben erstellte „Videos“-Liste angehängt.
für Datei in glob.glob(„/media/pi/Videos/*.mp4“): videos.append(file)
Prüfen wir nun, ob die Liste mit Dateinamen gefüllt wurde, indem wir den Inhalt der Liste an die Python-Shell ausgeben.
drucken (videos)
Dann wählen wir ein zufälliges Video aus der Liste und speichern es in einer Variablen namens „ausgewählt“, wieder geben wir dies an die Python-Shell aus.
Dann wählen wir ein zufälliges Video aus der Liste und speichern es in einer Variablen namens „chosen“, wieder geben wir dies an die Python-Shell aus selected = choice(videos) print(chosen) print(chosen)
Die letzte Zeile in dieser Funktion verwendet die Popen-Klasse aus der Unterprozessbibliothek, um einen Befehl auszuführen, als ob wir am Terminal säßen, und dieser Befehl dient dazu, den omxplayer-Mediaplayer zu öffnen und dann das ausgewählte Video abzuspielen.
subprocess.Popen([‚omxplayer‘,(ausgewählt)])
Die nächste Funktion heißt „stop_video“ und stoppt, wie Sie sich denken können, das aktuell abgespielte Video. Dazu verwenden wir die Tastaturbibliothek, insbesondere die Funktion „press_and_release“, um das Drücken der Taste „q“ zu simulieren.
def stop_video(): keyboard.press_and_release(‚q‘)
Die letzte Funktion heißt „pause_video“ und emuliert das Drücken der Leertaste auf der Tastatur, wodurch omxplayer das Video anhält.
def pause_video(): keyboard.press_and_release(’space‘)
Mit den erstellten Funktionen müssen wir als nächstes unserem Code mitteilen, wo unsere Schaltflächen verbunden sind. Wir haben drei Schaltflächen verbunden, Randomizer (Play), Stop und Pause_Button. Diese Tasten sind mit dem GPIO an den Pins 2, 3 und 4 verbunden.
randomizer = Taste(2)stop = Taste(3)pause_button = Taste(4)
Ok, also weiter zum letzten Teil, und das ist der Teil, der sucht, wenn eine Taste gedrückt wird, und entsprechend reagiert. Aber zuerst packen wir diesen Abschnitt in einen Exception-Handler. Es wird versucht, den Code auszuführen, aber wenn der Benutzer STRG + C drückt, wird der Code beendet. Für den Try-Abschnitt gibt unser Code also zuerst drei Zeilen an die Shell aus, dies sind die Anweisungen für den Benutzer. Sie werden ein „n“ zwischen jeder Farbe bemerken. Dies ist eine Python-Kurzschrift zum Einfügen einer neuen Zeile zwischen den einzelnen Anweisungen.
try: print(„Drücke die GRÜNE Taste zum StartennGELB zum PausierennROT zum Stoppen“)
Unsere drei Tasten warten darauf, gedrückt zu werden, und unter Verwendung der GPIO Zero-Bibliothek rufen wir die „when_pressed“-Klasse auf, um zu erkennen, wann jede der Tasten gedrückt wird. In diesem Fall wird die entsprechende Funktion ausgeführt. Wenn wir also die grüne Zufallstaste (Wiedergabe) drücken, wird zufällig ein Video vom USB-Stick ausgewählt und abgespielt. Sie werden feststellen, dass die Funktionen kein () am Ende des Funktionsnamens haben. Denn wenn dies der Fall wäre, würde der Code automatisch ausgeführt. Im Moment sind sie bereit, auf Abruf zu laufen.
randomiser.when_pressed = play_video stop.when_pressed = stop_video pause_button.when_pressed = pause_video
Die letzte Zeile in diesem Abschnitt ist ein einfaches pause(), das verwendet wird, um den Code am Laufen zu halten und nicht nur nach einmaliger Ausführung zu beenden.
Pause()
Aber was passiert, wenn der Benutzer STRG + C drückt? Nun, dies ist ein „Keyboard Interrupt“, und wenn das auftritt, drucken wir einfach eine leere Zeile und dann „Exit“ auf dem Bildschirm.
außer KeyboardInterrupt: print(„nEXIT“)
Speichern Sie also jetzt Ihren Code und öffnen Sie ein Terminal für das Verzeichnis, in dem Sie den Code gespeichert haben. Um den Code verwenden zu können, müssen wir ihn mit sudo (root powers) ausführen, da die im Projekt verwendete Tastaturbibliothek nur als root / sudo verwendet werden kann.
Um den Codetyp auszuführen:
$ sudo python3 VideoPlayer.py
Wenn Sie fertig sind, drücken Sie die grüne Taste, um das zufällig ausgewählte Video abzuspielen, drücken Sie die gelbe Taste, um es anzuhalten, und die rote Taste, um es zu stoppen. Genießen Sie Ihren Abend und verschütten Sie nicht das Popcorn!
Sie können das Projekt in eine robuste Box einbetten, damit kleine Hände die Elektronik nicht beschädigen. Sie können auch Tasten im Arcade-Stil verwenden, die weitaus robuster sind und weniger wahrscheinlich kaputt gehen.
Der vollständige Code
Wenn Sie den Inhalt einfach kopieren und in die Datei VideoPlayer.py einfügen möchten, hier ist er:
from gpiozero import Buttonfrom signal import pausefrom random import choiceimport globimport subprocessimport keyboarddef play_video(): videos = [] for file in glob.glob(„/media/pi/Videos/*.mp4“): videos.append(file)print( videos)chosen = choice(videos) print(chosen) print(chosen)subprocess.Popen([‚omxplayer‘,(chosen)]) def stop_video()keyboard.press_and_release(‚q‘)def pause_video()keyboard.press_and_release( ’space‘)randomiser – Button(2)stop = Button(3)pause_button = Button(4)try:print(„Drücken Sie die GRÜNE Taste zum StartennGELB zum PausierennROT zum Stoppen“)randomiser.when_pressed = play_videostop.when_pressed = stop_videopause_button.when_pressed = pause_video pause()außer KeyboardInterrupt: print(„nEXIT“)Tastaturbibliothek und Datenschutz
In diesem Projekt haben wir die Keyboard Python-Bibliothek verwendet, um eine Tastatur zu emulieren, indem wir nur die Drucktasten verwenden, die das Abspielen, Anhalten und Stoppen der Videowiedergabe steuern. Die Tastaturbibliothek ist ziemlich leistungsfähig und kann verwendet werden, um beliebige Tasten zu drücken, sodass wir mehrere Tastendrücke mit einem Druckknopf automatisieren können (praktisch zum Beenden von vim). Die Bibliothek kann auch verwendet werden, um Text auf den Bildschirm zu schreiben, in a ähnlich wie Neos „Folge dem weißen Kaninchen“-Szene aus The Matrix. Die gefährlichste Funktion dieser Bibliothek besteht jedoch darin, dass sie verwendet werden kann, um jeden Tastendruck auf dem Zielcomputer aufzuzeichnen.
Diese Tastendrücke können in einer Liste aufgezeichnet, dann in einer Datei gespeichert und dann für schändliche Zwecke verwendet werden. Lassen Sie uns also klar sein, Kinder, Erwachsene. Das Aufzeichnen der Tastendrücke eines Benutzers ohne dessen Zustimmung ist illegal und kann Sie in eine Menge Ärger mit Schule / Arbeit / Behörden bringen. Also tu es nicht! Abgesehen davon kann es als leistungsstarkes Tool zum Debuggen verwendet werden, wie ein Benutzer mit Ihrem Code interagiert, sodass Sie beim Softwaretesten (unter Zustimmung der Öffentlichkeit und der internen Tester) sehen können, welche Tasten sie direkt vor dem Code gedrückt haben eingesperrt / wurde thermonuklear!
Die Tastaturbibliothek funktioniert mit Linux und Windows und es macht viel Spaß, damit zu spielen. Um mehr über diese Bibliothek zu erfahren, gehen Sie zu diesem Blogbeitrag https://bigl.es/tuesday-tooling-record-replay-keystrokes-with-python/ und sehen Sie sich einige Beispiele an, wie sie verwendet werden kann.
Dieser Artikel erschien ursprünglich im Linux Format Magazine.