Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

482 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SonosESP — Touchscreen Sonos Controller for ESP32-P4

A DIY wall-mount / desktop remote for Sonos speakers. Album art, synced lyrics, multi-room control, weather and a StandBy clock — on a 4″ or 7″ touchscreen, with over-the-air updates.

License: MIT PlatformIO GitHub Downloads (all releases) GitHub Release GitHub Stars

FeaturesThemesHardwareInstallSetupArchitectureContributing

☕ Support

If you find this project helpful, consider supporting me on Ko-fi!

Ko-fi


SonosESP running on a GUITION ESP32-P4 touchscreen, showing album art and playback controls

✨ Features

Playback

  • Full transport control — play/pause, skip, previous, shuffle, repeat, volume and mute
  • Queue & library browsing — walk your Sonos library, playlists and favourites, jump to any track
  • Multi-room — switch between Sonos zones, with live indicators showing which rooms are playing
  • Speaker groups — create and break groups straight from the panel
  • Line-in & TV audio — dedicated screens when a soundbar is on TV input or a device is on analogue line-in

Display

  • Album art — ESP32-P4 hardware JPEG decoder, plus PNG and progressive-JPEG support, bilinear scaling and automatic dominant-colour extraction
  • Synced lyrics — time-synced from LRCLIB, with auto-hide and colour matching
  • Three player themes — see below
  • StandBy clock screensaver — oversized overlapping digits tinted from the album art, with optional photo backgrounds
  • Weather — current conditions plus a 6-hour forecast from Open-Meteo (no API key)
  • Auto-dim — configurable idle timeout and dimmed brightness level

System

  • Two screen sizes, one codebase — 4″ and 7″ builds from the same source
  • OTA updates — install new firmware from the panel, with Stable and Nightly channels
  • Browser installer — flash over USB from Chrome/Edge/Opera, no toolchain required

🎨 Player Themes

Switch anytime in Settings → General → Theme. Adding another is a single registry entry — see src/ui_theme.cpp.

Theme Look
SonosESP (default) The original — blurred album art fills the screen behind the player
Ambient Backdrop tinted from the artwork, artwork left with lyrics beneath it, pill-shaped room selector
Immersive Full-bleed colour, compact header, and a large animated lyric stage where each line fades in

🖥 Hardware

SonosESP runs on GUITION ESP32-P4 + ESP32-C6 touchscreen boards. Two screen sizes build from the same codebase — the installer and OTA pick the right firmware automatically (firmware-4inch.bin / firmware-7inch.bin).

GUITION JC4880P433C ESP32-P4 touchscreen development board

4″ — stable 7″ — BETA
Board GUITION JC4880P433C GUITION JC1060P470C
Display 800×480, ST7701 (MIPI DSI) 1024×600, JD9165 (MIPI DSI)
Touch GT911 capacitive (I²C) GT911 capacitive (I²C)
MCU ESP32-P4 (400 MHz dual-core RISC-V) ESP32-P4 (400 MHz dual-core RISC-V)
Wi-Fi ESP32-C6 (via ESP-Hosted) ESP32-C6 (via ESP-Hosted)
Flash / PSRAM 16 MB / 32 MB OPI 16 MB / 32 MB OPI
Interface USB-C USB-C

Note: This firmware targets these specific GUITION boards and won't run on other ESP32 boards without significant changes.

The 4″ is the production target. The 7″ is BETA — it builds from the same source and has been run on hardware, but has had far less testing. See docs/MULTI_SCREEN_SUPPORT.md.

📦 Installation

Web installer (recommended)

  1. Open the Web Installer
  2. Choose your screen — 4″ (stable) or 7″ (BETA)
  3. Connect the board over USB-C
  4. Click Install and pick the serial port
  5. Unplug/replug when it finishes, then set up Wi-Fi on screen

Requires Chrome, Edge or Opera (desktop) — they support Web Serial. Firefox and Safari don't.

Build from source

git clone https://github.com/OpenSurface/SonosESP.git
cd SonosESP
pio run -e esp32_4inch -t upload      # 4" board
pio run -e esp32_7inch -t upload      # 7" board

OTA updates

Once installed, the panel updates itself: Settings → Firmware Update → Check for Updates. Pick Stable or Nightly in the channel dropdown. The device chooses the correct build for its own screen size.

🚀 First-time setup

  1. Power on — the Wi-Fi setup screen appears if nothing is configured
  2. Wi-Fi — tap Scan, pick your network, enter the password with the on-screen keyboard
  3. Find speakersSettings → Speakers → Scan
  4. Play — select a room and you're controlling music

Wi-Fi credentials and all settings are stored in NVS and survive reboots and firmware updates.

🏗 Architecture

  • UI framework — LVGL 9.5, with resolution-relative scaling (ui_scale.h) so one layout serves both panels
  • FreeRTOS tasks — separate tasks for UI, album art, lyrics, Sonos polling and the clock background
  • Thread safety — mutex-protected shared state; all LVGL work happens on the UI thread
  • Memory — PSRAM for artwork, lyrics and photo buffers; internal DMA SRAM carefully reserved for Wi-Fi/TLS
  • Network — SOAP over HTTP for Sonos control, HTTPS for lyrics and weather, SSDP for discovery
  • Image pipeline — hardware JPEG decode, software PNG and progressive-JPEG fallback, fixed-point bilinear scaling
  • Reliability — layered SDIO crash defences serialise network access; see ARCHITECTURE.md

Full reference: ARCHITECTURE.md · Release process: RELEASE.md

🤝 Contributing

Contributions are welcome — please read CONTRIBUTING.md.

Found a bug or want a feature? Open an issue.

📸 Community builds

Real SonosESP installs in the wild — kitchens, offices, studios, dorm rooms.

Share yours: open a 🖼 Show off your build issue with a photo.

4-inch SonosESP with a Brennan B3 jukebox
Living room · Brennan B3 Jukebox
Sonos Beam 2 + 2 Symfonisk frames · @johnhenrick3-cpu
4-inch SonosESP with a Brennan B2 jukebox
Living room · Brennan B2 Jukebox
Sonos Era 300 · @johnhenrick3-cpu
7-inch SonosESP variant on a kitchen table
Kitchen table · 7" variant (beta)
Sonos Move 2 · @johnhenrick3-cpu
4-inch SonosESP on a bedside table
Bedside table
Sonos Ray + 2 Symfonisk lamps · @johnhenrick3-cpu
Want yours featured? Share a photo →

More builds and casual sharing in Show & Tell.

👥 Contributors

Thanks to everyone who has contributed to this project:

SonosESP contributors

📄 License

MIT — see LICENSE.

🙏 Acknowledgments

  • LVGL — the embedded graphics library behind the whole UI
  • PlatformIO — build system and toolchain
  • LRCLIB — free synced-lyrics API
  • Open-Meteo — free weather API, no key required
  • LoremFlickr — random photo backgrounds for the clock screensaver
  • ESP Web Tools — browser-based installer
  • The Sonos UPnP/SOAP community for documenting the control API

Built with ❤️ and vibesReport a bugRequest a featureInstall now

Keywords: Sonos controller · ESP32-P4 touchscreen · DIY Sonos remote · smart home wall panel · LVGL · ESP32 music controller · Sonos display · album art · synced lyrics

About

Touchscreen Sonos controller for ESP32-P4 — album art, synced lyrics, multi-room, weather and a StandBy clock. Flash it from your browser.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages