ESP32S3 round display
Exploring the limits of the JC3636W518 — a cheap, off-the-shelf round touchscreen module built around an ESP32-S3 with an ST77916 QSPI 360x360 display and capacitive touch.
The goal is to see how far we can push this little device using ESP-IDF (no Arduino), from basic display driving through to more ambitious interactive and networked applications.
| Component | Detail |
|---|---|
| MCU | ESP32-S3 (QFN56, rev v0.2), 8MB PSRAM |
| Display | ST77916, 360x360 round, QSPI interface @ 40MHz |
| Touch | Capacitive, I2C @ 0x15 |
| Flash | 16MB |
Interactive colour wheel picker. On boot the display renders an HSV colour wheel — white at the centre blending to full-saturation hues at the edge. Touch anywhere to fill the screen with that colour. It stays on your last pick until you touch again.
Key lesson learned: The espressif/esp_lcd_st77916 component has well-tested default init commands for QSPI. Passing custom vendor init (e.g. from Arduino examples) completely replaces the defaults and can cause display artefacts. See colour_touch/NOTES.md for the full debug story.
Requires ESP-IDF v5.1+.
cd colour_touch
idf.py build flash monitor -p /dev/ttyACM0
Animated clock face — Use the round form factor for an analogue clock with smooth sweeping hands, rendered in real-time. A good test of partial screen updates and frame rate.
WiFi status dashboard — Connect to WiFi and display live data (time via NTP, weather, network stats). Explores the ESP32-S3's wireless capability alongside the display.
Gesture recognition — The touch controller supports multi-touch. Detect swipes, pinches, and rotary gestures around the bezel to build a rotary dial or scroll interface.
Audio visualiser — Feed in audio via the ADC or I2S and render a circular spectrum analyser or waveform. Pushes rendering performance and DMA throughput.
LVGL integration — Port LVGL to this display for proper UI widgets, menus, and transitions. The 360x360 resolution and round shape make it a good candidate for a watch-style UI.
Wireless pixel canvas — Run a WebSocket server on the ESP32-S3. Clients connect via browser and collaboratively paint on the round display in real-time.
Brightness-aware dimming — If there's an ambient light sensor or spare ADC pin, auto-dim the backlight. The LEDC PWM backlight control is already in place.