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

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 separate 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

Direkt zur Kurzfassung

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:

Andere Raspberry Pis haben eine 3,5"-Klinken-Buchse als Audio-Ausgang. Diesen Anschluss hat der Pi Zero nicht. Es gibt aber die Möglichkeit, das als PWM (Pulsweitenmodulation) erzeugte Stereo-Audio-Signal auf zwei GPIO-Pins auszugeben. Zum Umlenken des Signals ist nur ein kleiner Eintrag in der Config-Datei erforderlich. Dann könnte bereits ein Kopfhörer angeschlossen werden. Um den Klang zu optimieren, kann ein Frequenzbandfilter dazwischen gechaltet werden. Der Filter lässt sich aus wenigen Bauteilen als Reihenschaltung eines Hoch- und Tiefpasses aufbauen.

Die Leistung ist ausreichend für die Ansteuerung eines Kopfhörers, aber nicht kräftig genug für eine Lautsprecher-Box.

Wenn du einen anderen Pi mit Audioausgang verwendest, kannst du diesen Punkt überspringen.

  • Folgende Schaltung aufbauen:

    Der Tiefpass besteht aus einem 270 Ohm Widerstand und einem 33 nF Kondensator. Der Hochpass besteht aus einem 10 µF Kondensator und einem 150 Ohm Widerstand. Für den Kopfhörer wird eine 3,5"-Klinken-Stereo-Buchse benötigt.
  • 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 werden - 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 von Stereo 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)
mit 5 Tasten zusätzlich noch: 7 (GPIO4), 16 (GPIO23)
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

 Mit dem Pi Zero 2 bootet die Box etwas schneller und der Verbindungsaufbau mit Spotify "stottert" nicht mehr so häufig am Anfang eines Hörspiels. Allerdings habe ich gelesen, dass der Stromverbrauch etwas höher ist. Mal sehen wie lange die PowerBank hät. :-)

MK  23.02.2022 18:31

47363

 Ist das das selbe wie eine Phoniebox ?

 06.01.2022 16:47

47339

 Hörspielland-Play ist ein eigenes Projekt und es nutzt zum Abspielen von Hörspielen über Spotify, die Daten, die auf hörspielland hinterlegt sind. So können Hörspiele einfacher aufgerufen und auch RFID-Karten zugewiesen werden. :-)

MK  06.01.2022 22:34

47342 - Antwort zu Kommentar Nr. 47339

 Hallo, ich kann Sie per E-Mail kontaktieren.
Ich kann Ihre Erfindung nicht zum Laufen bringen.

Vielen Dank

deine E-Mail mail@hoerspielland.de

 19.04.2021 21:12

47086

 Hi, wie geht es dir.

Funktioniert das, was Sie setzen?
Kannst du ein Video einfügen?
Viele Grüße

Moritz  05.04.2021 03:24

47067

 Hallo Merlin Petrus, ich schreibe auf Deutsch im deutschen Forum www.mikrocontroller.net/ und werde gebeten, auf Englisch zu schreiben.

Hallo Malte
Vielen Dank für die Antwort und die Korrektur des Links.
Heute habe ich TonUino einen TP 4333 hinzugefügt, um den 18.650-Akku zu steuern und aufzuladen.
Ich sehe keinen XXX-Player in Ihrem Projekt, was darauf hinweist, dass er nur online funktioniert, ähnlich wie vor einigen Tagen:
jooki.rocks/
Grüße und ein schönes Wochenende.

Hello Merlin Petrus, I am writing in German in the German forum www.mikrocontroller.net/ and am asked to write in English.

Hello Malte
Thank you for the answer and the correction of the link.
Today I added a TP 4333 to TonUino to control and charge the 18,650 battery.
I don't see an XXX player in your project, which indicates it only works online, similar to what it did a few days ago:
jooki.rocks/
Greetings and a nice Weekend.

 27.03.2021 03:28

47050

 Hallo Ce&Mi,
die Frage verstehe ich nicht. Natürlich kann man den Player auch mit einem Akku bzw. einer PowerBank kombinieren. Ein Raspberry-Pi Zero verbraucht zwar mehr als ein Arduino Nano, aber je nach PowerBank hält sie auch beim PiZero mehrere Tage gut durch.

Der Hörspielland-Play funktioniert offline und online. Offline können Hörspiele abgespielt werden, die auf dem Hsl-Play gespeichert sind. Online können Hörspiele von spotify abgespielt werden und es ist eine Bedienung über eine Weboberfläche möglich.

Beste Grüße

MK  29.03.2021 08:44

47054 - Antwort zu Kommentar Nr. 47050

  Ist es möglich einen Timer zu setzen? Sodass mein Sohn nach 15min. Die Box wieder einschalten müsste? Momentan läuft das Hörspiel durch und wenn es ne Stunde geht, ist das echt lang.

Gruß

Knutnoh  06.01.2022 20:11

47341 - Antwort zu Kommentar Nr. 47054

 Das ist eine gute Anregung. Zur Zeit gibt es noch keine Sleep-Timer-Funktion. Das ist was für das nächste Update. :-)

MK  06.01.2022 22:36

47343 - Antwort zu Kommentar Nr. 47341

 Hi, thanks for sharing Hörspielland Play.
I don't speak German and I write to you in English.
I have several TonUinos that I modified and now they work in stereo.
I really liked your project and I have made some progress.
I have prepared a Raspberry Pi Zero to do it.
I must study python3 to understand it better.
But I can't follow as your link: Download der Hörspielland Play Skripte
Download a 265-bit file that contains an error, that is, the file cannot be downloaded.
<br />
<b> Warning </b>: file_get_contents (.. / Hoerspielland-Play-Skripte-V1.29.zip): failed to open stream: No such file or directory in <b> ... .php </b> on line <b> 31 </b> <br />

Download the Hörspielland play scripts

Copy the directory Hoerspielland-Play from the download zip file to / home / pi /

Copy all files from the directory Hoerspielland-Play-WebApp into the directory / var / www / home /

But there is nothing to copy as the download fails.

Waiting for your response, I send you my best regards.
Have a nice day.

 25.03.2021 03:12

47043

 Hi, Ce&Ma!
Thanks for your feedback. I fixed the link. You can now download the script.

Good luck.

Best wishes. CU
Malte

MK  25.03.2021 17:19

47047 - Antwort zu Kommentar Nr. 47043

 Ich habe für den Pi das Image auf die SD-Karte kopiert und die beiden Dateien unter boot kopiert und mein WLAN-Passwort eingetragen. Nach dem Booten des Pi taucht er aber nicht in der FritzBox auf. Was habe ich falsch gemacht? Kann mir jemand helfen?

Henry  03.07.2020 10:06

46219

 Schließe die SD-Karte wieder an den PC an und prüfe, ob die Dateien "ssh" und "wpa_supplicant.conf" noch in der boot: Partition vorhanden sind. Wenn die Anmeldung im WLAN nicht klappt, sind die Dateien evtl. wieder verschwunden. Einfach nochmal die Dateien anlegen und in wpa_supplicant.conf die Zugangsdaten korrekt eintragen. Und dann nochmal versuchen. Viel Erfolg! :-)

Malte  06.07.2020 18:50

46232 - Antwort zu Kommentar Nr. 46219

 Cool. Hat geklappt Danke.

Henry  09.07.2020 11:04

46246 - Antwort zu Kommentar Nr. 46232

 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.

Bob  15.05.2020 12:39

46044

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

Malte  10.04.2020 19:11

46004

 

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

hoerspielland.de > Welcome > Die DIY-Hörspiel-Box: Hörspielland Play