Use ESPHome with e-ink Displays to blend in with your home decor!

@Spl4sh, Look at the calendar.get_events action in Home Assistant to pull more than the next event from the calendar.

Thank you for your response. What changes should I make, please? I’m not sure I fully understand the article :frowning:

Right now, you’re showing just the next event using the default calendar entity, which only exposes one upcoming event at a time. To display the next 3 events, you’ll need to take a slightly different approach using a built-in Home Assistant service called calendar.get_events.

This service lets you fetch a list of upcoming events (e.g. next 3) within a time range, like the next 7 days. The idea is to call this service regularly, store the top 3 events in some helper entities like input_text, and then read those values from your ESPHome display.

Here’s a general breakdown of the steps you’d need to follow:

  1. Create a script in Home Assistant that calls the calendar.get_events service and saves the results (like event title and time) into helper entities. These can be input_text entities that act as placeholders for each event.
  2. Set up a way to regularly update them. You can automate this by running the script every 15 minutes or so, using a simple time-based automation.
  3. Update your ESPHome display so it reads from the three new input_text entities, instead of just one calendar sensor.

This approach gives you a lot of flexibility, you can format the event details however you want (date/time, summary, description) and decide how often to update them.

Hello!
I’m experiencing an issue with my Waveshare 7.5" e-ink display connected to an ESP32 Waveshare board mentioned here.
For a while I had zero issue, but tonight I ran quite a few refreshes for debug purpose (roughly a 100) and adding more stuff to it.
When displaying minimal content (text over half of the screen), the blacks appear deep and proper. However, as I add more content to the screen, the blacks become increasingly washed out and gray. Interestingly, during the refresh cycle when the screen flickers, I can see proper deep blacks momentarily. I would think to either a power distribution limitation in the e-ink display when handling larger amounts of black content, or potentially a physical connection issue with the ribbon cable (which I double checked). I’ve checked my configuration but haven’t been able to resolve the problem. Also this morning having the same text displayed on 2/3rd of the screen didn’t seem to be an issue, but tonight, its washed out. If I go back to half of the screen (top part or bottom, makes no difference), deep blacks are back.

I’ve got the ā€œv3 stickerā€ screen.

 - platform: waveshare_epaper
    id: eink_display
    cs_pin: GPIO15
    dc_pin: GPIO27
    busy_pin: GPIO25
    reset_pin: GPIO26
    reset_duration: 2ms
    model: 7.50in-bV3
    update_interval: never
    rotation: 90°
    lambda: |-

Has anyone experienced similar issues or have suggestions for improving black levels when displaying more content? Have I messed up my screen?

EDIT :
I initially worked with a random esp32 chip, which was working well, then I used the waveshare one, which is forking directly without soldering.
I ordered 2, one was falty and replaced by waveshare, and the second one was slowly causing the mentioned issue.
I reverted to another random esp32, which requires a bit of cable management but at least the screen looks great.
To figure this out, I ordered a second screen, so now I have to start another project to use it :smiley:

What is the current real alternative to Ikea RIBBA, this series is no longer on sale.

Maybe Rƶdalm can be an alternative?

1 Like

The depth is 3 cm, and in RIBBA there were 4, is that enough?

I don’t see an issue with that, the board is approximately 1 cm thick so that should be no problem

If only we knew how much free space there really is (glass, backing, protrusion in front), but out of these 3 cm, 1 or 0.5 may remain

1 Like

I solved in this way:

display:
  - platform: waveshare_epaper
    id: eink_display
    cs_pin: GPIO15
    dc_pin: GPIO27
    busy_pin:
      number: GPIO25
      inverted: true    
    reset_pin: GPIO26
    reset_duration: 2ms
    model: 7.50in-bV3
    update_interval: never
    rotation: 90°

    pages:
      - id: pagina1
        lambda: |-
           it.clear();  // Pulisce lo schermo prima di scrivere

I’ve been messing around with an Inkplate6v2 for a while now. I think if you’re running it on battery, you pretty much have to use deep sleep, otherwise you’ll end up charging it way too often. The only downside is that partial updates don’t work after waking up from deep sleep when using esphome. Or has anyone found a workaround for that?

Finally, thanks to your examples, I managed to finish my little project. And I wanted to share it with you!


2 Likes

Many thanks for the inspiration, not only do I have a useful display, I also learned a lot.
Here is my take on your idea:

1 Like

Thanks so much for all the examples and inspiration! I got my little version up and running and it’s so cute! I ran into a bit of trouble getting the weather forecast to work with the new weather.get_forecasts action but I eventually got it figured out.

3 Likes

You mean the inverted at gpio25 solved the lack of contrasts between on screen?

YES, but a small note, I have 2 displays, an original waveshare and a clone, with the original no problem, with the clone if densely populated when waking up in the morning (after being in deep sleep all night) it is slightly ā€œblurredā€ but with each update it improves. It is probably also due to the lack of a full refresh which is instead present in Arduino!

I just setup my own display using your project. It could not have gone smoother. After a few changes to use my own temperature and humidity sensors, setting up Apple and Google calendars in HA, and a couple minor modifications to the layout, everything was working. From unboxing the hardware, to installing the framed device in my kitchen took just four hours!

Thank you for sharing your setup on GitHub!

3 Likes

Here’s my latest project, a portable home dashboard, mainly designed to show a giant umbrella icon when rain is due so I can take my bike jacket (not shown).

This is a Waveshare 7.5" ePaper (black and white) powered by a Firebeetle2 ESP32-C6 and a 10000mAH battery, inside a 3D printed case. It shows the status of my Aqara pet feeder, Roborock vac, lights, and local transport. As well as local sunrise/sunset, battery and wifi levels.

Here’s my revised Bitcoin charting display based on the same platform (in IKEA frame), front and back:

If anyone wants my config (almost entirely rewritten and remodelled) or more photos, let me know :pray:

5 Likes

Hi PharkieB,

First of all, this looks very nice! I was going for the same setup with the Firebeetle 2.

Could you share some images/information on how the jumper wires are connected from the HAT to the Firebeetle? And if it’s not too much asked, i’d like to see the config as well.

Thanks! :pray:

Ah sure, sorry for the delay, I wasn’t notified about your reply. Welcome to the forums, cheukkie, and thank you!

The pins I use (others could work too):

  clk_pin: 4
  mosi_pin: 6 # DIN
  cs_pin: 7
  dc_pin: 1
  busy_pin: 3 (inverted!)
  reset_pin: 2

I’ve put the files up on a gist:

(main config is loooooong)

That should get you going, and if you have questions about it just let me know.

Best wishes!

1 Like