Squeezie – Squeezebox Server Remote Control

Einleitung

Mit Squeezie entstand eine ESP32 Squeezebox Fernbedienung für meinen Lyrion-Server und mein Raspberry-Pi-basiertes Multiroom-System.

Manchmal entstehen Projekte nicht, weil man sie zwingend braucht, sondern weil man einfach wieder etwas zum Basteln haben möchte. Genau so fing Squeezie an.

Bei mir läuft schon seit längerer Zeit ein Multiroom-Audiosystem auf Basis eines Lyrion Servers. Die einzelnen Player bestehen aus mehreren Raspberry Pis, die verteilt in verschiedenen Räumen stehen und dort Musik wiedergeben. Technisch funktioniert das sehr zuverlässig, flexibel und angenehm unaufgeregt. Gesteuert wird das Ganze normalerweise über eine App auf dem Smartphone – zum Beispiel über Squeezer.

Das ist praktisch, hat aber einen Nachteil: Man braucht immer das Handy.

Und genau das wollte ich ändern.

Ich wollte eine kleine, eigenständige Hardware-Fernbedienung bauen, die unabhängig von einer Smartphone-App funktioniert. Ein Gerät, das einfach auf dem Tisch steht, per WLAN mit dem Lyrion Server spricht und die wichtigsten Funktionen direkt zugänglich macht: Player auswählen, Musik starten oder pausieren, Titel wechseln, Lautstärke regeln und vielleicht später auch durch Favoriten oder Playlisten navigieren.

Gleichzeitig war das Projekt eine gute Gelegenheit, wieder einmal eine eigene Platine zu entwerfen und etwas mit einem ESP32 und einem kleinen TFT-Display umzusetzen. Also kein fertiges Modul in ein Gehäuse werfen und fertig, sondern ein richtiges kleines Hardwareprojekt: Schaltplan, PCB-Layout, Display-Anbindung, Bedienelemente, Firmware und Benutzeroberfläche.

So entstand die Idee zu Squeezie, einer kleinen Hardware-Steuerung für meinen Lyrion-/Squeezebox-Server. Im Prinzip also etwas wie die bekannte Squeezer-App, nur eben nicht als App, sondern als eigenständiges Gerät.

Und weil bei mir kein Projekt ohne Katzenbezug auskommt, war schnell klar: Das Ganze braucht nicht nur Funktion, sondern auch etwas Katzenpower.

Die Idee hinter Squeezie

Die Grundidee von Squeezie war, eine kleine eigenständige Fernbedienung für mein bestehendes Lyrion-/Squeezebox-System zu bauen. Statt wie üblich das Smartphone zur Hand zu nehmen, sollte ein dediziertes Gerät auf dem Tisch stehen, das direkt per WLAN mit dem Server kommuniziert.

Im Prinzip ist Squeezie damit eine Hardware-Variante dessen, was Apps wie Squeezer auf dem Smartphone erledigen: Player auswählen, Wiedergabe starten oder pausieren, Titel wechseln, Lautstärke regeln und Informationen zum aktuellen Track anzeigen.

Der Unterschied ist allerdings: Squeezie ist immer da. Kein Entsperren, keine App öffnen, keine Benachrichtigungen, kein Akku-Thema. Einfach antippen oder eine Taste drücken und die Musiksteuerung ist direkt erreichbar.

Als Basis kommt ein ESP32-S3 zum Einsatz, kombiniert mit einem 3,5-Zoll-TFT-Touchdisplay auf Basis des ILI9488. Dazu kommt eine selbst entworfene Platine, auf der neben dem Mikrocontroller auch die Bedientasten, USB-C-Anschluss, Spannungsversorgung und Displayanschluss untergebracht sind.

Damit ist Squeezie nicht nur ein Softwareprojekt geworden, sondern auch ein richtig schönes Hardware-Bastelprojekt, genau die Mischung aus Löten, PCB-Design, Firmware-Entwicklung und Fehlersuche, die solche Projekte spannend macht.

Die komplette Entwicklung erfolgt mit VSCodium beziehungsweise Visual Studio Code in Verbindung mit der PlatformIO-Erweiterung und klassischem Arduino-Code. Der gesamte Quellcode, das KiCad-Projekt, die Gerber-Dateien und alle weiteren Projektdaten liegen offen auf Codeberg.

Besonders praktisch finde ich den integrierten Web-Firmware-Installer: Darüber lässt sich die Firmware direkt über den Browser auf einen ESP32 flashen — sogar auf komplett nackte Boards ohne vorinstallierte Software. Dadurch braucht man weder die Arduino IDE noch eine lokale PlatformIO-Installation, um Squeezie auszuprobieren oder zu aktualisieren.

Hardware der ESP32 Squeezebox Fernbedienung

Hardwareseitig basiert Squeezie auf einem ESP32-S3-WROOM-1 mit 16 MB Flash und 8 MB PSRAM. Der ESP32-S3 bietet genügend Leistung für die Benutzeroberfläche, Netzwerkkommunikation, Touch-Auswertung und das gleichzeitige Laden der Covergrafiken vom Lyrion-Server.

Als Anzeige kommt ein 3,5-Zoll-ILI9488-TFT mit einer Auflösung von 480 × 320 Pixeln zum Einsatz. Das Display wird per SPI angebunden und besitzt zusätzlich einen integrierten XPT2046-Touchcontroller. Display und Touch laufen dabei auf getrennten SPI-Verbindungen, damit sich die Bedienung möglichst sauber und ohne gegenseitige Blockaden umsetzen lässt.

Anfangs war das Ganze eigentlich nur als schneller Testaufbau gedacht. Wie so oft blieb es aber nicht lange bei Dupont-Kabeln und lose herumliegenden Modulen. Sehr schnell entstand der Wunsch nach einer eigenen Platine, auf der sämtliche Komponenten sauber integriert sind.

Die Platine wurde vollständig in KiCad entworfen und enthält neben dem ESP32-S3 auch die Spannungsversorgung, USB-C-Anbindung, Status-LEDs sowie mehrere Hardware-Tasten für die direkte Steuerung. Darüber lassen sich Titel vor- und zurückspringen, Play/Pause auslösen, die Lautstärke ändern oder der Ton stummschalten, selbst dann, wenn man gerade keine Lust auf Touchbedienung hat.

Die Stromversorgung erfolgt über USB-C. Für die 3,3-Volt-Versorgung kommt ein TLV76133-Spannungsregler zum Einsatz. Zusätzlich wurden Boot- und Reset-Taster direkt auf der Platine vorgesehen, was die Entwicklung und das Flashen deutlich angenehmer macht.

Da das Projekt vollständig Open Source ist, liegen auf Codeberg nicht nur die Firmwarequellen, sondern auch das komplette KiCad-Projekt inklusive Schaltplan, PCB-Layout und Gerber-Dateien. Damit lässt sich die Platine theoretisch direkt nachbauen oder für eigene Varianten anpassen.

Software der ESP32 Squeezebox Fernbedienung

Softwareseitig basiert das Projekt auf klassischem Arduino-Code in Verbindung mit PlatformIO. Entwickelt wird das Ganze mit VSCodium beziehungsweise Visual Studio Code und der PlatformIO-Erweiterung. Gerade bei größeren ESP32-Projekten ist PlatformIO deutlich angenehmer als die klassische Arduino-IDE, weil Bibliotheken, Build-Prozesse und Board-Konfigurationen sauber verwaltet werden können.

Die Kommunikation mit dem Lyrion- beziehungsweise Squeezebox-Server erfolgt über die JSON-RPC-Schnittstelle. Darüber lassen sich sämtliche wichtigen Funktionen steuern: Wiedergabe starten oder pausieren, Titel wechseln, Lautstärke setzen, Zufalls- und Wiederholmodus ändern oder Informationen zum aktuell laufenden Titel abrufen.

Zusätzlich unterstützt Squeezie eine automatische Server-Erkennung im Netzwerk. Dafür wird zunächst die klassische Slim-Discovery über UDP auf Port 3483 verwendet. Falls das nicht funktioniert, kann alternativ mDNS zur Erkennung genutzt werden. Dadurch muss die Serveradresse in vielen Fällen gar nicht manuell eingetragen werden.

Ein wichtiger Punkt bei der Entwicklung war, dass die Benutzeroberfläche möglichst flüssig reagiert. Deshalb werden auf dem Display nicht ständig komplette Bildschirmseiten neu aufgebaut. Stattdessen nutzt Squeezie ein selektives Rendering, bei dem nur tatsächlich geänderte Bereiche aktualisiert werden. Das reduziert sichtbares Flackern deutlich und sorgt dafür, dass selbst das relativ große ILI9488-Display angenehm schnell wirkt.

Auch das Laden der Covergrafiken erfolgt asynchron in einem separaten FreeRTOS-Task. Dadurch blockiert das Herunterladen der Bilder nicht die eigentliche Benutzeroberfläche oder die Touch-Bedienung. Gerade bei langsameren WLAN-Verbindungen macht sich das deutlich bemerkbar.

Alle wichtigen Einstellungen werden persistent im NVS-Speicher des ESP32 abgelegt. Dazu gehören unter anderem WLAN-Zugangsdaten, Netzwerkeinstellungen, die Touch-Kalibrierung sowie die ausgewählten Player- und Serverdaten. Nach einem Neustart steht das Gerät deshalb sofort wieder betriebsbereit zur Verfügung.

Beim ersten Start öffnet Squeezie automatisch einen eigenen WLAN-Access-Point mit dem Namen „Squeezie-Setup“. Darüber lässt sich das Gerät bequem über den Browser konfigurieren, ohne dass vorher irgendwelche festen Zugangsdaten in den Quellcode eingetragen werden müssen.

Zusätzlich besitzt Squeezie ein eigenes Webinterface. Darüber können viele Funktionen direkt im Browser genutzt werden, inklusive Playersteuerung, Lautstärke, Einstellungen, Firmware-Updates und einer kleinen Log-Anzeige für Debugging und Fehlersuche.

Besonders praktisch ist der integrierte OTA-Mechanismus. Neue Firmware-Versionen können direkt über den Browser eingespielt werden, ohne das Gerät erneut per USB anschließen zu müssen. Für die initiale Einrichtung eines neuen ESP32 gibt es zusätzlich einen browserbasierten Web-Installer auf der Codeberg-Page. Damit lässt sich die Firmware direkt aus dem Browser aufspielen, ohne dass VSCodium, PlatformIO oder die Arduino-IDE installiert werden müssen.

Die Benutzeroberfläche

Bei der Benutzeroberfläche war das Ziel relativ klar: möglichst direkt, übersichtlich und ohne unnötigen Ballast. Squeezie sollte sich eher wie ein kleines dediziertes Audiogerät anfühlen und nicht wie eine überladene Smartphone-App.

Der Hauptbildschirm konzentriert sich deshalb auf die wichtigsten Informationen und Bedienelemente. Im Mittelpunkt steht die aktuelle Cover-Art, die direkt vom Lyrion-Server geladen wird. Dazu kommen Titelinformationen wie Songname, Interpret, Album sowie Fortschritts- und Zeitanzeige.

Längere Titel werden automatisch scrollend dargestellt, damit auch umfangreiche Album- oder Tracknamen lesbar bleiben. Der Fortschrittsbalken lässt sich direkt antippen, um innerhalb eines Titels zu springen.

Darunter befinden sich die klassischen Transportsteuerungen für vorherigen Titel, Play/Pause und nächsten Titel. Zusätzlich gibt es eine Lautstärkeregelung mit separaten Plus- und Minusfeldern. Gedrückthalten wiederholt die Lautstärkeänderung automatisch, ähnlich wie bei klassischen HiFi-Geräten.

Eine Besonderheit ist die Unterstützung synchronisierter Playergruppen. Wenn mehrere Raspberry-Pi-Player als Sync-Gruppe laufen, kann die Lautstärke optional für die gesamte Gruppe gemeinsam verändert werden. Diese Funktion lässt sich in den Einstellungen aktivieren oder deaktivieren.

Auch die typischen Squeezebox-Funktionen wie Zufallswiedergabe und Wiederholen wurden direkt integriert. Dadurch muss man für grundlegende Bedienungsvorgänge praktisch nie mehr auf das Smartphone zurückgreifen.

Ergänzt wird die Oberfläche durch eine kleine Statuszeile mit Uhrzeit und Netzwerkstatus. Die Uhrzeit wird per NTP synchronisiert und dient gleichzeitig ein wenig als „Idle-Display“, wenn gerade keine Musik läuft.

Neben dem eigentlichen Touch-Interface existiert zusätzlich ein vollständiges Browser-Webinterface. Darüber lässt sich Squeezie bequem vom Desktop oder Tablet aus konfigurieren und bedienen. Besonders praktisch ist das für Netzwerkeinstellungen, Firmware-Updates oder die Auswahl eines anderen Players.

Das gesamte UI wurde bewusst relativ minimalistisch gehalten. Keine Animationsexzesse, keine unnötigen Effekte, stattdessen schnelle Reaktionszeiten und eine Bedienung, die auch auf einem kleinen Touchdisplay angenehm funktioniert.

Firmware-Installation und Updates

Ein Punkt, der mir bei solchen Projekten schon immer wichtig war: Die Software sollte möglichst einfach installierbar sein, auch für Leute, die nicht erst eine komplette Entwicklungsumgebung einrichten möchten.

Natürlich kann Squeezie klassisch über PlatformIO kompiliert und direkt per USB auf den ESP32 geflasht werden. Für Entwickler oder Leute, die selbst Änderungen am Code vornehmen möchten, ist das weiterhin der sinnvollste Weg.

Gleichzeitig sollte das Projekt aber auch für Anwender nutzbar sein, die einfach nur die Firmware ausprobieren möchten, ohne vorher VSCodium, PlatformIO oder die Arduino-IDE installieren zu müssen.

Deshalb besitzt das Projekt zusätzlich einen browserbasierten Web-Installer auf der Codeberg-Page. Darüber lässt sich die Firmware direkt aus dem Browser auf einen ESP32-S3 übertragen. Unterstützt werden aktuelle Chromium-basierte Browser mit WebSerial-Unterstützung.

Das funktioniert sogar mit komplett nackten ESP32-Boards ohne vorherige Firmware. USB anschließen, Webseite öffnen, COM-Port auswählen und die Firmware direkt flashen — deutlich unkomplizierter geht es eigentlich kaum noch.

Auch spätere Updates sind dadurch wesentlich angenehmer. Neue Firmware-Versionen können entweder direkt über den integrierten OTA-Mechanismus im Webinterface installiert werden oder erneut über den Web-Installer.

Gerade bei ESP32-Projekten ist das ein enormer Komfortgewinn. Niemand möchte bei jedem kleinen Update wieder Kabel anschließen, eine Toolchain installieren oder kryptische Flash-Kommandos auswendig lernen müssen.

Alle Firmware-Versionen, Quellcodes und Hardwaredaten liegen vollständig offen auf Codeberg. Dazu gehören neben der eigentlichen Firmware auch das komplette KiCad-Projekt, Gerber-Dateien und weitere Projektdaten. Wer möchte, kann Squeezie also nicht nur nachbauen, sondern auch problemlos erweitern oder an die eigenen Anforderungen anpassen.

Im Moment befindet sich das Projekt bei Version 0.5.0 und läuft bereits erstaunlich stabil im Alltag. Trotzdem ist Squeezie weiterhin ein Bastelprojekt und entwickelt sich ständig weiter; neue Ideen kommen erfahrungsgemäß schneller dazu, als alte abgearbeitet werden können.

Open Source, Basteln und der eigentliche Sinn dahinter

Auch wenn Squeezie inzwischen ziemlich alltagstauglich geworden ist, war das Projekt ursprünglich nie als perfektes „Consumer-Produkt“ gedacht. Der eigentliche Reiz lag vielmehr darin, wieder einmal ein komplettes Hardware- und Softwareprojekt von Grund auf selbst zu bauen.

Genau das macht solche Projekte für mich interessant: Eine Idee haben, eine Platine entwerfen, Hardware bestellen, erste Prototypen testen, Firmware schreiben, Fehler suchen, wieder umbauen und am Ende ein Gerät in der Hand halten, das tatsächlich sinnvoll nutzbar ist.

Dabei lernt man zwangsläufig ständig neue Dinge. In meinem Fall waren das unter anderem die Eigenheiten des ESP32-S3, die Optimierung des Display-Renderings, asynchrone Tasks mit FreeRTOS, Touch-Kalibrierung, OTA-Updates und die Kommunikation mit der Lyrion-API.

Natürlich lief dabei nicht alles sofort perfekt. Gerade bei selbst entworfenen Platinen gehören kleinere Fehler praktisch zum Pflichtprogramm. Mal ist ein GPIO ungünstig gewählt, mal reagiert ein Display anders als erwartet oder irgendein Timingproblem taucht erst im laufenden Betrieb auf. Genau das gehört aber letztlich auch zum Basteln dazu.

Ein weiterer wichtiger Punkt war für mich die Offenheit des Projekts. Deshalb liegt alles vollständig auf Codeberg, nicht nur der eigentliche Firmwarecode, sondern auch die KiCad-Projekte, Gerber-Dateien und weitere Hardwaredaten. Wer möchte, kann Squeezie also selbst bauen, verändern oder als Grundlage für eigene Ideen verwenden.

Vielleicht entsteht daraus irgendwann eine Version mit größerem Display, Drehencoder, IR-Fernbedienung oder komplett anderem Gehäuse. Gerade Open-Source-Projekte entwickeln oft ein interessantes Eigenleben, sobald andere anfangen, damit herumzubasteln.

Und selbst wenn nicht: Für mich hat sich das Projekt allein schon deshalb gelohnt, weil es genau das geliefert hat, was ich ursprünglich gesucht habe — ein schönes Bastelprojekt mit praktischem Nutzen, das mein bestehendes Multiroom-System sinnvoll ergänzt.

Außerdem steht jetzt ein kleines Gerät mit Touchdisplay auf dem Schreibtisch, das Musik steuert und gelegentlich Katzenbilder anzeigt. Mehr kann man von einem Nerdprojekt eigentlich kaum verlangen.

Fazit

Mit Squeezie ist letztlich genau das entstanden, was ich mir am Anfang vorgestellt hatte: Eine eigenständige Hardware-Fernbedienung für mein Lyrion-/Squeezebox-Multiroom-System — unabhängig von Smartphone-Apps und trotzdem flexibel genug für den täglichen Einsatz.

Das Projekt verbindet mehrere Dinge, die ich an solchen Bastelprojekten mag: eigene Hardware entwickeln, Firmware schreiben, Netzwerktechnik, Benutzeroberflächen und natürlich ein wenig Retro-Feeling rund um das klassische Squeezebox-Ökosystem.

Besonders spannend war dabei die Kombination aus moderner ESP32-Hardware und einem System, dessen Wurzeln teilweise noch aus der Logitech-Squeezebox-Zeit stammen. Trotz des Alters funktioniert das gesamte Lyrion-Ökosystem heute immer noch erstaunlich gut und bietet eine Offenheit, die man bei vielen modernen Streaminglösungen inzwischen vermisst.

Squeezie wird definitiv weiterentwickelt werden. Einige Ideen stehen bereits auf der Liste — etwa zusätzliche Hardware-Funktionen, weitere Bedienmöglichkeiten oder kleinere Optimierungen an Oberfläche und Performance. Wie bei den meisten DIY-Projekten entstehen neue Ideen meistens schneller, als man sie umsetzen kann.

Wer selbst mit ESP32, Lyrion oder DIY-Audio-Projekten experimentiert, kann sich den kompletten Quellcode inklusive KiCad-Dateien, Gerber-Daten und Firmware direkt auf Codeberg ansehen.

Und selbst wenn das Projekt am Ende nur eine weitere Ausrede war, wieder Platinen zu designen, Displays anzuschließen und mit ESP32-Hardware herumzuspielen: Genau dafür sind solche Projekte schließlich da.

Download

Das Codeberg Projekt findet sich unter https://codeberg.org/diwou/Squeezie_-_Squeezebox_Server_Remote_Control

0 Comments
Älteste
Neueste
Inline-Feedbacks
Alle Kommentare anzeigen
Nach oben scrollen