Key-Do
Your to-do list on a keychain! Ultra-low power consumption and lightweight! Features a 122x250 2.13" E-Ink display with an ESP32-S3R8 for WiFi and Bluetooth connections, and 4 buttons for control, all powered with a rechargeable lipo battery.
Created by
MrDiamond
Tier 3
132 views
9 followers
MrDiamond
added to the journal ago
First case prototype + Working UI Code!
Been a while! I've been quite busy but I've finally gotten a working case prototype that can hold everything!
The case

Yes, everything rattles around but that will be fixed within a couple more prototypes but that's not the biggest part of my worries. Also ignore that this one is green, I got lazy and didn't want to change filament.
Buttons
Getting the buttons to work took not actually that long (if I knew more about electronics it would've been easier)
Basically, this is the schematic for the esp32 board I'm using:

Where the button board is attached to GPIOs 44, 43, 41, 40, and 39 (literally just inserting it's header into the board). Unfortunately for me, GPIO 0 is the BOOT pin, so I can't access GND to connect to the button board. Here's what I tried at first to connect GND to the button board without putting a pin in the BOOT:


Yes, that is a tiny metal piece connecting GPIO 44 to GND. Yes, this was a terrible idea. No, I do not have access to soldering tools (even though I definitely should). No, it did not work.
Lucky for me, all I needed to do is set GPIO 44 to HIGH in the code and the buttons all worked, reading the other four pins.
LVGL
Getting the display to actually... display was a complete nightmare. Heltec provides exactly zero (0) documentation for their products other than some hardware specifications. I can't remember the exact details of why it never worked, but I did get it working in the end. Something about using PlatformIO instead of the (completely shit) Arduino IDE, and there not being any clear library to use (they have like 15 different repos and none of them worked).
I found a working library to interface with Heltec's shitty firmware, just called heltec-eink-modules (full details in the repo platformio.ini).
Up Next
I hope to get a final prototype of the case that holds everything together without rattling and is easy to print/use, and uploading those final files to the repo.
The hardest part is up next though, getting the UI code to actually... do something. Right now it has some basic non-functional UI. So, we'll see how that works. Thanks to the people that have followed along!
Also, I have updated the tier of this project from 4 to 3, as I think this project fits that description better. (I don't need any more parts or money, I just wanted to make sure it was accurate)
P.S.: I hate aliexpress. What do you mean that this battery I ordered isn't actually 2000mAh?

It's because you had to select the right "color" when all the options look like this:

(you wouldn't believe it, I selected the wrong one.)
MrDiamond
added to the journal ago
First code running on real hardware!
The ESP finally arrived, and I immediately got started on getting some basic code to run on it. Safe to say that actually wasn’t easy at all.
I refuse to use Arduino IDE in favor of PlatformIO, as Arduino IDE is generally terrible, and I want to fine tune what I code. Unfortunately, there is absolutely 0 documentation on how to get it to actually work on PIO. It successfully uploaded the code but nothing happens on the ESP.
After many many hours of looking stuff up, I finally found a github repo (https://github.com/todd-herbert/heltec-eink-modules) that contained a correct and working configuration file I can use. Sure enough, the code finally ran on the ESP.
Next up is getting LVGL up and running and the basic UI on the screen!

CAN ⚡🚀
approved Key-Do ago
Tier approved: 4
Grant approved: $42.00
MrDiamond
added to the journal ago
Test Print #2, Added basic UI code
Test print 2 went a little better than last time. I increased the wall size a lot which helped a lot with the flimsyness, and overhauled the screw holes. Turns out 2mm threading does not print well on a .4mm nozzle, so I scrapped that altogether and just put a hole that is roughly the size of the screw to let it make its own threads. This worked somewhat, for some reason only one of the screw holes worked perfectly while the other one just let the screw slide around in it, despite them being the same size in the design.
Anyway, I've added all the basic UI code in C++. For me to continue working on the project, I'll need the products to build it so I can finalize the designs and get the code past its prototype!


MrDiamond
submitted Key-Do for ship review ago
MrDiamond
added to the journal ago
First Print!
…went about as well as you’d think. Here’s a non-exhaustive list of what went wrong:
- Walls were WAY too thin (literally one wall loop)
- Screw holes just don’t work at all
- Supports for said screw holes were too hard to get out
I also forgot to add the keychain part of it, but we’ll cross that bridge later.
Anyway, V2 incoming!

MrDiamond
added to the journal ago
Finished the first prototype case model!
The first prototype case model is finished! I'm going to print this off and see if attaching the two pieces works, as this is the first time I've really modeled anything with screws. It's going to use 2 M2x6 screws, since the components inside have to fit snugly, I can't really fit any more screws while still being able to put all the components inside.


MrDiamond
added to the journal ago
More Modelling!
Did some more design work! I found a better battery and button board that will fit my needs better, and they are actually a much better price as well. I've updated the BOM to reflect this.

The case will need some more work obviously, I need to figure out the buttons and some connectors, as well as attaching the bottom part of the case and the keyring. Some revisions will definitely be needed when I receive my products. Luckily, I own a 3d printer that will make this very simple.

MrDiamond
added to the journal ago
Basic UI Design, BOM.yml
Made a quick UI for the home screen in LVGL using EEZ Studio
I also found equivalent products on Aliexpress so it's cheaper, and added it to a BOM.csv
Display/ESP32 - https://www.aliexpress.us/item/3256807023441750.html
Battery (3000mAh) - https://www.aliexpress.us/item/3256809827427989.html
Buttons - https://www.aliexpress.us/item/2251832095969331.html

MrDiamond
added to the journal ago
Idea drafting and product finding
I went through what I wanted the device to do and how I'll make it happen. I found the exact products I need on amazon.
The device will be an ESP32 2.1in E-Ink display with 4 buttons off to the side for control. It will also have a 3000mAh rechargeable battery.
It will show basic information including time and weather, and your to-do list of course.
The next order of business is to design the UI more clearly and draft some more features, as well as getting all the parts!
Leaving these links to the products below for me but also for documentation:
- Display and board - https://www.amazon.com/dp/B0D9JTHTYP
- Battery - https://www.amazon.com/dp/B0DP2JKFJG
- Buttons - https://www.amazon.com/dp/B07PFK5Z7L

MrDiamond
started Key-Do ago
10/6/2025 - Idea drafting and product finding
I went through what I wanted the device to do and how I'll make it happen. I found the exact products I need on amazon.
The device will be an ESP32 2.1in E-Ink display with 4 buttons off to the side for control. It will also have a 3000mAh rechargeable battery.
It will show basic information including time and weather, and your to-do list of course.
The next order of business is to design the UI more clearly and draft some more features, as well as getting all the parts!
Leaving these links to the products below for me but also for documentation:
- Display and board - https://www.amazon.com/dp/B0D9JTHTYP
- Battery - https://www.amazon.com/dp/B0DP2JKFJG
- Buttons - https://www.amazon.com/dp/B07PFK5Z7L

10/11/2025 12 PM - Basic UI Design, BOM.yml
Made a quick UI for the home screen in LVGL using EEZ Studio
I also found equivalent products on Aliexpress so it's cheaper, and added it to a BOM.csv
Display/ESP32 - https://www.aliexpress.us/item/3256807023441750.html
Battery (3000mAh) - https://www.aliexpress.us/item/3256809827427989.html
Buttons - https://www.aliexpress.us/item/2251832095969331.html

10/11/2025 3 PM - More Modelling!
Did some more design work! I found a better battery and button board that will fit my needs better, and they are actually a much better price as well. I've updated the BOM to reflect this.

The case will need some more work obviously, I need to figure out the buttons and some connectors, as well as attaching the bottom part of the case and the keyring. Some revisions will definitely be needed when I receive my products. Luckily, I own a 3d printer that will make this very simple.

10/11/2025 7 PM - Finished the first prototype case model!
The first prototype case model is finished! I'm going to print this off and see if attaching the two pieces works, as this is the first time I've really modeled anything with screws. It's going to use 2 M2x6 screws, since the components inside have to fit snugly, I can't really fit any more screws while still being able to put all the components inside.


10/11/2025 9 PM - First Print!
…went about as well as you’d think. Here’s a non-exhaustive list of what went wrong:
- Walls were WAY too thin (literally one wall loop)
- Screw holes just don’t work at all
- Supports for said screw holes were too hard to get out
I also forgot to add the keychain part of it, but we’ll cross that bridge later.
Anyway, V2 incoming!
10/11/2025 10 PM - Test Print #2, Added basic UI code
Test print 2 went a little better than last time. I increased the wall size a lot which helped a lot with the flimsyness, and overhauled the screw holes. Turns out 2mm threading does not print well on a .4mm nozzle, so I scrapped that altogether and just put a hole that is roughly the size of the screw to let it make its own threads. This worked somewhat, for some reason only one of the screw holes worked perfectly while the other one just let the screw slide around in it, despite them being the same size in the design.
Anyway, I've added all the basic UI code in C++. For me to continue working on the project, I'll need the products to build it so I can finalize the designs and get the code past its prototype!


10/30/2025 - First code running on real hardware!
The ESP finally arrived, and I immediately got started on getting some basic code to run on it. Safe to say that actually wasn’t easy at all.
I refuse to use Arduino IDE in favor of PlatformIO, as Arduino IDE is generally terrible, and I want to fine tune what I code. Unfortunately, there is absolutely 0 documentation on how to get it to actually work on PIO. It successfully uploaded the code but nothing happens on the ESP.
After many many hours of looking stuff up, I finally found a github repo (https://github.com/todd-herbert/heltec-eink-modules) that contained a correct and working configuration file I can use. Sure enough, the code finally ran on the ESP.
Next up is getting LVGL up and running and the basic UI on the screen!

12/28/2025 - First case prototype + Working UI Code!
Been a while! I've been quite busy but I've finally gotten a working case prototype that can hold everything!
The case

Yes, everything rattles around but that will be fixed within a couple more prototypes but that's not the biggest part of my worries. Also ignore that this one is green, I got lazy and didn't want to change filament.
Buttons
Getting the buttons to work took not actually that long (if I knew more about electronics it would've been easier)
Basically, this is the schematic for the esp32 board I'm using:

Where the button board is attached to GPIOs 44, 43, 41, 40, and 39 (literally just inserting it's header into the board). Unfortunately for me, GPIO 0 is the BOOT pin, so I can't access GND to connect to the button board. Here's what I tried at first to connect GND to the button board without putting a pin in the BOOT:


Yes, that is a tiny metal piece connecting GPIO 44 to GND. Yes, this was a terrible idea. No, I do not have access to soldering tools (even though I definitely should). No, it did not work.
Lucky for me, all I needed to do is set GPIO 44 to HIGH in the code and the buttons all worked, reading the other four pins.
LVGL
Getting the display to actually... display was a complete nightmare. Heltec provides exactly zero (0) documentation for their products other than some hardware specifications. I can't remember the exact details of why it never worked, but I did get it working in the end. Something about using PlatformIO instead of the (completely shit) Arduino IDE, and there not being any clear library to use (they have like 15 different repos and none of them worked).
I found a working library to interface with Heltec's shitty firmware, just called heltec-eink-modules (full details in the repo platformio.ini).
Up Next
I hope to get a final prototype of the case that holds everything together without rattling and is easy to print/use, and uploading those final files to the repo.
The hardest part is up next though, getting the UI code to actually... do something. Right now it has some basic non-functional UI. So, we'll see how that works. Thanks to the people that have followed along!
Also, I have updated the tier of this project from 4 to 3, as I think this project fits that description better. (I don't need any more parts or money, I just wanted to make sure it was accurate)
P.S.: I hate aliexpress. What do you mean that this battery I ordered isn't actually 2000mAh?

It's because you had to select the right "color" when all the options look like this:

(you wouldn't believe it, I selected the wrong one.)