Create a Round Touch Timer with Waveshare ESP32-S3 LCD

Use a circular touch display for a timer with a large countdown and a single clear primary action.

PineMux Editorial 29 Sep 2026 3 min read

E-Paper & Displays

ESP32-S3-Touch-LCD-1.28 — source hardware reference
Reference photo: Waveshare. Hardware or source project shown; see the guide for the proposed build.

01 / Project overview

The ESP32-S3-Touch-LCD-1.28 combines a 240 × 240 circular display with a CST816S touch controller and QMI8658 IMU. This project uses display and touch only. Bring those two parts up independently before adding timer state or motion gestures.

02 / Materials & software

ItemWhat to check
ESP32-S3-Touch-LCD-1.28Confirm the exact 1.28-inch touch model.
USB-C data cableKeep the first version USB powered.
Arduino or MicroPython environmentUse one documented workflow consistently.
Small standSupport the board without pressing on the screen.

03 / Connections & first setup

No external display wiring is required. Keep the vendor’s onboard SPI and I2C assignments unchanged. Use the board’s documented USB flashing procedure, and avoid adding a battery while the first display and touch tests are still being debugged.

04 / Build the project

  1. Check the display example

    Run the vendor example and inspect color, rotation, and the circular boundary. Confirm the full image fits before trying custom fonts. Save the working configuration and dependency versions.

  2. Check touch coordinates

    Run the touch example and tap the center and several edge positions. The touch-only example may not illuminate the LCD; use its serial output to verify events rather than assuming the screen should draw a response.

  3. Define one primary action

    Show START while idle, PAUSE while running, and RESUME while paused. Place a smaller reset action away from the primary target. Make the timer state explicit in text.

  4. Keep time independently

    Use a monotonic time source for elapsed duration. Update the countdown from elapsed time, not from the number of display refreshes. Apply a single transition for each deliberate touch so a held finger does not rapidly toggle states.

  5. Test screen rotation

    If you rotate the layout, verify touch mapping again. Try a short countdown, pause it, resume it, and allow it to finish. Keep IMU gestures as a later extension after touch behavior is dependable.

Timer states

IDLE -> START -> RUNNING
RUNNING -> PAUSE -> PAUSED
PAUSED -> RESUME -> RUNNING
RUNNING -> time elapsed -> COMPLETE

05 / Check the result

CheckExpected behavior
Center targetOne tap produces one state transition.
PauseRemaining time stays unchanged.
RotationTouch and graphics remain aligned.

Troubleshooting. A lit display and a working touch bus are separate milestones. If touch events arrive in the wrong place, inspect coordinate transformation rather than moving buttons to compensate. Keep display initialization from the exact board example, because a generic round-screen driver may omit required setup.

06 / Sources & build notes

Prepared by PineMux from the official sources above. These are editorial build instructions; this project has not been bench-tested by PineMux. The cover shows reference hardware or a source project; image credit is provided above. Use the manufacturer’s revision-specific diagrams for exact wiring.

Shopping Cart
Scroll to Top