Hörspielland Play - Die DIY-Hörspiel-Box

Auf der Suche nach einem einfach zu bedienenden Abspieler für Hörspiele bin ich auf das TonUINO-Projekt von Thorsten Voß gestoßen. Ein tolles Projekt basierend auf einem Arduino Nano. Nachdem ich mehrere Boxen danach gebaut habe, und diese täglich und gerne verwendet werden, habe ich mich an eine Box gemacht, die auf einem Raspberry Pi Zero basiert. Warum? Hier stelle ich die Vor- und Nachteile gegenüber:

TonUINO Hörspielland Play
  • einfache Bedienung mit RFID-Karten
  • wenige Bauteile
  • sehr geringer Stromverbrauch
  • keine Programmierkenntnisse nötig
  • funktioniert direkt mit passiven Lautsprechern
  • sehr günstig
  • maximal 32 GB
  • kein Streaming
  • kein Vor- und Zurückspulen
  • keine Anzeige des aktuellen Titels
  • kein Zugriff per Smartphone
  • einfache Bedienung mit RFID-Karten
  • WLAN: zusätzliche Bedienung via Smartphone
  • zusätzlich Streaming mit Spotify
  • keine Begrenzung des Speicherplatzes (>32 GB)
  • wenige Bauteile
  • geringer Stromverbrauch
  • Vor- und Zurückspulen
  • Anzeige des aktuellen Titels
  • günstig
  • mehr PC-Kenntnisse erforderlich: einrichten von Software via SSH-Terminal
  • funktioniert mit aktiven Lautsprechern; für passive Lautsprecher wird ein Verstärker-Baustein benötigt

Was sind passive und aktive Lautsprecher?
Passive Lautsprecher sind z.B. die Boxen einer Stereoanlage. Die Lautsprecher werden am Verstärker angeschlossen. Sie benötigen keine Stromversorgung.
Aktive Lautsprecher haben einen Verstärker bereits eingebaut. PC-Lautsprecher, die an eine 3,5"-Klinkenbuchse angeschlossen werden, sind aktive Lautsprecher.

Nötiges Material

  • Raspberry Pi Zero oder auch Pi3 oder Pi4
    (Der Pi Zero ist deutlich günstiger und reicht für diesen Zweck aus)
  • RFID-Reader und RFID-Karten
  • Verbindungskabel (Stecken, kein Löten)
  • 3 Taster (mit Löten)
  • Lautsprecherboxen (aktiv oder passiv mit Zusatzmodul, siehe unten)

Der Pi Zero ist zwar günstig, hat aber keinen Audio-Ausgang. Dafür kann eine kleine Schaltung angefertigt werden. Das ist nicht schwierig. Wer löten kann, schafft das schnell. Der Preis ist unschlagbar. Wer das nicht möchte, kann z.B. auf das HiFi-Berry-Modul zurückgreifen, aber dann lohnt sich preislich schon der Griff zum Pi3 oder Pi4, die einen 3,5"-Klinkenbuchse als Audio-Ausgang bereits haben. Also ergeben sich folgende Möglichkeiten:

Für Pi Zero mit passivem Lautsprecher:

Für Pi Zero mit aktivem Lautsprecher: Für Pi3 oder Pi4 mit aktivem Lautsprecher:
  • kein weiteres Material

Diese Arbeitsschritte führen zur Hörspielland-Play-Box

Pi einrichten

  1. Raspbian Buster Lite als Image von https://www.raspberrypi.org/downloads/raspbian/ herunterladen und mit Win32DiskImager auf eine SD-Karte installieren.
  2. Nur Pi Zero: Bevor die SD-Karte in den Pi kommt, noch folgender Schritt damit wir auf den Pi Zero auch ohne Monitor und Tastatur zugreifen können. Dafür muss SSH aktiviert und WLAN eingerichtet werden. Deshalb folgende zwei Dateien auf der /boot-Partition der SD-Karte anlegen: ssh (Dies ist eine leere Textdatei ohne Dateiendung)
    wpa_supplicant.conf Eine Textdatei mit folgendem Inhalt:
        country=DE
        ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
        update_config=1

        network={
        ssid=""
        psk=""
        key_mgmt=WPA-PSK
        }
  3. Jetzt die SD-Karte in den Pi einlegen und den Pi starten.
  4. Jetzt sollte sich der Pi im WLAN anmelden, also im Router nach der IP-Adresse des Pis suchen. Dafür sorgen, dass der Pi immer die gleiche IP vom Router bekommt und eine SSH-Verbindung zum Pi aufbauen. Die Standard-Zugangsdaten eines Raspberry Pi sind Benutzername: pi und Passwort: raspberry.
  5. Kurz für die Bequemlichkeit :-) Damit der Befehl ll funktioniert:
    sudo pico /etc/bash.bashrc
    Folgendes hinzufügen: alias ll='ls -l'
    Der Alias funktioniert erst, nachdem die SSH-Sitzung neu begonnen wurde!

Zugriff auf GPIO einrichten

  1. Falls der Komandozeilen-Befehl gpio nicht funktioniert:
    sudo apt-get install wiringpi
  2. Mit gpio readall die Ein- und Ausgänge überprüfen.

RFID-Kit RC522 am Pi anschließen

  1. Verdrahten des RFID-Kartenlesers (Mifare RC522) nach Schaltplan:


    Pin-Belegung:
    RC522 HeaderDiagram ColourPi HeaderNotes
    3.Grey13.3V
    RSTWhite22GPIO25
    GNDBlack6Ground
    IRQNot connected
    MISOPurple21GPIO9
    MOSIBlue19GPIO10
    SCKGreen23GPIO11
    SDAYellow24GPIO8
  2. Die SPI-Schnittstelle einschalten:
    sudo raspi-config
    Interfacing Options / SPI / YES
    sudo reboot
  3. Mit lsmod | grep spi kontrollieren, ob 'spi_bcm2835' aufgeführt wird.

Einrichten der nötigen Software

Das Programm für den Hörspielland-Play ist in Python3 geschrieben und nutzt als Musik-Server mopidy. Es muss also Python3 und weitere nötige Erweiterungen installiert werden:

  1. Zum Ansteuern der Taster. Es sind auch Taster mit eingebauter LED möglich:
    sudo apt-get install python3-gpiozero
  2. Um die Software für den RFID-Leser installieren zu können, wird pip benötigt:
    sudo apt-get install python3-dev python3-pip
  3. Python Library spidev über pip installieren:
    sudo pip3 install spidev
  4. MFRC522 library installieren:
    sudo pip3 install mfrc522

Um das Lesen und Schreiben von RFID-Karten zu testen, sind im HLP-Software-Paket zwei Test-Skripte dabei:
mit python3 Write.py und python3 Read.py kann der Zugriff auf die RFID-Karten probiert werden.

  • mkdir ~/pi-rfid
    cd ~/pi-rfid
    sudo nano Write.py
  • #!/usr/bin/env python

    import RPi.GPIO as GPIO
    from mfrc522 import SimpleMFRC522

    reader = SimpleMFRC522()

    try:
        text = input('New data:')
        print("Now place your tag to write")
        reader.write(text)
        print("Written")
    finally:
        GPIO.cleanup()
  • Zweites Programm zum Lesen einer RFID-Karte:
    sudo pico Read.py
  • #!/usr/bin/env python

    import RPi.GPIO as GPIO
    from mfrc522 import SimpleMFRC522

    reader = SimpleMFRC522()

    try:
        id, text = reader.read()
        print(id)
        print(text)
    finally:
        GPIO.cleanup()
  • Testen von RFID: Zuerst sudo python3 Write.py ausführen und nach Aufforderung von 'New data' einen Beispieltext eingeben, z.B. 'Hörspielland' Wenn jetzt eine RFID-Karte an den RC522 gehalten wird, wird der Text auf der Karte gespeichert.
  • Dann sudo python3 Read.py ausführen. Erneut die Karte an das Lesegerät halten und es sollte die ID der Karte und der Beispieltext ausgegeben werden. Glückwunsch!

Hardware herstellen

Ein Blick auf die Verdrahtung und den Schaltplan, sollte nicht abschrecken. Auf der Gesamtübersicht sind alle Abschnitte enthalten: Taster, LEDs der Taster, OLED-Display, RFID-Reader und die Schaltung für den Audio-Ausgang des Pi Zero.

Das ist mehr als man braucht. Eine mögliche minimale Ausstattung wäre z.B. ein Pi3 oder 4, drei Taster und der RFID-Reader. Das reicht vollkommen aus. Alles weitere kommt nur aus Spaß an der Freude dazu. So machen beleuchtete LED-Taste schlicht Fun und geben ein nettes Feedback beim Auflegen einer Karte und beim Drücken einer Taste. Das OLED-Display zeigt folgendes grafisch an: die Lautstärke, aktuelle Position des Hörspiels (Minuten:Sekunden), aktueller Titel (Serie / Folge) und Status (Play/Pause). Da das OLED-Display einen Preis von unter 5 EUR hat und hier mit wenigen Verbindungskabeln nur gesteckt wird, ist es ein einfach anzuschließendes Gimmick. In eine vorhande Lautsprecher-Box mit Stoffbespannung lässt sich das Display einfach unter der Bespannung einbauen - kleben reicht aus. Da die Lesbarkeit durch den Stoff nicht optimal ist, habe ich die Grafiken reduziert und möglichst groß gemacht, damit auch durch den Stoff hindurch die Anzeige noch top lesbar ist. Nur die Anzeige von Serie und Folge bleiben klein, da es hier ja auf den Inhalt ankommt.

Taster oder LED-Taster RFID OLED

Audio für Pi Zero GPIO-Pin-Belegung

Varianten für die Soundausgabe

Um dem Pi Zero einen Audio-Ausgang zu verpassen gibt es mehrere Varianten:

Variante 1

Vorteil:

  • Kein weiteres Löten erforderlich, Karte wird auf den Zero aufgesteckt und hat Pins um die weitere Verdrahtung (RFID-Reader, OLED etc.) zu stecken.
  • Hat einen Kopfhörerausgang
  • Kann direkt passive Lautsprecher ansteuern (je Kanal 1 W bei 8 Ohm). Zum Hörspielhören optimal.

Variante 2

  • Pi Zero
  • DIY Audio-Ausgang

Vorteil:

  • preisgünstig
  • wenige Bauteile müssen zu einer kleinen Schaltung verlötet werden
  • Auf dem Zero muss die Ansteuerung eingerichtet werden.
  • ergibt einen Kopfhörerausgang, an den auch ein aktiver Lautsprecher angeschlossen werden kann

Arbeitsschritte für Variante 1:

  • WM8960 Audio HAT auf den Pi aufstecken
  • Treiber installieren:
    sudo apt-get update
    sudo apt-get install git
    git clone https://github.com/waveshare/WM8960-Audio-HAT
    cd WM8960-Audio-HAT
    sudo ./install.sh

    abwarten bis die vollständige Installation abgeschlossen ist.
    sudo reboot
  • Mit dkms status prüfen, ob die Soundkarte korrekt installiert wurde.
  • Mit sudo alsamixer die Lautstärker für den Speaker L und R auf 100% setzen, damit die Lautstärker über die Software gesteuert werden kann.
    Mit F6 die Soundkarte auswählen.
  • Die default Soundkarte auswählen:
    sudo pico /usr/share/alsa/alsa.conf

Arbeitsschritte für Variante 2:

Da der Pi Zero keinen Audio-Ausgang hat, muss für diesen Pi noch eine kleine Schaltung angefertigt werden. Wenn du einen anderen Pi mit Audioausgang verwendest, kannst du diesen Punkt überspringen.

Die Signale für die sonst vorhandene 3,5"-Klinken-Buchse werden auf GPIO-Pins umgeleitet.

  • Folgende Schaltung aufbauen:

    Verwendet wird ein 10 nF (= 0,01µF) und ein 33 nF (oder 10µF) und 270 Ohm und 150 Ohm und eine 3,5"-Klinken-Stereo-Buchse.
  • Die Schaltung mit den GPIO-Pins des Pis verbinden:
    Angeschlossen an die GPIO-Pins des Pis: GND und GPIO 18 und GPIO 13 (GPIO-Nr. nicht Pin-Nr.!)
    Board-Pins GPIO Nr.
    12 GPIO18
    33 GPIO13
    34 GND

Im Pi müssen noch folgende Software-Einstellungen vorgenommen werden:

  • sudo pico /boot/config.txt
    Folgendes eintragen, falls es nicht schon vorhanden ist:
    # Enable audio (loads snd_bcm2835)
    dtparam=audio=on
    dtoverlay=pwm-2chan,pin=18,func=2,pin2=13,func2=4
  • sudo raspi-config
    Advanced Options / Audio / Force 3.5mm ('headphone') jack
  • Danach mit sudo reboot den Pi neu starten.
  • Lautstärke mit sudo alsamixer auf 100 % einstellen.
  • Zum Test eine Audio-Datei abspielen:
    aplay /usr/share/sounds/alsa/Front_Center.wav
  • Mit sudo alsactl store die Einstellungen des Alsamixer speichern, damit sie nach einem Reboot bestehen bleiben.

Audioserver Mopidy installieren

  • sudo apt-get install mopidy
    sudo apt-get install mopidy-mpd
  • Damit Mopidy als Service beim Booten automatisch gestartet wird:
    sudo dpkg-reconfigure mopidy
    YES auswählen
  • Prüfen, ob mopidy bereits läuft:
    sudo service mopidy status
  • Falls Mopidy nicht läuft, oder falls der Server mal manuell gestartet werden muss, kann das mit folgenden Befehlen geschehen:
    sudo service mopidy start
    sudo service mopidy stop
    sudo service mopidy restart
  • Mit mopidy --version die Verison des Mopidy-Servers überprüfen. Es dauert etwas bis dieser Befehl eine Antwort gibt. Die Version 2.2.2 hat einen Bug, da MP3-Dateien in der Playlist mit unterschiedlicher Bitrate nicht abgespielt werden können. Die Playlist hängt oder der Ton ist furchtbar. Die Version sollte > 3 sein.

  • Aus dem Software-Paket (siehe unten) das Verzeichnis Hoerspielland-Play inkl. aller Unterverzeichnisse in das Verzeichnis /home/pi kopieren.
  • Damit Mopidy auf die MP3-Dateien zugreifen kann:
    sudo chown mopidy:pi /home/pi/Hoerspielland-Play/HLP-Admin
    sudo chown mopidy:pi /home/pi/Hoerspielland-Play/HLP-Audio

Client für den Audioserver installieren

  • sudo apt-get install mpc
  • mpc zum Testen eingeben
    "volume:100% repeat: off random: off single: off consume: off"
    zeigt, dass der Mopidy-Server läuft und über mpc erreichbar ist. Perfekt!

OLED-Display einrichten

Als weiteres Gimmick habe ich zusätzlich ein kleines OLED-Display verwendet. Das Skript unterstützt das Display und zeigt dort den aktuellen Titel an. Notwendig ist das OLED-Display aber nicht. Wird es verwendet, muss im Skript Hoerspielland-Play.py die Variable WithOLEDDisplay = True gesetzt werden.

  • Display anschließen:
    OLED-Display: Pin 3 (I2C), Pin 4 (5V), Pin 5 (I2C), 9 (GND)
  • sudo raspi-config
    Unter Interfacing Options / I2C I2C aktivieren.
  • sudo apt-get install python3-smbus i2c-tools git python3-pil
    sudo reboot
  • Mit i2cdetect -y 1
    den korrekten Anschluss des Displays überprüfen und die Adresse erfahren. Standard-Adresse ist 0x3C
  • - Folgender Punkt kann übersprungen werden, da das Skript bereits im Download-ZIP für den Hörspielland-Play enthalten ist. -
    Mit cd /home/pi/Hoerspielland-Play in das Verzeichnis des Skripts gehen. git clone https://github.com/BLavery/lib_oled96

Webserver installieren, damit per WebApp auf den Player zugegriffen werden kann

Über die WebApp kann die Hörspielland-Play-Box gesteuert werden.
Zusätzlich wird ein Cover und ein direkter Link zur Detailseite von Hörspielland.de angezeigt. Die Programmierung der RFID-Karten kann sehr einfach mit gesprochenen Anweisungen direkt an der Box erfolgen. In der WebApp kann diese Programmierung kontrolliert und auch bearbeitet werden.

  1. sudo apt-get install php
    Damit wird auch der Webserver installiert. Sollte das nicht der Fall sein, dann mit sudo apt-get install apache2 den Webserver nachinstallieren.
  2. Mit
    sudo chown root:pi /var/www/html dem Benutzer pi ins Spiel bringen und mit
    sudo chmod g+w /var/www/html dem Benutzer pi Schreibrechte geben, um über SFTP Dateien in das Verzeichnis kopieren zu können.
  3. In das Verzeichnis /var/www/html können alle Dateien aus dem Verzeichnis Hörspielland-Play-WebApp kopiert werden.
  4. Die IP des Pis oder raspberrypi.local im Browser aufrufen und sehen, ob die WebApp bereits funktioniert.
  5. Damit über die WebApp die Datenbank der RFID-Karten bearbeitet werden kann:
    sudo chmod o+w /home/pi/Hoerspielland-Play/HLP-RFID-Database.txt

Python-Skript als Dienst im Hintergrund ausführen

Das Skript soll automatisch beim Booten des Pi gestartet werden, damit die Hörspiel-Play-Box sofort funktioniert, wenn die Stromversorgung angeschlossen wird. Dafür lassen wir das Python-Skript als Dienst starten.

  1. Damit der Dienst als root eingerichtet wird:
    sudo su
  2. pico /lib/systemd/system/hslplay.service

    Datei mit folgendem Inhalt anlegen:
    [Unit]
    Description=Hoerspielland Play
    After=mopidy.service

    [Service]
    User=root
    Group=root
    Nice=-5 WorkingDirectory=/home/pi/Hoerspielland-Play
    ExecStart=python3 /home/pi/Hoerspielland-Play/Hoerspielland-Play.py
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target
  3. Mit systemctl enable hslplay.service einen symbolischen Link anlegen lassen und so dafür sorgen, dass der Dienst beim Booten automatisch gestartet wird.
  4. Mit systemctl start hslplay.service den Dienst starten.
  5. Mit systemctl status hslplay.service kann der Status des Dienstes überprüft werden. Damit werden auch evtl. Fehler bei der Dienstausführung angezeigt.

Hörspiele auf den Pi kopieren

  1. Um den vollen Platz auf der SD-Karte zu nutzen, muss die Karte vom Image erweitert werden:
    sudo raspi-config
    Advanced Options / Expand Filesystem

    Danach das System rebooten mit sudo reboot
  2. Wer nicht die Möglichkeit hat, die Linux-SD-Karte des Pi zu öffnen und die Hörspiele direkt darauf zu kopieren, kann auch die Methode wählen, einen USB-Stick an den Pi anzuschließen:
    1. zuvor unter Windows nachsehen, welches Dateisystem auf dem USB-Stick installiert ist.
    2. an den freien micro-USB-Port ein OTG-Kabel anschließen und einen USB-Stick mit den Hörspielen anschließen
    3. falls nötig, die Treiber für das Dateisystem installieren:
      sudo apt-get -y install ntfs-3g hfsutils hfsprogs exfat-fuse
    4. Ein Verzeichnis erstellen, in welches der Stick gemountet werden kann:
      sudo mkdir /media/usbstick
    5. mit ll /dev nachsehen, ob sda (USB-Stick) oder auch hd (externe Festplatte) vorhanden ist. Evtl. auch sda1 oder hd1.
    6. USB-Stick einbinden:
      FAT32
      sudo mount -t vfat -o utf8,uid=pi,gid=pi,noatime /dev/sda1 /media/usbstick
      NTFS
      sudo mount -t ntfs-3g -o utf8,uid=pi,gid=pi,noatime /dev/sda1 /media/usbstick
      HFS+
      sudo mount -t hfsplus -o utf8,uid=pi,gid=pi,noatime /dev/sda1 /media/usbstick
      exFAT
      sudo mount -t exfat -o utf8,uid=pi,gid=pi,noatime /dev/sda1 /media/usbstick
      ext4
      sudo mount -t ext4 -o defaults /dev/sda1 /media/usbstick
    7. Dann mit sudo cp -r /media/usbstick/* /home/pi/Hoerspielland-Play/HLP-Audio/* alle Verzeichnisse auf dem Stick ins Audio-Verzeichnis kopieren.

Es ist natürlich auch Möglich alle Hörspiele auf dem USB-Stick zu belassen. So können die Hörspiele leichter geändert oder ergänzt werden. Dafür müssen die Hörspiele im Hauptverzeichnis des USB-Sticks liegen. Dann kann der Stick direkt in das Abspielverzeichnis des Hörspielland Play gemountet werden:
sudo mount -t vfat -o utf8,uid=root,gid=root,noatime /dev/sda1 /home/pi/Hoerspielland-Play/HLP-Audio
Damit der USB-Stick nach einem Reboot sofort zur Verfügung steht, kann folgende Zeile in die CronTab eingetragen werden: sudo crontab -e
@reboot mount -t vfat -o utf8,uid=root,gid=root,noatime /dev/sda1 /home/pi/Hoerspielland-Play/HLP-Audio

Spotify ermöglichen

Der Mopidy-Server kann mit Spotify verbunden werden, dadurch können RFID-Karten z.B. mit einer Hörspiel-Serie verknüpft werden, die dann von Spotify gestreamt werden kann.

Da eine Playlist auf Spotify keine Alben, sondern nur Tracks enthalten kann und ein Hörspiel immer als Album mit Tracks angeboten wird, sind "besondere" Playlisten nötig. Da kommt hörspielland.de ins Spiel. Auf hörspielland.de sind Links zu den Alben auf Spotify hinterlegt. Die RFID-Karten können mit den speziellen Playlisten, die von hörspielland.de zur Verfügung gestellt werden, verknüpft werden. Der Vorteil ist, dass die Links immer aktuell sind. Bei jedem Auflegen einer RFID-Karte wird die aktuelle Playliste von hörspielland.de geholt. Dadurch werden Neuerscheinungen automatisch hinzugefügt.

Diese Funktion geht nur mit einem Spotify-Premium Account!

Folgende Schritte sind für eine Einbindung von Spotify erforderlich:

  1. Der Mopidy-Server benötigt die Extension für Spotify:
    sudo apt-get install mopidy-spotify
    Sofern sich das Package nicht installieren lässt, muss die Quelle noch hinzugefügt werden:
    wget -q -O - https://apt.mopidy.com/mopidy.gpg | sudo apt-key add -
    sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/buster.list
    sudo apt-get update
    sudo apt-get install mopidy-spotify
  2. In deinem Spotify-Account muss die App Zugriffsrechte erhalten. Dafür unter https://mopidy.com/ext/spotify/ authentifizieren und die App Mopidy bei Spotify anmelden. Dadurch erhält man die Config-Daten:
    [spotify]
    client_id = asdfsdafa
    client_secret = 29082hlkh2
  3. Diese Daten in die Datei /etc/mopidy/mopidy.conf gemeinsam mit den Zugangsdaten einfügen: sudo pico /etc/mopidy/mopidy.conf
        [spotify]
        username = <Dein Spotify-Benutzername oder E-Mail-Adresse>
        password = <Dein Spotify-Passwort>
        client_id = asdfsdafa
        client_secret = 29082hlkh2

    Wichtig: Alle Angaben dürfen nicht in Anführungszeichen stehen!
  4. Danach: Mopidy neu starten mit sudo systemctl restart mopidy
    Es dauert etwas, bis der Befehl mpc nach einem Neustart von mopidy keinen Timeout mehr anzeigt!
  5. Jetzt kann geprüft werden, ob die Spotify-Verbindung korrekt funktioniert:
    mpc add spotify:album:1yMMjH3tDN9GyXiADzTkL9
    Wird dieser Befehl ohne Antwort angenommen, dann ist Spotify korrekt angemeldet und online. Erscheint die Meldung error adding spotify:album:1yMMjH3tDN9GyXiADzTkL9: directory or file not found, dann funktioniert die Anmeldung bei Spotify nicht korrekt.
  6. Ausführlichere Fehlermeldung von der Spotify-Extension sehen:
    systemctl status mopidy
    zeigt die letzten Meldungen des Mopidy-Servers. Darin sind Fehlermeldungen zur Spotify-Verbindung enthalten, z.B.: mopidy_spotify.playback Playback of spotify:track:3yOlyBJuViE2YSGn3nVE1K failed: Session must be logged in and online to load objects
    Es kann auch helfen, in einem zweiten SSH-Terminal laufende Meldungen mit journalctl -f -u mopidy anzeigen zu lassen.
  7. Eine Verknüpfung einer RFID-Karte mit einem Hörspiel auf Spotify kann nur über die Hörspielland-Play-WebApp hergestellt werden.

Verzeichnisstruktur für den Hörspielland Play

Damit die Box die mp3-Dateien korrekt finden und abspielen kann, ist eine festgelegte Verzeichnisstruktur erforderlich. Die mp3-Dateien müssen im Unterverzeichnis (/home/pi/)Hoerspielland-Play/HLP-Audio/ liegen. Zwei Möglichkeiten stehen zur Verfügung und können auch gemischt angewendet werden:

  • Möglichkeit 1

    ../Hoerspielland-Play/HLP-Audio/<Serienname>/<01 - Folge eins>.mp3
    ../Hoerspielland-Play/HLP-Audio/<Serienname>/<02 - Folge zwei>.mp3
    ../Hoerspielland-Play/HLP-Audio/<Serienname>/<03 - Folge drei>.mp3

    Beispiel:
    ../Hoerspielland-Play/HLP-Audio/Die drei Fragezeichen/001 - Der Superpapagei.mp3
    ../Hoerspielland-Play/HLP-Audio/Die drei Fragezeichen/002 - Der Phantomsee.mp3
    ../Hoerspielland-Play/HLP-Audio/Die drei Fragezeichen/003 - Der Karpatenhund.mp3

  • Möglichkeit 2

    ../Hoerspielland-Play/HLP-Audio/<Serienname>/<01 - Folge eins>/<Track-Nr. und/oder Track-Name>.mp3
    ../Hoerspielland-Play/HLP-Audio/<Serienname>/<02 - Folge zwei>/<Track-Nr. und/oder Track-Name>.mp3
    ../Hoerspielland-Play/HLP-Audio/<Serienname>/<03 - Folge drei>/<Track-Nr. und/oder Track-Name>.mp3

    Beispiel:
    ../Hoerspielland-Play/HLP-Audio/Die drei Fragezeichen/001 - Der Superpapagei/Track1.mp3
    ../Hoerspielland-Play/HLP-Audio/Die drei Fragezeichen/001 - Der Superpapagei/Track2.mp3
    ../Hoerspielland-Play/HLP-Audio/Die drei Fragezeichen/001 - Der Superpapagei/Track3.mp3
    ../Hoerspielland-Play/HLP-Audio/Die drei Fragezeichen/002 - Der Phantomsee/Track1.mp3
    ../Hoerspielland-Play/HLP-Audio/Die drei Fragezeichen/002 - Der Phantomsee/Track2.mp3
    ../Hoerspielland-Play/HLP-Audio/Die drei Fragezeichen/002 - Der Phantomsee/Track3.mp3
    ../Hoerspielland-Play/HLP-Audio/Die drei Fragezeichen/003 - Der Karpatenhund/Track1.mp3
    ../Hoerspielland-Play/HLP-Audio/Die drei Fragezeichen/003 - Der Karpatenhund/Track2.mp3
    ../Hoerspielland-Play/HLP-Audio/Die drei Fragezeichen/003 - Der Karpatenhund/Track3.mp3

    Die Bezeichnung der Track-Dateien muss alphabetisch sortiert die richtige Reihenfolge ergeben.

  • In der WebApp und auf dem OLED-Display wird die Serie und die Folge genannt. Diese Informationen werden nicht aus dem ID3-Tag genommen, sondern aus dem Datei- bzw. Verzeichnis-Namen! Handelt es sich um ein Spotify-Hörspiel, werden die Angaben für Artist und Album verwendet.

Stereo oder Mono

Im Downlad-Paket ist eine Testdatei (stereo-test.mp3) enthalten, um zu prüfen, ob die Tonausgabe korrekt erfolgt. Soll z.B. nur ein Lautsprecher angeschlossen werden, muss softwareseitig auf Mono umgeschaltet werden. Ob das erfolgreich geschehen ist, kann mit dieser Datei ausprobiert werden.
mpc stop
mpc clear
mpc add "file:///home/pi/Hoerspielland-Play/stereo-test.mp3"
mpc play

Dem Pi einen Namen geben

Die WebApp des Hörspielland-Play kann über die IP-Adresse des Pis aufgerufen wird - oder mit dem Netzwerknamen. Der Standardname ist raspberrypi.local
Mit den folgenden Schritten kann der Name geändert werden:

  • sudo pico /etc/hosts
  • raspberrypi in den neuen Namen z.B. hslplay ändern.
  • Hier ebenfalls den Namen ändern: sudo pico /etc/hostname
  • Nach einem sudo reboot ist die WebApp im Browser über die Adresse http://hslplay.local zu erreichen.

Download der Hörspielland Play Skripte

Das Skript für den Hörspielland-Play ist in Python3 geschrieben. Die Hörspielland-Play WebApp verwendet PHP.

  • Download der Hörspielland-Play-Skripte

  • Aus der Download-Zip-Datei das Verzeichnis Hoerspielland-Play in /home/pi/ kopieren

  • Alle Dateien aus dem Verzeichnis Hoerspielland-Play-WebApp in das Verzeichnis /var/www/home/ kopieren

Kurzfassung

sudo apt-get update
Option: Mit der WaveShare WM8960 Audio HAT als Soundkarte zum Ansteuern eines passiven Lautsprechers:
sudo apt-get install git
git clone https://github.com/waveshare/WM8960-Audio-HAT
cd WM8960-Audio-HAT
sudo ./install.sh
sudo reboot

Mit sudo aplay -l nachschauen, welche Nr. die Soundkarte hat (z.B. Card 0 oder Card 1) Wenn Card nicht 0, dann die Standard-Soundkarte einstellen: sudo pico /usr/share/alsa/alsa.conf
  defaults.ctl.card 0
  defaults.pcm.card 0

  beides auf 1 stellen
sudo apt-get install mopidy
sudo dpkg-reconfigure mopidy
sudo apt-get install mpc
sudo apt-get install apache2 php
sudo chmod o+w /home/pi/Hoerspielland-Play/HLP-RFID-Database.txt
sudo chown root:pi /var/www/html
sudo chmod g+w /var/www/html
Jetzt die Hoerspielland-Play-Dateien in /home/pi (hier das Verzeichnis) und in /var/www/home/ (hier nur die Dateien) kopieren
sudo apt-get install python3-pip
sudo pip3 install mfrc522
sudo apt-get install python3-gpiozero
sudo apt-get install python3-smbus python3-pil
sudo raspi-config
[SPI und I2C aktivieren]
sudo reboot
sudo pico /lib/systemd/system/hslplay.service
  [Unit]
  Description=Hoerspielland Play
  After=mopidy.service

  [Service]
  User=root
  Group=root
  WorkingDirectory=/home/pi/Hoerspielland-Play
  ExecStart=python3 /home/pi/Hoerspielland-Play/Hoerspielland-Play.py
  Restart=on-failure

  [Install]
  WantedBy=multi-user.target
sudo systemctl enable hslplay.service
sudo systemctl start hslplay.service

- Fertig! -

Spotify hinzufügen:
sudo apt-get install mopidy-spotify
Funktioniert dieser Befehl nicht, dann die Quelle noch hinzufügen:
wget -q -O - https://apt.mopidy.com/mopidy.gpg | sudo apt-key add -
sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/buster.list
sudo apt-get update
sudo apt-get install mopidy-spotify

Mopidy in deinem Spotify-Account freischalten: https://mopidy.com/ext/spotify/
sudo pico /etc/mopidy/mopidy.conf
    [spotify]
    username = <Dein Spotify-Benutzername oder E-Mail-Adresse>
    password = <Dein Spotify-Passwort>
    client_id = <Die erhaltene ClientID>
    client_secret = <Der erhaltene ClientSecret>

sudo systemctl restart mopidy

Option: Wenn nur ein Lautsprecher angeschlossen werden soll, kann auf Mono umgeschaltet werden:
sudo alsamixer
Nach rechts bis zum Punkt DAC Mono gehen und auf Mono umschalten.

Mit sudo alsactl store die Einstellungen speichern, damit sie nach einem Reboot beibehalten werden.

Viel Erfolg beim Nachbauen.
      Dein Malte

 

Copyright Hinweis für den verwendeten Jingle
Frametraxx Banner

Folgende Pins auf dem 40 Pin GPIO-Anschluss werden verwendet:

RFID: 1 (+3,3V), 6 (GND), 19 (MOSI), 21 (MISO), 22 (RST), 23 (SCLK), 24 (SDA)
Audio: 12 (GPIO18, Links), 33 (GPIO13, Rechts), 34 (GND)
Taster: 11 (BCM.17, GPIO.0), 13 (BCM.27, GPIO.2), 15 (BCM.22, GPIO.3), 14 (GND)
LEDs: 29 (BCM.5, GPIO.5, ButtonDown), 31 (BCM.6, GPIO.6, ButtonPlay), 36 (BCM.16, GPIO.27, ButtonUp), 39 (GND)
OLED-Display: 3 (I2C, SDA), 4 (5V), 5 (I2C, SCL), 9 (GND)
Option: WM8960 als Soundkarte: 3 (I2C SDA), 5 (I2C SCL), 18 (I2S CLK), 35 (I2S LRCCLK), 38 (I2S ADC), 40 (I2S DAC)
mögliche Stromversorgung für einen externen Verstärker: 2 (+5V), 20 (GND)

Verfasser: Malte Köhne, 04/2020

 
Beitrag kommentieren

46044
Bob  15.05.2020 12:39

 Cool. Ich hatte schon eine Box und habe die mal zu dieser umngebaut. Das die Playlisten von hörspielland kommen ist sehr praktisch. So mus sich keine Playlisten in spotify anlegen. Ich probiere jetzt mal lokale Dateien zu verknüpffen.

46004
Malte  10.04.2020 19:11

 Schon kommt das erste Update V1.1:
- Änderung der Pin-Belegung, da es Kollisionen mit der WM8960 gab. Alle Fritzing-Zeichungen sind geändert.

 

Online-Tongenerator: Hörvermögen testen
Eine schnelle Methode, um zu erkennen, dass man alt geworden ist :-)

Hörspielland Play - Die DIY-Hörspiel-Box
Basierend auf einem Raspberry Pi (Zero), spielt diese Lautsprecher-Box Hörspiele per RFID-Karte ab ....

TKKG - Die Feuerprobe - Die neue Adventure-App
USM hat eine neue Adventure-App für iOS, Android und PC veröffentlicht. Nach den erfolgreichen Klick-Abenteuern der drei ??? kommt jetzt eine App mit den Original-Stimmen von TKKG...