E-ink info screen at the front door

So I built a small E-ink (ESP32) info screen for the front door.

Link to the original blog post with a nice text & pictures layout.

The problem:

When leaving the house, it’s nice to see some information displayed at the door, like temperatures, weather and messages for the kids etc.

Actually, there is no problem. I just like to tinker so I invented a problem.

The solution:

I’ve tried to build powered e-ink display several months ago and I failed:

  1. E-ink display showing temperatures from Home Assistant
  2. How I killed e-ink display

Now I finally finalized the build and installed it at the front door. It looks like this:

e-ink display and front door
e-ink display and front door closeup showing temperatures and humidity from Home Assistant

Electronics

After previous failures with the e-ink display and esp32 board I ordered new displays and the board.

I couldn’t find the integrated board with the display, so I ordered them separated:

Case

There was no suitable case for this board and separated display so I designed and 3D printed a new one:

3d case in tinkercad, bottom-up
3d case in tinkercad, top-down
3d case printing

The case has snappable lid for quick assembly-dissasembly. I used white PLA filament for printing.

ESPHome code

The ESPHome YAML code below is a modification of the following code:

  • Paul-Vincent Roll github code (source),
  • Stephan Wijman’s Blog (source) and
  • Madalena’s Weatherman Dashboard for ESPHome (source).

Thanks guys! Without your code, I would never figure it out.

My modification’s: adaptation for a smaller display (2.13”), different refresh logic and my specific Home Assistant sensors.

  1. part: definition of global variables

No changes to the original code here.

2. part – script for updating the screen

Changes from the original code: turning on and off onboard LED when refreshing display.

3. part – function that periodically check if the screen needs to be udpated

Changes from the original code: I’ve increased update interval to 10 minutes to lower the number of refreshes.

4. part – init

No updated of the original code here.

5. part – load fonts

6. part – e-ink init and information display. These settings work for my display:

7. part: get numeric sensor data from Home Assistant

Temperatures from 2 sensors, weather from Weather integration.

This code is specific to my sensors and HA.

8. part – sensors related to e-ink updating

No changes to the original code.

9. Misc switches: onboard LED and for restarting ESP32

10. Text sensors – weather and user defined notes to be entered in HA and displayed on e-ink

This code is specific for my HA and sensors. Replace ‘weather’ with your weather integration and input_text.xxxxx with your input fields (helpers) in HA.

11. Binary sensor – presence detection and e-ink priority updates

This code is specific for my HA and sensors. Replace ‘binary_sensor.ikea_motion_03_occupancy’ with your motion detection sensor.

This code updates e-ink if the sensor detects presence and if there is a fresh data from HA.

The original code doesn’t include this kind of priority update. The original code (from Weatherman) updates the screen every minute if there is a fresh data. This was too slow for me. If I stand in front of the display I want a fresh data immediately and waiting is not acceptable.

The next minor change is blinking onboard LED if there is a motion detected.

12. Misc functions for controlling ESP (restart, shutdown, update screen)

No changes to the original code.

I omitted the code for WIFI and other usual ESPHome functions (IPs, uptime sensors etc.).

Here’s how it looks like in Home Assistant:

home assistant info screen of e-ink display

The image above also shows 2 input text fields. These texts are displayed on e-ink display. So I can entertain kids with various dad jokes everytime they leave the house.

I’m also interested how many times e-ink display refreshes:

home assistant info screen of e-ink refreshes, 2 charts total and daily refreshes

The number of refreshes is between 20-35 refreshes per day (10 000 per year). Why is a low number of refreshes important? E-ink displays have limited life expectancy. I read it’s around 1 000 000 refreshes for this particular display (see source). Therefore it should last 100 years at my current refresh rate.

This sounds a lot, right?

But what if I refreshed the display only every minute (e. g. to display time)? Then it would probably die after 2 years.

The official specification of e-ink display

Misc

The biggest effort was to mount the USB cable in the wall. I chiseled the wall, inserted the cable and then plastered/painted it. See the first picture – the cable is coming out of a wall under the mounted case.

Conclusions/Key takeaways

  • It’s a fun project,
  • the displayed info will probably change in time to display other relevant info
  • the screen is small and I have to think hard which information is worth displaying. I didn’t find the optimal info yet.

Disclaimer

The links to the products are not affiliate links and I don’t receive any compensation for linking.

The code and the ideas are mostly from HomeAssistant and ESPHome community forums (referenced above).

Hashtags: #eink #esphome #esp32 #homeassistant #diy #case #3dprinting


by

Tags:

Comments

2 responses to “E-ink info screen at the front door”

  1. in_sympathy Avatar

    @tomi amazing job, but how on earth did you manage to get that much text into one post? 😃

    1. Tomi the Slav and 1024 others Avatar

      @in_sympathy @tomi it's a wordpress blog, federated via activitypub plugin.
      Tried shortened versions of the posts showing in the fediverse, but still struggling with configuring it to my liking.

Leave a Reply

Your email address will not be published. Required fields are marked *