Videostation mit dem Raspberry Pi

Eine Station, auf der einfach nur ein Video abgespielt werden soll, lässt sich sehr einfach mit einem Raspberry Pi verwirklichen. Wir brauchen:

  • Raspberry Pi (z.B. Modell 4)
  • Mikro-SD-Karte mit Raspberry Pi OS (Desktop-Version empfohlen)
  • Taster oder Schalter
  • Kabel zur Verbindung mit den GPIO-Pins
  • Ein Video und eine Bilddatei

Zuerst stellen wir sicher, dass der Raspberry Pi aktuell und alle nötigen Pakete installiert sind. Wir nutzen feh und vlc, diese müssen ggf. seperat installiert werden. Dazu geben wir in den bash die folgenden Befehle ein:

sudo apt update && sudo apt upgrade -y

Dann installieren wir die benötigten Tools:

sudo apt install vlc feh python3-rpi.gpio

Dann aktivieren wir die GPIO-Schnittstelle:

sudo raspi-config

„Interface Options“ → „GPIO“ → „Enable“

Den Raspberry Pi danach einmal neu starten:

sudo reboot

Wir verbinden den Taster folgendermaßen mit den GPIO-Pins:

SchalterPin am Raspberry Pi
Eine SeiteGPIO17 (Pin 11)
Andere SeiteGND (Pin 9)

Jeder andere GPIO ist auch möglich, im Netz sind viele Pinouts zu finden. Wichtig ist, dass wir den GPIO durch den Taster gegen GND schalten, um dem Rechner das Signal zu geben.

Jetzt erstellen wir das Script. Dieses steuert unsere Videostation. Wir geben in der bash ein:

nano start_video.py

Und fügen den folgenden Code ein:
import RPi.GPIO as GPIO
import os
import time
import subprocess

BUTTON_PIN = 17
IMAGE_PATH = "/Pfad/zum/Standbild.png"
VIDEO_PATH = "/Pfad/zum/Video.mp4"

# GPIO-Setup
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

def show_image():
    print("Zeige Standbild mit feh...")
    os.system(f"feh --fullscreen --hide-pointer {IMAGE_PATH} &")

def start_video():
    print("Starte Video...")
    os.system(f"cvlc --fullscreen --no-video-title-show --loop {VIDEO_PATH} &")

def stop_video():
    print("Beende Video...")
    os.system("pkill vlc")

def toggle_video():
    if subprocess.run(["pgrep", "-x", "vlc"]).returncode == 0:
        stop_video()
    else:
        start_video()

try:
    # Zeige Standbild beim Start
    show_image()
    print("Warte auf Tastendruck...")
    button_pressed = False
    
    while True:
        if GPIO.input(BUTTON_PIN) == GPIO.LOW:
            if not button_pressed:
                print("Schalter gedrückt!")
                toggle_video()
                button_pressed = True
        else:
            button_pressed = False

        time.sleep(0.1)

except KeyboardInterrupt:
    print("\nBeende Skript...")
    GPIO.cleanup()
    stop_video()

Dabei müssen die Pfade zu Bild und Video sowie ggf. der GPIO angepasst werden. Durch

python3 start_video.py

wird die Station gestartet. Dieses kann man auch in den Autostart packen, dann muss man nach einem Neustart nichts weiter tun! Viel Erfolg!