Investigations

ESP32 Desk Companion

C February 2026

Animated desk companion for the ESP32-S3 round display — smiling face, analog clock, pomodoro timer, and plant soil moisture monitoring.

This is firmware for a tiny round display (the Spotpear ESP32-S3 1.28" LCD) that turns it into a multi-function desk companion. The main display is an animated smiling face with overlaid analog clock hands. It blinks, has rosy cheeks, and chirps like R2-D2 when it hears you talk.

The face changes expression and colour throughout the day — sunrise orange, daytime yellow, sunset coral, dusk purple, night blue. At night, the face closes its eyes, dims the backlight, and only wakes briefly if it hears a noise. It's genuinely charming.

Touch the screen to cycle through modes: the face/clock, a date display, and a pomodoro timer that shows a pie-slice countdown (configurable 5-60 minutes with alarm beeps). There's also a plant monitoring mode that polls a GraphQL backend for soil moisture data and shows a wilting plant when things get too dry.

WiFi setup uses a captive portal — on first boot, it creates a hotspot that you connect to from your phone, enter your WiFi credentials, and you're done. It auto-detects timezone from your IP address. The whole thing is built on ESP-IDF with LVGL 9.2 for the UI, driving a GC9A01 round LCD, ES8311 audio codec, and CST816D touch controller.

What this project demonstrates

The face is the clock: hands overlaid on a blinking, cheeked expression that recolours through sunrise, day, sunset, dusk and night
At night it shuts its eyes and dims the backlight, waking briefly on a noise — the two screenshots here are the same firmware twelve hours apart
Touch cycles modes: face/clock, date, a 5–60 minute pomodoro drawn as a pie-slice countdown, and a plant reading polled from a GraphQL backend
ESP-IDF and LVGL 9.2 on a GC9A01 round LCD, ES8311 codec and CST816D touch; first boot raises a captive portal and the timezone comes from the IP

Technologies

ESP32EmbeddedLVGLIoTHardware