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

OK, let’s start our way to success! :laughing: Hopefully… :laughing:

What version of the board are you using? The one with the CP2102 or the CH343? You can see that on the small chip on the board. In the Amazon product you linked, the first picture, it’s the small black chip. If you zoom in on the product pic, you can see “CP2102” on that chip. Which is yours?

Have you taken the correct driver from the Waveshare page, corresponding to your chip? :slight_smile: And not offensive, are you sure? :wink: :laughing: Please double check.

Find them here:

Are you sure, the cable is a data cable (just to make sure, you didn’t use different cables for the other “working” ESP board)?

That said, I’m not sure, if the downloadable drivers on the Waveshare page are correct.

Link #1 for MacOS links here:
https://files.waveshare.com/upload/0/04/CH34XSER_MAC.7z
and #2 here
https://files.waveshare.com/upload/5/50/CH34XSER_MAC_(5).7z

You might need to try both, I’d start with the second one, seems more up to date.

And you said, you have tried different button combinations. Have you tried without? Just connecting and no buttons?

We’ll get there, but it seems tedious. :slight_smile:

Until when (which update)? My guess would be something with the forecast, as that was deprecated a while ago, and stopped working with 2024.4.x or 2024.5.x.

Try to see, what the states you are working with really say (developer tools). You can test everything from your code in the dev tools, and see what comes up. Let us know, with which part you get an error, so we can debug that one.

If you don’t know how to check this in dev tools, let me know as well, so I can write up some instructions. :slight_smile:

Hi @paddy0174,
many thanks. And trust me: I am old enough, that I won’t be offended by anyone that helps me. Many many thanks. I am really digging in the mud. If I sound offended, it might be due toi the case, that english is not my mother language
I took a foto, as the chip is not really readable.

I would guess that I have a CH343 and this

is the driver I have installed.

I just check, and this seems to be the exact same driver, you mentioned.

One thing I noticed: Before the error comes, I see something like

Loaded custom configuration from /Users/ry90/egeling.cloud/heubergweg-haus/homeAssistant/epaper/esptool.cfg
Serial port /dev/cu.usbmodem54E20349931
WARNING: Pre-connection option "no_reset" was selected. Connection may fail if the chip is not in bootloader or flasher stub mode.
Connecting............................................................................

Here I than press BOOT/EN and release EN than boot

Chip is ESP32-D0WDQ6 (revision v1.0)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 94:b5:55:1c:8a:74

The above seems to come from the ESP, or am I wrong? So a connection is there, still I get the error after

Uploading stub...
A fatal error occurred: Failed to write to target RAM (result was 01070000: Operation timed out)

How can I make sure, the driver is installed and accessed?

thanks
Juergen

resolved, my mistake was that I accidentally changed a setting.
As I also did the update shortly after, I associated one thing with another but I’ve already resolved it.
thanks

1 Like

Hi @paddy0174,
I gave up and went to windows. I successfully got the basic ESP installed with Windows within seconds. So it seems Mac is more a grafics machine than a hardware machine :slight_smile:

I now can connect with my mac to this page

and wonder which of the generated files I should flash how. (As I do not want to install the full esphome environment on this slow old windows machine.

~/epaper/.esphome/build/weatherman/.pioenvs/weatherman/firmware.bin 0x1000 
~/epaper/.esphome/build/weatherman/.pioenvs/weatherman/bootloader.bin 0x8000 
~/epaper/.esphome/build/weatherman/.pioenvs/weatherman/partitions.bin 0xe000 
~/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin

To me it looks as if they have to start at different memory places, which I cannot select at the webinterface. Or is firmware.bin the start, and the rest than “happens” with the next update OTA?

I do not want to brick the ESP.

thanks
Juergen

Hi @paddy0174 ,

I finally gave up and got it to run :slight_smile: As under Windows everything seemed to run smooth, I did install esphome at this old windows machine, and it worked perfectly at the first run.

I than could install all needed files from windows, and the ESP e-epaper is in my WLAN. I than could to my first OTA with my mac, and I am now a small step further: E paper shows “waiting text”, and I can start tomorrow to integrate the full system in my HomeAssistant.

As you seem to have some hardware knowledge, I would like to ask a question:

I saw some code, that updates the epaper, if a sensor “sees” a person. Which is great, but in my environment, it would be better, if I could have a small physical pushbutton that if pressed, gets the newest data and the e-paper is refreshed.

I got here the driver board description

and I think I could use a physical button like this

https://www.amazon.de/Gebildet-wasserdichte-Druckschalter-Momentanen-Hervorstehend/dp/B0811QKG1R/

to connect to an unused GPIO over this pushbutton to ground, add some “glue” with this

and I am done :slight_smile: right?

Is this at least a way to go, or totally wrong?

many thanks
Juergen

Hi alltogether,
I am still figuring our how to get all this running, and stumbled over the following warning:

In the code I (and it seems many others) are using, I cannot see the

inverted: true

anywhere in the code. I would have expected it here:

# Now render everything on the ePaper screen.
display:
  - platform: waveshare_epaper
    id: eink_display
    cs_pin: GPIO15
    dc_pin: GPIO27
    busy_pin: GPIO25
    reset_pin: GPIO26
    reset_duration: 20ms
#    model: 7.50inV2   # s/w board
    model: 7.50in-bV2  # r/s/w board
    update_interval: never
    rotation: 90°
    lambda: |-

But do not exactly know how to set the inverted true.

Or is this not a problem at all, and the doc at esphome.io is old/worng?

thanks
Juergen

Love this, thanks for sharing! I’ve ordered ny own screen and cpu now…

Just one question. Is there no better way to do layout, than to hard code pixel positions? No simple little ui framework we could use?

1 Like

Found this project and ordered a screen right away. This is my result. I stole a lot of code from here so if you see something familiar :slight_smile: thks

10 Likes

I have a question about my E-ink display that I’m using with ESPHome. As you can see in the picture, the text sometimes appears a bit faint and not as clear as I would like. The issue is that sometimes the text is very clear, but a few weeks later it looks like this. Has anyone encountered this problem before and knows what might be causing it?

I appreciate any help I can get!

Thanks in advance!

I think it depends on the screen you have. I have a 7.50inV2 with the label "075BN-T7 " on the back. I use the below settings. Switch on the driverboard in position B.

The busy_pin inverted is necessary for my screen because otherwise it will never power off and eventualy damage the screen. Without busy_pin inverted it will also show Timeout while displaying image! in the log

display:
  - platform: waveshare_epaper
    id: eink_display
    cs_pin: GPIO15
    dc_pin: GPIO27
    #busy_pin: GPIO25
    busy_pin: 
      number: GPIO25
      inverted: true
    reset_pin: GPIO26
    reset_duration: 2ms
    model: 7.50inV2alt
    # model: 7.50inV2
    update_interval: never
    rotation: 270°
1 Like

can you share your code?

1 Like

Got my display today (Waveshare ESP32 Board + Waveshare ESP32 Adapter + 7.5inch display) and after lots of trying out, I’m finally stuck.

This is my config:

# Google Fonts
font:
  - file: "gfonts://Inter@900"
    id: medium
    size: 60

# Pins for Waveshare ePaper ESP Board
spi:
  # SPI Clock Pin
  clk_pin: GPIO13
  # SPI Master Out Slave In Pin
  mosi_pin: GPIO14

# Pins for Waveshare ePaper ESP Board
display:
  - platform: waveshare_epaper
    id: screen
    # Chip Select Pin
    cs_pin: GPIO15
    # Data/Command Pin
    dc_pin: GPIO27
    # Busy Pin
    busy_pin:
      number: GPIO25
      inverted: true
    # Reset Pin
    reset_pin: GPIO26
    # reset_duration: 2ms
    model: 7.50inV2alt
    # update_interval: 60s
    lambda: |-
      it.print(40, 10, id(medium), "Hello World!");

And the log output looks like this (attached via USB cable to my PC because Wifi is flaky as soon as I add the above mentioned config to the yaml.

[22:32:35][I][waveshare_epaper:2464]: Power on the display and hat
[22:32:43][W][component:237]: Component display took a long time for an operation (7616 ms).
[22:32:43][W][component:238]: Components should block for at most 30 ms.
[22:32:43][I][waveshare_epaper:2464]: Power on the display and hat
[22:32:50][W][component:237]: Component display took a long time for an operation (7617 ms).
[22:32:50][W][component:238]: Components should block for at most 30 ms.
[22:32:50][I][waveshare_epaper:2464]: Power on the display and hat
[22:32:58][W][component:237]: Component display took a long time for an operation (7617 ms).
[22:32:58][W][component:238]: Components should block for at most 30 ms.
[22:32:58][I][waveshare_epaper:2464]: Power on the display and hat
[22:33:06][W][component:237]: Component display took a long time for an operation (7616 ms).
[22:33:06][W][component:238]: Components should block for at most 30 ms.
[22:33:06][I][waveshare_epaper:2464]: Power on the display and hat
[22:33:13][W][component:237]: Component display took a long time for an operation (7617 ms).
...

The display does show the “Hello World!” text, but inverts the colors a few times in a row every 5-10s. Every few minutes, it completely reboots.

I tried:

  • Switch A vs Switch B - no change
  • model: 7.50inV2alt vs model: 7.50inV2 - no change
  • setting inverted to false for busy_pin: with this the times in the logs are not ~7s but between 1s and 13s and everything on the display looks broken or it’s completely “white”

Any ideas what might be wrong here?

Looks like you run the script in batch or something. It should only power up the screen once. Flash 3 times and that’s it. Show the script section of your config

If you meant me: There is no scripts section. This is the whole YAML:

substitutions:
  name: "epaper-display-buero"
  friendly_name: KG.Büro ePaper Display

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  name_add_mac_suffix: false
  project:
    name: esphome.web
    version: '1.0'

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:

# Allow provisioning Wi-Fi via serial
improv_serial:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  domain: ""

  manual_ip:
    static_ip: 192.168.40.95
    gateway: 192.168.40.1
    subnet: 255.255.255.0
    dns1: 192.168.40.1

  # Fallback wifi access point in case wifi connection fails
  ap:
    ssid: "ePaper Fallback Hotspot"
    password: "password"

# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
captive_portal:

dashboard_import:
  package_import_url: github://esphome/example-configs/esphome-web/esp32.yaml@main
  import_full_config: true

# Sets up Bluetooth LE (Only on ESP32) to allow the user
# to provision wifi credentials to the device.
esp32_improv:
  authorizer: none

# To have a "next url" for improv serial
web_server:

# Google Fonts
font:
 - file: "gfonts://Inter@900"
   id: medium
   size: 60

# Pins for Waveshare ePaper ESP Board
spi:
 # SPI Clock Pin
 clk_pin: GPIO13
 # SPI Master Out Slave In Pin
 mosi_pin: GPIO14

# Pins for Waveshare ePaper ESP Board
display:
 - platform: waveshare_epaper
   id: screen
   # Chip Select Pin
   cs_pin: GPIO15
   # Data/Command Pin
   dc_pin: GPIO27
   # Busy Pin
   busy_pin:
     number: GPIO25
     inverted: true
   # Reset Pin
   reset_pin: GPIO26
   reset_duration: 2ms
   model: 7.50inV2
   update_interval: 60s
   rotation: 90°
   lambda: |-
     it.print(40, 10, id(medium), "Hello World!");

If you put
update_interval: never
It still refreshes?

No, then it does not refresh at all (which is expected), but still has the described WiFi connectivity issues.

I like also yours, could you share? Looks similiar what I want to do, thanks alit

OMG, I just started with HomeAssistant and figuring out everything. And I stumbled upon THIS HERE and… WANT

You gave an old guy motivation to learn new tricks! WOW! :star_struck:

2 Likes

Welcome to the community :heart_eyes:

1 Like