For a personal project, I wanted to build a custom interactive desktop companion as a gift for my girlfriend. I designed a Kirby-shaped device that works as a standalone smart display.
The goal was to make a polished device for time, weather, alarms, timers, and a built-in minigame. I chose a touch-driven interface so the 3D-printed enclosure could stay clean without bulky physical buttons.
System Overview
The brain of the project is a Waveshare ESP32-S3 development board with an integrated 2-inch capacitive touch screen. The ESP32-S3 handles the graphical interface, touch processing, and Wi-Fi connection.
For sound, I integrated a MAX98357 I2S DAC Class D amplifier with two Gikfun 40mm 40-ohm speakers, allowing the device to play alarms, interface sounds, and music through digital audio.
Mechanical Design
I designed the enclosure from scratch in Autodesk Fusion. The internal cavity mounts the Waveshare display and speakers flush with the surface while leaving space to route the ESP32, amplifier, and speaker wiring.
To keep the build inexpensive, I 3D printed the chassis in pink PLA, hand-painted the feet red, and used paper decals for the eyes.
Firmware
I built a touch-responsive GUI for the clock, weather, stopwatch, and minigame screens. The device uses Wi-Fi to fetch real-time weather data through REST APIs and synchronizes the clock with NTP.
For alarms and interface sounds, I configured the I2S serial bus to stream digital audio from the ESP32 to the MAX98357 DAC without tying up CPU cycles.
Results
I designed, fabricated, and programmed the full device in a two-week timeline, using CMU’s Spring Carnival break to finish the CAD, order parts, assemble the hardware, and integrate the software. The result is a highly personalized, fully functional embedded system that combines mechanical design, IoT software, and digital audio into a polished product.