NFC Spotify Jukebox

Musik wieder greifbar machen

Idee

In der heutigen Zeit ist alles digital und per App steuerbar. Das bringt eine Menge Komfort und Einfachheit mit sich. Doch vor allem ältere und junge Menschen haben das Nachsehen.

Für meine kleine Schwester war es zum Beispiel lange Zeit nicht möglich, ein Hörbuch selbst einzuschalten, ohne jemanden mit einem Telefon zu fragen, ob er es einschalten soll. Dieses Problem und die Motivation, Musik wieder physisch und greifbar zu machen, haben mich zu diesem Projekt bewegt. Die Interaktion mit Musik und anderen Menschen durch Jukeboxen (zumindest so, wie sie oft in Filmen dargestellt wird) hat mich fasziniert, und besonders für Hauspartys ist es ein tolles Feature, um die Gäste aktiv in die Party einzubeziehen.

Als Technikfreak ist für mich die Verbindung zwischen Technologie und bewährten Systemen offensichtlich. Auch die Möglichkeit, Wiedergabelisten mit brandneuen Songs abzuspielen, ohne die lokal gespeicherten Musikarchive manuell zu aktualisieren, ist ein großer Vorteil und auch der Grund, warum Spotify ins Spiel kam 

Mit Hilfe eines Raspberry Pi und eines RFID-Lesegeräts können beliebige Alben und Wiedergabelisten mit einer Karte verbunden werden. Auch das gewünschte Abspielgerät kann mit einer Setup-Karte ausgewählt werden.

 

Das Ergebnis ist eine digitale Jukebox mit Lautstärkeregler, Pause-, Skip- und Shuffle-Taste, die jedes Gerät per NFC Karten steuern kann, das Spotify Connect unterstützt.

 

Planung

Hardware
Werkzeuge
  • 3D-Drucker und Filament
  • Drucker für Kartenlabel
  • Ausrüstung zum Löten
  • Standardwerkzeuge (Schraubendreher, Zangen, etc.)

Das Gerät sollte von jedermann nutzbar sein. Das bedeutet, dass die Bedienung einfach sein muss und die Funktionen nicht zu umfangreich.

Für eine einfache Musiksteuerung verwenden wir eine:

  • Play/Pause-Funktion
  • Skip-Funktion
  • Lautstärke hoch/runter Funktion
  • Shuffle-Taste

Es gibt also zwei Tasten (Skip und Shuffle) und einen Drehgeber (Lautstärke) mit Play/Pause bei Druck.

Außerdem verfügen die Tasten über eine LED-Beleuchtung, die anzeigt, ob die Zufallswiedergabe aktiviert ist oder nicht. Beim Einstellen der Lautstärke zeigt die Helligkeit der LEDs auch die Lautstärke in Prozent an.

Weniger häufig genutzte Funktionen können auch mit NFC-Karten realisiert werden. Dies ist auch hier der Fall:

Um das gewünschte Abspielgerät auszuwählen, gibt es eine „Set Device“-Karte. Sobald Musik auf dem Gerät abgespielt wird, speichert die Karte die ID des Abspielgerätes und verwendet sie später für den Abspielbefehl.

Bei einer neuen Wiedergabeliste können alte Abspielkarten überschrieben oder neue Karten eingelernt werden. Dazu spielt man die gewünschte Playlist manuell ab, scannt dann die „Lernkarte“ – Karte und anschließend die leere oder alte Karte. Das Gerät schreibt dann die Playlist-ID auf eine neue Karte.

Gehäuse

Ich habe mich entschieden, ein 3D-gedrucktes Gehäuse für den Prototyp zu verwenden. Leider ist es nicht wirklich ästhetisch, aber sehr flexibel in der Gestaltung und Verwendung.

Für die Zukunft ist jedoch ein Holzgehäuse geplant.

Die Dateien sind beigefügt, hier gibt es nichts Besonderes zu beachten. Das Design ist so einfach, dass ich es mit 0,26mm gedruckt habe, um schneller fertig zu werden.

Der Drehknopf wurde einfach auf den Drehgeber aufgepresst.

Herstellung der Karten-Etiketten

Ich habe eine einfache Photoshop-Vorlage erstellt, um ein einfaches und einheitliches Design zu erhalten.

Danach habe ich die Etiketten ausgedruckt und auf die Karten geklebt. Mit Hochglanzpapier oder Vinylaufklebern würde es wahrscheinlich noch besser aussehen als mit normalem Papier.

Die Verkabelung

Wie Sie auf dem Bild sehen können, habe ich alle Komponenten an den Raspberry Pi angeschlossen. Das RFID-Lesegerät wurde mit SPI angeschlossen, aber die Verbindung über I2C funktionierte genauso. Für die Verdrahtung schreibt man sich einfach auf, welche Pins man wofür verwendet und trägt diese Informationen in die config.cfg ein. Stellen Sie sicher, dass die Button-Led + Pins PWM unterstützen und nicht durch SPI oder I2C belegt sind.

Es sieht komplizierter aus als es ist.

Pinbelegung am Raspberry Pi

Einrichten des Raspberry Pi

Da wir den PN532-Chipsatz verwenden, ist die Einrichtung etwas knifflig, da wir Circuit Python-Bibliotheken benötigen. Dies erfordert die Installation der Adafruit-Blinka-Kompatibilitätsschicht.

Außerdem benötigen wir LibNFC, um die Kommunikation mit dem RFID-Lesegerät abzuwickeln.

 

Adafruit Blinka:


Folgen Sie diesem Installations-Tutorial HIER

Nach dem Ausführen der Blinka-setup.py, geben Sie einfach ja zu jeder Frage.

 

Bibliotheken:


Danach können wir alle Bibliotheken installieren:

pip3 install adafruit-circuitpython-pn532 spotipy pyky040 evdev

DIES ist ein weiterer hilfreicher Link, der die Verdrahtung und Installation zeigt.

 

Installieren Sie pigpio:
sudo apt-get install pigpio python3-pigpio

und aktivieren Sie den Deamon:

sudo systemctl enable pigpiod


Nun müssen wir den Drehgeber mit Hilfe des Geräte-Overlays einrichten. Das macht ihn zuverlässiger als die GPIO-Variante, die allerdings implementiert ist und in der Datei „hw_com.py“ umgeschaltet werden kann. Weitere Informationen dazu finden Sie HIER.

Dies ist relativ einfach:

sudo nano /boot/config.txt
# (Ersetzen von {CLK_PIN} und {DT_PIN} durch ihre realen Werte)
dtoverlay=rotary-encoder,pin_a={CLK_PIN},pin_b={DT_PIN},relative_axis=1,steps-per-period=2


Nach dem Schließen und Speichern starten Sie den Pi neu.

 

LibNFC:


Je nachdem, ob man SPI oder I2C verwendet, gibt es unterschiedliche Einrichtungsmethoden.

HIER ist ein weiteres Tutorial zur Einrichtung mit I2C, vielleicht hilft das, wenn Probleme auftreten.

sudo apt install libnfc5 libnfc-bin libnfc-examples

Dann gehen Sie zu:

sudo nano /etc/nfc/libnfc.conf

Fügen Sie am Ende ein:

für I2C:
device.name = "PN532 über I2C"
device.connstring = "pn532_i2c:/dev/i2c-1"
für SPI:
device.name = "PN532 über SPI"
device.connstring = "pn532_spi:/dev/spidev0.0:500000"

Wenn Sie auf Probleme stoßen, schlagen Sie die Baudrate für Ihr spezielles Modul nach und ersetzen Sie die 500000 am Ende.

 

 

nfc-list

sollte nun Ihr Lesegerät auflisten.

 

Hilfreiche Links zur Fehlerbehebung und UART-Einrichtung:

wiki.sunfounder.cc (Benutzen Sie nur nicht den Download-Link, der funktioniert nicht. Verwenden Sie apt install wie gezeigt.)
blog.stigok.com
learn.adafruit.com


Code:

Du kannst den Code HIER auf GitHub finden.

Klone ihn auf deinen Pi und benenne ihn der Einfachheit halber um:

cd
wget https://github.com/d00mfish/NFC-Spotify-Player/archive/ntag2xx.zip ; unzip ntag2xx.zip ; mv NFC-Spotify-Player-ntag2xx NSP ; rm ntag2xx.zip
cd NSP
nano config.cfg

Öffnen Sie die „config.cfg“, in der Sie alle Pins, die UID Ihrer Setup- und Lernkarte und vor allem Ihre Spotify-Client-ID und -Geheimnis eingeben müssen.

Um die UID deiner Karte zu erhalten, kannst du sie mit einer Smartphone-App scannen oder den Befehl „nfc-poll“ verwenden und sie an das Lesegerät halten. Die UID wird dann ausgegeben.

 

Der Abschnitt „Device“ kann so belassen werden.

Spotify-Authentifizierung

Erstellen eines Spotify-Entwicklerkontos

Gehe auf developer.spotify.com, klicke auf Dashboard, melde dich an, erstelle eine App und gib ihr einen Namen und eine Beschreibung.

Danach findest du die Informationen, die wir brauchen, direkt unter dem Namen, den du gerade für deine App gewählt hast.

Dann fügen Sie die Spotify-Client-ID und das -Geheimnis in die config.cfg aus dem Repository ein.

Wenn Sie alles richtig gemacht haben, müssen Sie nun Ihrer App die Berechtigung erteilen, die Live-Wiedergabe zu ändern.

Ich habe darauf geachtet, dass nur die wirklich benötigten Berechtigungen enthalten sind. Diese betreffen nur das Einstellen und Abrufen der aktuellen Wiedergabe sowie das Lesen Ihrer privaten Wiedergabelisten, um sie auf die Karten schreiben zu können. Sie sind alle in der config.cfg unter scope aufgeführt, aber lasst sie so wie sie sind, sonst gibt es Probleme.

Für den ersten Durchlauf führen Sie die „spotify_api.py“ aus, um den Authentifizierungsprozess zu starten:

python3 spotify_api.py

Nun sollten Sie aufgefordert werden, einen Link zu öffnen, in dem Sie sich mit Ihrem Premium-Account anmelden und Berechtigungen erteilen:

pi@raspberrypi:~/NSP $ Rufen Sie die folgende URL auf: https://accounts.spotify.com/authorize?client_id=..........

Folgen Sie den Anweisungen und Sie sollten zu google.com weitergeleitet werden. Kopieren Sie die URL und fügen Sie sie wieder in die Konsole ein.

Wenn Sie nun Error 404: reason: NO_ACTIVE_DEVICE erhalten, haben Sie alles richtig gemacht!

Wenn Sie Error 400: Bad Request erhalten, ist etwas schief gelaufen. Versuchen Sie es erneut und fügen Sie die gesamte URL ein.

Von nun an sollte die Bibliothek alle Token-Erneuerungen und so weiter übernehmen, so dass wir uns in Zukunft nicht mehr darum kümmern müssen.

 

Selbst nach einem halben Jahr, in dem ich die Prototyping-Pi nicht benutzt habe, musste ich mich nicht neu authentifizieren, damit sie funktioniert.

Inbetriebnahme

Um eine Vorstellung davon zu bekommen, was vor sich geht und wie die Tasten-LEDs reagieren, führen Sie es zunächst in der Konsole aus, um die Ausgabe zu sehen.

Zuerst sollten Sie Ihr Wiedergabegerät einstellen.

Abspielgerät einstellen:
  1. Musik abspielen auf Gerät
  2. Scannen Sie die Gerätekarte, um sie als Standard einzustellen (die UID der Gerätekarte muss in der config.cfg festgelegt werden)
Dann richten Sie Ihre erste Karte ein:
Lernen Sie eine Karte:
  1. Spielen Sie eine Playlist oder ein Album ab, das Sie der Karte zuweisen möchten.
  2. Wenn Sie alles von einem bestimmten Künstler hören möchten, empfehle ich die Wiedergabelisten „This is ____“ die es auf Spotify für nahezu jeden Künstler gibt.
  3. Lernkarte scannen.
  4. Leere Karte scannen (zum Abbrechen Lernkarte erneut scannen).

Autostart beim Booten

Leider wurde das RFID-Lesegerät nicht erkannt, solange es nicht von libnfc mit dem Befehl nfc-list aufgelistet wurde.

(Falls jemand das behoben hat, würde ich mich freuen, das zu erfahren.)

 

Deshalb habe ich ein Skript geschrieben, das alle Befehle für den Bootvorgang ausführt:

 

cd
nano boot.sh

Fügen Sie dies in das Shell-Skript ein:

#!/bin/sh                                                                                                                                                                                                         
nfc-list                                                                                                                                                                                                         
cd /home/pi/NSP                                                                                                                                                                                                 
python3 main.py

Speichern und beenden.

Dann führen wir das Skript über crontab aus:

crontab -e

und fügen hinzu:

@reboot bash /home/pi/boot.sh

Damit wird das Programm beim Booten automatisch gestartet.

 

Das war’s. Jetzt sollte alles funktionieren.

Wenn Sie Fragen haben, lassen Sie es mich wissen.

Ansonsten:

Viel Spaß beim Hören!

WordPress Cookie Plugin von Real Cookie Banner