pomodoro: An ESP32 Focus Timer with E-Paper Display and Rotary Dial

pomodoro: An ESP32 Focus Timer with E-Paper Display and Rotary Dial

Summary

pomodoro is an innovative ESP32-based focus timer designed for enhanced productivity. It features a unique e-paper display for distraction-free timekeeping and a rotary dial for intuitive control. This project offers a physical, fun, and intuitive solution for managing focus sessions, built with readily available components.

Repository Info

Updated on April 2, 2026
View on GitHub

Tags

Click on any tag to explore related repositories

Introduction

The pomodoro project by Rukenshia presents a unique ESP32-based focus timer, meticulously crafted to enhance productivity through a physical and intuitive interface. This device stands out with its e-paper display, offering a glare-free and low-power visual experience, complemented by a rotary dial for seamless interaction. Conceived from a desire to create a fun and intuitive tool for time management, the project emphasizes a distraction-free approach to focus sessions.

The creator, with a background in electronics and software engineering, embarked on this project to build something tangible and beneficial for a friend struggling with time organization. Key design choices include the e-paper display, selected for its lack of backlight, large size, and partial refresh capabilities, making it ideal for a device that mostly idles. Input is handled by a robust rotary encoder, while a WS2812 LED provides subtle visual feedback without being intrusive. The device is housed in a custom 3D-printed case, with thoughtful additions like weights and rubber feet to ensure stability during use. The software is developed in C++ using the Arduino framework and PlatformIO, incorporating elements like customizable presets and even "easter eggs" like random facts to add a touch of fun.

Installation

To get started with the pomodoro project, you'll need to set up your development environment and prepare the necessary assets. Please note that the code in this repository is not immediately ready-to-use as some assets and fonts have been removed, but it is designed to be adaptable to your specific needs.

Prerequisites

  • PlatformIO (the VSCode extension is recommended)
  • Python 3.13+ for asset generation

Generating Assets

Before compiling the code, you must generate the required images, icons, and fonts. Navigate to the project directory and run the following commands:

# install dependencies with uv or a different package manager
uv sync

uv run scripts/generate_assets.py

After generating the assets, you can proceed with building and uploading the firmware using PlatformIO.

Examples

The pomodoro timer is designed for straightforward use, offering preset focus and break times.

Upon startup, you can navigate between changing settings or entering the preset selection mode. The device provides three default presets: "Emails," "Coding," and "Focus," each with predefined work and break durations.

Once a preset is selected, the timer begins. When the focus time concludes, the device signals the end of the session by flashing its LED and displaying a message on the screen. You then have the option to start a break. During the break, the e-paper display shows statistics, and every four iterations, a longer break is automatically scheduled to aid recovery.

You can customize these presets by modifying the src/main.cpp file:

  timer.addPreset(iconProvider->getPresetIcon("Emails"), iconProvider->getTimerRunningBackgroundImage(), "Emails", 15 * MINUTE, 5 * MINUTE, 15 * MINUTE);
  timer.addPreset(iconProvider->getPresetIcon("Coding"), iconProvider->getTimerRunningBackgroundImage(), "Coding", 45 * MINUTE, 15 * MINUTE, 30 * MINUTE, 2);
  timer.addPreset(iconProvider->getPresetIcon("Focus"), iconProvider->getTimerRunningBackgroundImage(), "Focus", 25 * MINUTE, 5 * MINUTE, 20 * MINUTE);

Why Use pomodoro?

The pomodoro timer offers a compelling solution for anyone looking to improve their focus and time management. Its physical nature provides a tangible separation from digital distractions, encouraging dedicated work sessions. The e-paper display is a key feature, offering a clear, non-backlit interface that's easy on the eyes and promotes a "stop working already" mentality in low light.

The intuitive rotary dial makes interaction simple and engaging, while the customizable presets allow users to tailor the timer to their specific workflow. For makers and enthusiasts, it's an excellent open-source project that combines ESP32 microcontroller programming, e-paper display integration, and 3D printing. The project's thoughtful design, including subtle LED feedback and fun "easter eggs," makes productivity both effective and enjoyable.

Links