Animated ESP32 Eyes on a 1.47 Inch LCD
Two eyes on a small screen look alive if you redraw them a little differently, over and over. They glance left, glance right, blink, wink, get drowsy, and fall asleep. That is this project: ESP32 animated eyes with no camera and no motion sensor telling them where to look.
The board is the Waveshare ESP32-C6-LCD-1.47 (Amazon B0DK5J6LX3). The sketch is locked to landscape, 320×172. There is no touch and no IMU. Do not tilt the slab to steer the pupils. Life is a timer. A short press of BOOT (GPIO9) pokes the creature. A hold of about 0.7 seconds cycles the eye colors. The RGB LED is GPIO8. Backlight stays at 50%, and dims further when the eyes are asleep. The case and firmware are on the slab eyes project.
This is not the round Desk Pal. Those eyes live on the ESP32-S3 puck and follow a tilt. If you want a cat or robot head around a round screen, that is Desk Pal Maker. Buying the round board for this rectangular project, or the other way around, will not fit the case.
Animation is draw, wait, draw again
A still eye is an ellipse for the white, a smaller ellipse for the pupil, and a tiny shine. The next frame moves the pupil a few pixels. Your eye blends the frames into a look. The program does not store a video. It stores a position and draws it fresh.
A blink is the same ellipse squashed flat, then opened again. A wink squashes one eye. Moods — idle, happy, sleepy, curious, surprised, love, dizzy, annoyed, sad, excited, asleep — are packs of those rules. Idle means “look around on a timer.” Asleep means “stay shut and dim the backlight.”
Nine color looks ship in the sketch: cloud, periwinkle, glowstick, matcha, blueberry, bubblegum, lagoon, peach, ghost. Hold BOOT to step through them. The choice is saved, so it comes back after power-off.

This chip likes whole numbers
The ESP32-C6 in this slab has no floating-point unit. The inner loop that fills each eye uses integer math, including an integer square root for the ellipse. The picture looks the same. The frame rate stays smooth. That is a good habit on small boards: do the pretty math in whole pixels when you are filling thousands of them every frame.
Serial 115200 can drive the face while you learn: mood happy, look next, blink, wink, poke, pet, sleep, wake, status, help. gaze x y aims the pupils without touching the glass, because there is no touch chip on this board.
Flash it
Chrome or Edge, a data USB-C cable, and Flash to board on the project page. Missing port: hold BOOT, tap RESET, release BOOT. Arduino IDE: ESP32C6 Dev Module, USB CDC On Boot.
Print the landscape shell in PLA or PETG, 0.2 mm. The cutter matches the C6 slab outline, including TF, USB-C, and the two buttons. The round puck will not snap into this case.
Once it is running, leave it on the desk. The interesting part is that nobody is steering it. A loop, a clock, and two ellipses are enough for a face.