Close
0%
0%

LightInk

ESP32 E-Ink watch that can run solely on solar power

Similar projects worth following
This project tries to mimic the 90s solar digital watches that run forever. But with newer technology (eInk/WiFi/BT/Lora/GPS, ...). The challenging part of this project is to minimize the ESP32 on time to sub "ms" levels while updating the display. This was done with re implementation of SPI in the wake stub code of the ESP32. The requirement for a feature to be added in is that it can be power gated and off when not needed, and overall does not use much power (and fits in the space!). The project name comes from Light-weight - Light powered eInk.

All the code and materials is in Github: https://github.com/DarkZeros/LightInk
Checkout the features demo video:

:

This project started long time ago in 2019, with the idea to build a solar watch that can use LORA packets to communicate to a receiver at home. Back then i started with a Heltec Wireless stick lite and an external eink display.


Then I discovered "Watchy" https://watchy.sqfmi.com/ and immediately bought one, it didn't have what i wanted (sleek design, LORA, and solar), however i though it was a very good foundation.


Back then, I contributed to Watchy many patches to optimize the display as much as I could, but at some point, that was not enough and new Hardware was needed. I tested Watchy + Solar cell and all I could get was 40 days of uptime:

Therefore i started creating my own board based on a DC-DC low quiscent current chip (TPS63900 1.8-V to 5.5-V, 75-nA IQ Buck-boost Converter). There were shortages, so the project weny idle for 2 years....

After receiving them in 2023 and when there was supply again, I started working on it. Build many PCBs that did not work, trying to get Touch+Solar+DC/DC+RTC+Display working. After many tests and trials (with many failures), I managed to have a watch working, using 2.7V only (the eink and the ESP32 seem to not care running on 2.7V), and the battery was 2 months (instead of 1 month of Watchy), with the solar giving an extra month (3 in total)!

Also because the watchy buttons were a PITA to work with, I decided to use the touch function in the ESP32, and that work quite well i have to say (also makes the case smaller).


I kept doing changes to the firmware, and my new HW, etc, until I hit a hard wall.

The ESP32 takes 28ms to boot, and that uses around 1mAs of current. About 60% of the total power was being used by the ESP32 just to boot (not to update or display anything). 

This is the graph of typical GxEDP2 update with Arduino:


This is what i managed to get before hitting the wall (look at all that power in Booting from Flash!):

The power usage is sadly not on any particular piece of code. Just on the flash sending the data to RAM in order to boot, so there is nothing you can do (other than remove most of the functionality and reduce the binary size to the minimum).

The wakeup stub is a function pointer set in RTC memory pointing to RTC memory itself, if set, the ESP core0 will call it during boot. This bypasses FLASH and everything entirely, the ESP32 boots there immediately in microseconds. However no function or code that is not in RTC can be run, for this reason eveything needs to be reimplemented, SPI (accesing the HW) display communication, etc.

Took me a couple of months, but finally managed to do it, reducing the power 2x, and getting into the ballpark of 6-10 months with a 100mAh battery. (The solutions of using wakeup stub is actually amazing, and i recomend for other projects as well, better than the ULP, you have access to all HW features, check https://github.com/DarkZeros/LightInk/blob/main/firmware/main/deep_sleep.cpp and https://github.com/DarkZeros/LightInk/blob/main/firmware/main/uspi.h)

And finally, this is the result, how the consumption looked with the boot part removed:


I implemented code to handle the SPI communication and to update the region of the display controller buffer. With this I could boot+send+update display in less than 1ms. Also, I could just power of the ESP32 to deep sleep again, while waiting for the display to update, saving me 1mA on light sleep!

With this I finally managed to have a watch with a battery running 9 months (until I decommission it for a newer HW).



Since then I have polished the code, the case, added LORA (yeah!) even GPS (was a bad idea), and I am still building the project up.

But I think this project has good ideas (Touch, wakeup stub, eink driver) that can benefit the community so I would like to share it. And if possibly receive feedback from other people...

Read more »

20250702_161733.jpg

JPEG Image - 3.66 MB - 04/23/2026 at 18:51

Preview

20250702_140024.jpg

JPEG Image - 3.13 MB - 04/23/2026 at 18:51

Preview

20250702_150217.jpg

JPEG Image - 2.26 MB - 04/23/2026 at 18:51

Preview

20250702_143933.jpg

JPEG Image - 2.40 MB - 04/23/2026 at 18:51

Preview

20250702_143744.jpg

JPEG Image - 1.93 MB - 04/23/2026 at 18:51

Preview

View all 7 files

  • 1 × ESP32 PicoD4
  • 1 × GDEH0154D67 or compatible 200x200 B/W 1.54inch panel
  • 1 × Wio-SX1262 If you can find it without the connector, better, since you have to desolder it
  • 1 × Piezo Electric Disc Speaker 10-15mm
  • 1 × 316040001 Mini Vibration Motor 3V 2.0mm Circular

View all 9 components

  • 1
    PCB building

    I recommend using a PCB building service from JLCPCB and similar. 
    They also supply the components for an extra fee. 

    Building it yourselve can be challenging, since the board is designed to be very small to fit in the space.
    But if you want to try go ahead! You can use a hot plate like (Miniware MHP30) it worked well for me during my troubleshooting and fixes before ordering new boards.

    The project is designed to be just 1 sided, like Watchy, this allows a flat placement of the eInk display on the back, providing extra support and allows easy soldering and mounting.

  • 2
    Case 3D printing

    The case is printed in 2 separate pieces front and rear.
    I used again an online high quality service, otherwise the result might be rough at home.
    But i printed some at home and they were quite good (except for the border of the solar cell).

    I used glue (loctite or similar) to glue the pieces together as well as the components to the case.

    After closing the unit, i live with it, or break it apart to get the components back.

  • 3
    Preparing components

    The solar cell comes per-soldered with some cables, these interfere with the panel.
    It is better to remove the glue and unsolder these cables leaving the solar panel ready to solder again.

View all 9 instructions

Enjoy this project?

Share

Discussions

forthprgrmr wrote 7 hours ago point

A BMA400 accelerometer from Bosch is 0.16uA in sleep.

  Are you sure? yes | no

Farooq [Master Patata] wrote 05/10/2026 at 09:08 point

This is an excellent project. I really dislike having a smart watch. But I really love to have a programmable watch with excellent battery life. The current watch I've got is a Casio which as they advertise, the battary should last 10 years. Recently, Pebble was relaunched. I first thought it would be a good one for me. But later came to the conclusion that the battery life is too short.

I have some questions.

First, what are the reasons you've gone for ESP32 D4? Wouldn't something like STM32 have lower power consumption?

Second, is this watch as you have built it, water resistant?

  Are you sure? yes | no

Daniel Ansorregui wrote 05/10/2026 at 09:41 point

Thanks for the comment and the interest!

The original idea of this project is a challenge (can we run a full feature ESP32 with BT and WIfi but low power enough?)

I agree that STM32 would have been a better choice for "low powerness".

I also liked the fact of using any arduino library if needed.

The project is not waterproof, since the touch buttons likely will not work underwater or detect like is being touch all the time. 

However if you put resin in the case, and remove the USB port, it should protect the electronics.

But that would require a WiFi flashing support for updates (that i have not yet implemented)

  Are you sure? yes | no

Farooq [Master Patata] wrote 05/10/2026 at 10:51 point

An alternative is using pogo pins and a custom station, like other smart watches do for the charging. Personally, I'm looking for a smart watch, or better said, programmable watch but without any wireless connectivity. So I guess I can remove the LoRa and instead the space could be used for a charge IC and stuff.

The other thing which comes to me mind, is that some old watches, older than me, used movements of the hand as a way to get power. And they didn't need external power source at all. I'm not sure. Perhaps I'm mistaken. But if that's a thing, it could be used to extend the battery life to like more than a year.

  Are you sure? yes | no

Bessie Forrest wrote 04/29/2026 at 20:52 point

Impressive project!

Tough I loved my Watchy to death, the lack of ESD protection on the USB and subsequent self-destruct on two occasions burned me on the concept of a hackable e-ink watch.

Your spin with the solar cell is great, and the touch buttons are also both more reliable and are less bulkier than push buttons I imagine. Worth following for sure!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates