Skip to content

Repository files navigation

Bop

Bop is a source-only Spotify remote for the Waveshare ESP32-S3 Touch AMOLED 1.8 board.

It shows the current track and sends touch controls to Spotify. It does not play audio.

Album Art - Now Playing Launch in Spotify

See Bop in action on X.

Touch controls

Use these gestures on the Bop screen:

Gesture Action
Swipe left Previous track ⏮️
Swipe right Next track ⏭️
Drag up Increase volume 🔊
Drag down Decrease volume 🔉
Short press Play or pause ▶️ / ⏸️
Long press Show the Spotify screen with a QR code for the current track 🎵

Tap the Spotify screen to return to the current track.

Project status

Bop is source software for personal experimentation. It is not an official Spotify product.

This repository provides no firmware binary, package, GitHub Release, release tag, or shared Spotify client ID. You build the firmware and create your own Spotify application.

Spotify restricts Streaming integrations to its Approved Devices. Spotify terms do not clearly state how that restriction applies to a source-only ESP32 repository. Bop makes no claim of Spotify approval.

Hardware and account requirements

You need these items:

  • A Waveshare ESP32-S3 Touch AMOLED 1.8 board.
  • A USB data cable.
  • A macOS, Linux, or Windows host computer.
  • A WiFi network.
  • A Spotify Premium account.
  • Your own Spotify application and Client ID.

Support levels

Host Support level
macOS Hardware-tested installation
Linux Firmware builds in CI
Windows Host tools support it. Hardware installation is untested.

CI runs on Linux only. Use macOS for the supported hardware procedure.

Quick start

  1. Install Git and mise.
  2. Run git clone https://github.com/markphelps/bop-esp32.git.
  3. Run cd bop-esp32.
  4. Read INSTALL.md, EULA.md, and PRIVACY.md.
  5. Connect the board with a USB data cable.
  6. Run mise install.
  7. Run mise run flash without --force.
  8. Scan the QR code on Bop and join the Bop setup AP.
  9. Use the captive portal to save WiFi.
  10. Run the USB provisioning command, mise run provision.
  11. Enter the Spotify Client ID and complete Spotify authorization.

The first flash takes a credential-free factory backup. The captive portal then writes only the verified WiFi values.

The USB provisioning command queries the device state, then sends only the Spotify Client ID and refresh token. It never reads or rewrites WiFi values.

CAUTION: Do not use mise run flash -- --force for the first flash. It takes no backup. After portal setup, mise run provision cannot make its required credential-free backup.

If a valid backup exists, the backup task validates it and does not read the board. If an incomplete or invalid backup exists, the task stops. Move that backup out of backups/ before you try again.

If no backup exists, the task reads the credential partition first. It reads all flash only when the partition has no credentials.

Documents

Security

Bop stores WiFi values, the Spotify Client ID, and the Spotify refresh token as plaintext in device NVS.

A person with physical access to the board can read these values. Read SECURITY.md before you provision the device.

Run mise run deprovision before you give away, sell, or discard the board. The command removes device credentials after you remove Bop access from Spotify.

License and trademarks

Project code uses the Apache License 2.0. Read LICENSE.

The Montserrat font uses the SIL Open Font License. Read THIRD_PARTY_LICENSES.md.

Bop is an independent project. Spotify is a trademark of Spotify AB. Espressif, ESP32, and Waveshare are trademarks of their respective owners.

About

A Spotify remote for the Waveshare ESP32-S3 Touch AMOLED 1.8 board.

Topics

Resources

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages