- Vorbemerkung
- Aufbau
- Beispiel
- RFID Steuerung auf ESP32-Display
- RFID Karten Zuordnen
- Installation restlicher Komponenten
- ESP32-S3 Firmware selber erstellen
Logitech hat vor lange Zeit einen kostenlosen Mediaserver bereit gestellt, mit dem man kostenlos seine Musik im ganzen Haus verteilen kann. Den Logitech (bzw. Lyrion) Media Server oder kurz LMS. Man braucht einen Rechner, der als Server arbeit und die Musik an verschiedene Clienten schickt. Diese können Rechner, Raspberry Pis, Handys oder seit kurzen ESP32 sein. Gerade die ESP32 sind eine sehr günstige alternative, die Musik zu empfangen.
Den LMS kann man gut mit Handy und Browser fernsteuern. Doch habe ich nicht immer mein Handy dabei und möchte auch gerne, dass meine Kinder selbständig Lieder und Hörbücher starten können. Für letzteres gibt es auch gute eigenständige Systeme, wie z.B. der TonUINO, aber gerade für ältere Kinder ist dies irgendwann nicht mehr zeitgemäß. Da ich selber schon länger den Lyrion Media Server (LMS) nutze und meinen Kinder den irgendwann auch in deren Zimmer einbauen wollte, entschied ich mich, mir eine RFID - Steuerung für diesen einzurichten.
Aus folgenden vier Komponenten besteht ein komplettes System
- Server mit einer laufenden LMS Instanz. (Ich nutze Docker)
- Einen Clienten, der die Musik wiedergibt. (Ich nutze squeezelite-esp32)
- Die hier vorgestellte RFID-Steuerung.
- Ein Pythonskript, welches den IDs der RFID-Karten einer Aktion zuordnen.
- T-Display-S3 ESP32 S3 with 1.9 inch ST7789 LCD Display
- MFRC-522 Mini RC522
- Key Button Membrane Switch 3 (Color: 5key-matrix-keyboard)
- USB Schalter
- USB Powerbank
- Gehäuse aus dem 3D-Druck
pip install esptool
esptool.py --chip esp32s3 --port /dev/ttyACM0 erase_flash
esptool.py --chip esp32s3 --port /dev/ttyACM0 write_flash -z 0 esp32-S3_display_firmware.bin
Zur Übertragung des Skripts auf das ESP32 Display benutze ich Thonny. Wähle Run --> Select Interpreter --> Micropython (ESP32) und suche dann den richtigen Port. Speicher damit squeezeplayerSteuerung.py als main.py auf dem Display.
Wähle zuerst den Interpreter:
Nimm MicroPython (ESP32) und den passenden Port:
Drücke auf Save Copy und wähle das Micropython Device:
Rufe das Skript paramter.py in Thonny auf und passe folgende Angaben an:
- wlanname
- wlanpasswort
- squeezeclient
- lmsserverip
- rfidserverip
Speicher dann parameter.py auf dem Display.
RFID
ESP32-S3 Display | MFRC-522 Mini RC522 |
---|---|
V3.3 | V3.3 |
GND | GND |
1 | MISO |
2 | MOSI |
3 | SCK |
10 | SDA |
5 Button Switch
ESP32-S3 Display | 5 Button Switch | Beschriftung |
---|---|---|
GND | 1 | |
43 | 2 | SEL |
44 | 3 | DEC |
18 | 4 | INC |
17 | 5 | BEFORE |
21 | 6 | NEXT |
Ich habe den 5er Taster direkt an das ESP32 gelötet, um Platz zu sparen. Nicht gesteckt. Dazu habe ich den Stecker abgeschnitten und das die Enden der Kabel direkt an die Pins gelötet. Dadurch muss das Gehäuse nicht so hoch sein.
Da das Display die Schrauben verdeckt, klebe ich die Steuerung mit Heißkleber in das Gehäuse:
Die RFID Karten werden mit Hilfe eines Python Skripts verschiednenen Musikordnern, -dateien, -streams, Hörbüchern oder An- Ausschaltern zugeordnet.
- Kopiere das Skript httpServerGetPost.py und die Datei rfidKarten.csv auf einen Server in den Ordner /home/pi/rfidLMS
- Kopiere als admin die Datei rfidLMS.service nach /lib/systemd/system: sudo cp rfidLMS.service /lib/systemd/system/
- Aktiviere das Skript als Service mit folgenden Befehlen:
sudo systemctl enable rfidLMS
sudo systemctl daemon-reload
sudo systemctl start rfidLMS
Möchtest du andere Pfade verwenden, passe die Ordner in den Skripten an. Ich habe die Datei rfidKarten.csv in einem Pfad gespeichert, auf dem ich per Samba mit meinem Handy zugriff habe. So kann ich einfach neue Karten in diese Datei einpflegen, indem ich mit dem NCF Reader meines Handy die Karten-ID auslese und diese einer Aktion zuordne.
Zur Docker-Installation kopiere dir die Docker-Compose Datei auf deinen Server und starte den LMS Server mit
docker-compose up -d
Richte den Server den eigenen Anforderungen entsprechend ein.
Es gibt verschiedene Projekte, die direkt das Squeezelite-ESP32 unterstützen. Diese finden sich hier:
Aus Kostengründen nutze ich aber den ESP32-S3, welcher keine offiziele Unterstützung besitzt. Für den ESP32-S3 Clienten braucht man folgende Teile:
- ESP32-S3 Development Board (z.B. von Aliexpress, auf 16MB achten: N16R8 - 8M psram, 16M flash)
- DAC Module 1334 UDA1334A I2S DAC (z.B. von Aliexpress)
- SONOFF Basic R2 (Zum An-Aus Schalten mitteils RFID-Karten)
- USB Netzteil
- USB Splitter, Eins auf Zwei (Nur ein Netzteil für Boxen und Esp32)
- USB Boxen
- 3.5mm Audio Aux Cable Anti-interference Ground Loop Noise Filter (Falls der Sound störgeräusche enthält. Dies kann bei mir vorkommen, wenn Boxen und ESP32-S3 am gleichen Netzteil hängen.)
Softwareinstallation
Für die 16 MB esp32-s3
pip install esptool
esptool.py --chip esp32s3 --port /dev/ttyACM0 erase_flash
esptool.py -p /dev/ttyACM0 -b 460800 --before default_reset --after hard_reset --chip esp32s3 write_flash --flash_mode dio --flash_size detect --flash_freq 80m 0x0 esp32s3_16MB_squeeze_bootloader.bin 0x8000 esp32s3_16MB_squeeze_partition-table.bin 0xd000 esp32s3_16MB_squeeze_ota_data_initial.bin 0x10000 esp32s3_16MB_squeeze_recovery.bin 0x150000 esp32s3_16MB_squeeze_squeezelite.bin
ESP32-S3 mit DAC verbinden
Verlöte folgende Punkte zwischen dem ESP und dem DAC
ESP32-S3 | DAC 1334 |
---|---|
V3.3 | V3.3 |
GND | GND |
42 | WSEL |
41 | DIN |
40 | BCLK |
Mache die Verbindung nicht zu kurz, sonst erzeugt der WLAN des esp32-S3 Störungen bei der Musikwiedergabe.
ESP32-S3 Einrichten
Verbinde dich mit dem ESP32-S3 mit dem Handy, WLAN squeezelite-esp32, Passwort squeezelite. Richte dein Wlan ein und merk dir die IP-Adresse, mit der sich der Squeezelite mit deinem Heimnetz verbindet. Rufe nach dem Neustart diese IP-Adresse auf.
Richte unter Audio den Playername und den LMS-Server ein:
Richte unter Hardware den DAC entsprechend obiger Tabelle ein, bzw. deiner eigenen Verlötung:
Autoconnect
Die hier genuzte Version des esp32-squeezelite Players kann sich nicht selber mit dem Server verbinden. Hier wird beschrieben, welcher Schritt nochfehlt
Es muss noch autoexec 1 im NVS-Editor eingefügt werden:
Nach dem Neustart muss dies so aussehen:
Zum An und Auschalten der ESP32-S3 Clienten nutze ich den Sonoff Basic R2, welcher mit einer Tasmota Firmaware geflasht wurde.
Sonoff Flashen
Ablauf:
- Lade dir die Firmware herunter
- Öffne das Gehäuse
- Löte 5 Pins an die richtige Stelle.
- Verbinde die 5 Pins mit einem FT232RL USB-Serial Adapter, halte dabei den Reset-Knopf gedrückt.
- Lösche den Speicher und flashe die Tasmota mit folgenden Befehlen:
esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py --port /dev/ttyUSB0 write_flash -fs 1MB -fm dout 0x0 tasmota-DE.bin
Hier ist eine ausführliche Anleitung mit Bildern.
Sollte dein ESP32-S3 nicht zu den hier vorgestellten Konfigurationen passen, erstelle deine eigene Firmware mit folgenden Befehlen:
mkdir ~/esp
cd ~/esp
git clone -b v4.4.4 --recursive https://github.com/espressif/esp-idf.git esp-idf-v4.4
~/esp/esp-idf-v4.4/install.sh
. ~/esp/esp-idf-v4.4/export.sh
git clone --recursive https://github.com/sle118/squeezelite-esp32.git
cd squeezelite-esp32
cp build-scripts/I2S-4MFlash-sdkconfig.defaults sdkconfig.defaults
Änder nun in der Datei sdkconfig.defaults die CONFIG_IDF_TARGET="esp32" zu CONFIG_IDF_TARGET="esp32s3"
ESP32-S3 Konfigurieren
Passe mit dem Befehl idf.py menuconfig folgende Einstellungen an. Da der ESP32-S3 kein Bluetooth hat, muss dies deaktiviert werden.
Führe dann folgende Befehle aus:
idf.py build
idf.py flash