This is the repository for an ESP32 based pomodoro timer. It uses an ePaper display and a rotary dial for input.
The code in this repository will not be ready-to-use, as some assets and fonts have been removed. However, if you really want to you should be able to adapt the code to your needs.
- ESP32 (I used an AZDelivery ESP32 NodeMCU)
- WaveShare 4.26inch e-Paper display HAT, 800×480 (link)
- KY-040 rotary encoder with button
- A single WS2812 LED (could be replaced with a simple RGB LED)A
- A USB-C connector (like this one)
- 3d printed case (
onshape
file) - Some resistors and 0.1uF capacitors
I love trying out different productivity techniques – some say that the quest to optimize your productivity is the ultimate procrastination method, so maybe that is what drove me to this project. I also have a habit of committing time (around a month of work outside my normal job) once a year to a project that benefits someone else. Last year, I bought a 3D printer (BambuLab X1C) and wanted to put it to good use. I have previously finished an apprenticeship as an electronics
engineer before pivoting to software engineering, so I also wanted to come back to my roots and build something physical.
My friend struggles with time management throughout the day sometimes – lots of different tasks to organize, and little focus. So I thought to myself: Why not make them a pomodoro timer? So, I set out with a few goals:
- It should be a physical device
- It should be fun
- It should be intuitive to use
There are some cool projects out there (arguably much cooler than this, for example the Focus Dial by Salim Benbouziyane), but I wanted to build something from scratch. I also
never built something with an ePaper display and thought it might be a good fit for something that is mostly idling and doesn’t require a backlight.
This was my second dive back into building things with microcontrollers in a long time. I knew ESP32 well enough to feel comfortable diving back in, so that was the main choice here. I did some research before to see what kinds of displays would be supported.
I needed some sort of display, or at least I wanted some sort of display. One of the main motivations for this project was that it should be out of your way – until it is time to finish your current focus and move on. For me, this meant that I wanted a display without any backlight.
The display should also be large enough that you can put the whole device somewhere on your desk and still be able
14 Comments
johntopia
Neat project!
sambroner
I love this project! The UI feels so delightful and well thought out. I guess I found another weekend (multi-week?) activity.
If you're looking for hackathon projects, the E-ink ecosystem is well developed enough that they're pretty easy to program against and Claude/the AIs can pick up the API surface. Plus, people generally don't know what they're looking at — you have to say "kindle-style screen" — but people (me? but also guests) do seem to prefer having a e-ink screen in the living room over a backlit display because it's so much less intrusive.
FWIW, E-ink [0] AND pomdoros [1] are each a whole thing of mine.
[0] https://sambroner.com/posts/raspberry-pi-train
[1] https://sambroner.com/posts/personal-analytics-2024
gregwebs
I use this timer which has the advantage of being portable: https://gymboss.com/
ifellover
[dead]
fredzel
Very interesting, I've been thinking on how to make physical pomodoro timer (or just display for one), but with circular screen and preferably no exact time remaining visible. as for me it is both distracting and anxiety-inducing. I've been using Visual Timer app [0] on my android phone and it has mostly been great, but putting phone away would obviously be better.
[0] https://play.google.com/store/apps/details?id=at.cwiesner.an…
gorgoiler
Lasering in on the three different use cases (rather than just one generic 25min focus time) and also providing statistics are both cool additions. Nice.
It would be a good addition to your write up to mention, for the uninitiated, that pomodoro is of course named after a physical timer with a rotary encoder!
https://medium.com/@thejinxes/ditch-the-tomato-timer-d8bbf01…
If you ever get around to your goal of having a red e-ink screen, that would be a fun alternative to Pepe.
chungus
Absolutely love it. Inspires me to think about porting my own productivity tools to an IRL device.
thunder-blue-3
Every time I see something pertaining to a pomodoro timer, I'm reminded of interviewing with a YC founder in downtown san mateo in the early 2010s (he was working on websockets + slide deck/prezi-like tech iirc), and half our interview consisted of him hyping up this technique. The company went under within a year, and I could never respect this technique afterwards
teddyh
Physical pomodoro: <https://upload.wikimedia.org/wikipedia/commons/3/34/Il_pomod…>
rambambram
The whole idea of pomodoro comes from a physical kitchen timer in the shape of… you guessed it, a pomodoro.
The best UX for the pomodoro technique can be found in this physical kitchen timer, if you'd ask me.
atemerev
I know assembling things is half the fun, but if you just want a universal ESP32 device with screen and buttons, I recommend M5stack. Cheap, programmable, uniquitous.
bloopernova
This is fantastic and I want to build one. The UI is delightful, and as other people have said, the multiple modes for different tasks is a great idea.
13_9_7_7_5_18
[dead]
dartharva
GPLv3-licensed GUI Pomodoro app for Linux, for anyone who needs it: https://gitlab.gnome.org/World/Solanum/