Cylindrical ESP32 radio with a round screen and one button

Oct 26, 2026 Last reply: 5 hours ago 2 Replies
Jump to replies (2)

Finding a good internet radio station usually means scrolling through endless lists, and this build does away with that completely. A single press picks a random station from anywhere on Earth, so every listen can land somewhere new. It feels like a proper answer to discovery fatigue.



The hardware side is tidy. The maker built the device without any soldering, using the Waveshare ESP32-S3-Touch-LCD-1.85 board, which brings a circular 360x360 colour touchscreen on the top face of a compact cylindrical black body. The sketch runs on Arduino-ESP32 3.3 under PlatformIO, with libraries such as ESP32-audioI2S, JPEGDEC, PNGdec, U8g2 fonts and ArduinoJson doing the heavy lifting. The single mono speaker keeps the whole thing simple.



Two choices stand out to me. First, driving the ST77916 panel through esp_lcd directly was a smart fix after the Arduino_GFX QSPI bus garbled the output. Second, the memory budgeting reads like careful work: PSRAM holds covers, decoders and task stacks, while internal RAM is reserved for TLS, freeing room for one more handshake. Leaving the device alone turns the screen into a spectrum radiating out of the song's cover, with the station and song running around the rim.



Memory was, by the maker's own note, the hardest part of the project, and I would love to hear how close to the limit things run. Flashing happens over USB through a web remote, and the device updates itself from GitHub, which seems a sensible way to keep units current. The battery gauge learning its own curve sounds clever too, though how well it converges over time is something I would want to see confirmed.


This looks great. I am curious about the display work: how was the screen actually driven in the end? Round panels over QSPI seem fiddly, and I would like to know what path the maker took to get it stable.

The maker has said the ST77916 display is driven through esp_lcd directly, and the reason given was that the QSPI bus in Arduino_GFX garbled the panel. So the esp_lcd route was the working approach. Beyond that, no further detail about the display setup has been shared.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required