ESPHOME - Waveshare 7.5 inch E-Ink E-Paper Display

I bought a 7.5 e-ink screen from Waveshare here and got it to work via an Arduino and on a Wemos Lolin32 but seem completely unable to get it to work on ESPHome…

ESPHome version is v2022.2.6, the ID on the label connect of the screen is WFT0583CZ61 and hooked it up according to the config from the source provided by Waveshare itself. It does not match 1 to 1 with the image on the site I bought it from, connector seems different.

I’ve tried different ESP32 boards, bunch of different wiring, all 7.5 inch models… I have no clue what else I can do.

With an Arduino Uno I used

With the Wemos Lolin32 I used
https://www.waveshare.com/wiki/File:E-Paper_ESP32_Driver_Board_Code.7z

DEV_Config.h lists;

#define EPD_SCK_PIN  13
#define EPD_MOSI_PIN 14
#define EPD_CS_PIN   15
#define EPD_RST_PIN  26
#define EPD_DC_PIN   27
#define EPD_BUSY_PIN 25

Using the same pins as on the working Arduino framework code;

substitutions:
  device_name: lolin-test
  # online example
  # gpio_spi_clk_pin: GPIO25
  # gpio_spi_mosi_pin: GPIO26
  # gpio_cs_pin: GPIO32
  # gpio_dc_pin: GPIO17
  # gpio_reset_pin: GPIO27
  # gpio_busy_pin: GPIO33
  
  # my attempt
  # gpio_spi_clk_pin: GPIO18
  # gpio_spi_mosi_pin: GPIO23
  # gpio_cs_pin: GPIO5
  # gpio_dc_pin: GPIO22
  # gpio_reset_pin: GPIO21
  # gpio_busy_pin: GPIO4

  # EPD_7IN5_V2 / DEV_Config.h
  gpio_spi_clk_pin: GPIO13
  gpio_spi_mosi_pin: GPIO14
  gpio_cs_pin: GPIO15
  gpio_dc_pin: GPIO27
  gpio_reset_pin: GPIO26
  gpio_busy_pin: GPIO25

  
esphome:
  name: ${device_name}
  name_add_mac_suffix: false

esp32:
  board: lolin32
  framework:
    type: arduino

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Lolin-test Fallback Hotspot"
    password: "IFOpMALE9VYQ"

captive_portal:

# Enable logging
logger:
#  baud_rate: 0

# Enable Home Assistant API
api:
  password: "2HQ7Y9YseHMk2uydHBxxxxxxx"

ota:
  password: "2HQ7Y9YseHMk2uydHBxxxxxxx"
  
font:
  - file: 'fonts/OpenSans-Regular.ttf'
    id: font_regular_8
    size: 8
  - file: 'fonts/OpenSans-Regular.ttf'
    id: font_regular_65
    size: 65
    
  - file: 'fonts/OpenSans-Bold.ttf'
    id: font_medium_20
    size: 20

web_server:
  port: 80

time:
  - platform: homeassistant
    timezone: Europe/Amsterdam
    id: current_time
    on_time_sync:
      - component.update: uptime_timestamp

switch:
  - platform: restart
    name: "$device_name Restart"


sensor:
  - platform: uptime
    name: "$device_name Uptime Sec"
    id: uptime_sec
    internal: true

  - platform: wifi_signal
    name: "$device_name WiFi Signal"
    update_interval: 120s

  - platform: template
    id: uptime_timestamp
    name: "$device_name Uptime"
    device_class: "timestamp"
    accuracy_decimals: 0
    update_interval: never
    lambda: |-
      static float timestamp = (
        id(current_time).utcnow().timestamp - id(uptime_sec).state
      );
      return timestamp;

spi:
  clk_pin: $gpio_spi_clk_pin
  mosi_pin: $gpio_spi_mosi_pin
  id: epaper_display

display:
  - platform: waveshare_epaper
    id: epaper
    cs_pin: $gpio_cs_pin
    busy_pin: $gpio_busy_pin
    reset_pin: $gpio_reset_pin
    dc_pin: $gpio_dc_pin
    # model: 7.50in-bV2
    model: 7.50in-bc
    # model: 7.50inV2
    # model: 7.50in
    # full_update_every: 30
    lambda: |-
      ESP_LOGI("display", "Updating...");
      // OUTSIDE
      it.printf(7, 15, id(font_regular_8), TextAlign::BASELINE_LEFT, "Dehors");
      it.line(78, 14, 293, 14);
      
      int time = id(current_time).now().hour * 100 + id(current_time).now().minute;
      // TIME
      it.line(7, 337, 293, 337);
      it.strftime(7, 363, id(font_medium_20), TextAlign::BASELINE_LEFT, "%A", id(current_time).now());
      it.strftime(7, 393, id(font_medium_20), TextAlign::BASELINE_LEFT, "%d %b. %y", id(current_time).now());
      it.strftime(290, 393, id(font_regular_65), TextAlign::BASELINE_RIGHT, "%H:%M", id(current_time).now());
1 Like

Hi,
Did you get anywhere with this?
I have a similar issue. I can get my 7.5in display to apparently work with ESPHome through HA but the display is very faint. I can hardly read it.
I’m using the Waveshare ESP32 driver board which uses the standard Waveshare pin outs

Yes I added a new version to esphome, Waveshare E-Paper Display — ESPHome , see 7.50inV2alt


3 Likes

Thank you Pat, this is a big improvement.

I still find that if I include more than 1 line of text (big font, 60px) the text quality starts to degrade. I know very little about the Waveshare epaper or ESPHome but can you suggest any options to solve this issue.

Same issue here - I’m using the 7.50inv2alt, but the picture is very grainy and just keeps getting worse. Not sure what causes this or how to fix it?

Same issue for me too! Very grainy on my new 7.5" V2 using 7.50inv2alt, very similar to the picture @alexmutch posted. I experimented with changing the reset_duration and that didn’t seem to resolve these issues.

I’m also having the same issue. The alt helps but still grainy. I have a display labeled “075BN-T7” and it has the V2 sticker.

With your ESP32 driver board did you try flipping the left dip switch from B to A? Mine came preset to B, but the 7.5 inch screen (and most of the others) need to be set to Trigger State of A

My display was grainy and had streaks in it until I did this

3 Likes

Thank you @fallen293 switching to A fixed it. I was certain I had checked this on the Waveshare Wiki but apparently not :blush:

1 Like

Hi,
I have this 7.5 epd display (from Ali express, sold as waveshare 7.5 v3 [DEPG0750RNU790F30HP and label v3].

I’m using the esphome config from Madelena (https://github.com/Madelena/esphome-weatherman-dashboard) with model config “7.50in-bV2” and switch in pos A:

display:
  - platform: waveshare_epaper
    cs_pin: GPIO15
    dc_pin: GPIO27
    busy_pin: GPIO25
    reset_pin: GPIO26
    model: 7.50in-bV2

After booting it behaves strange [picture 1], after swapping color_black and color_white it is little better but still not what i’m looking for [picture 2]


1 Like

Sorry I don’t have that version (yet, knowing myself I’ll buy it anyway), did you try switching between A and B?

I know that feeling, I ordered aslo the B/W only panel,

Somehow with the waveshare (clone?) esp32 board it behaves wierd, when I connect the other adapter with different driver hardware it works

Going to look into the delta between the boards

I am having exactly the same issue as you.

Same project from Madelena and same display model.

It gets better sometimes (but never disappears), but lately got a bit worse. First I though it was some sort of burn-in on the panel but it is not. If I change the rotation, the same sort of streaks appears but on different position (following the new image/text position).

Hopefully there will be a solution for that using waveshare esp32 board.

@doubleU , what is the other adapter you used?

Try adding the line reset_duration: 2ms

spi:
  clk_pin: 5
  mosi_pin: 18

display:
  - platform: waveshare_epaper
    cs_pin: 22
    dc_pin: 23
    busy_pin: 32
    reset_pin: 21
    model: 7.50inV2
    update_interval: 30sec
    reset_duration: 2ms
    lambda: |-
      it.print(563, 340, id(tm30), TextAlign::TOP_CENTER, "Hello World");

hey Bruhido, apperantly the controller I used (from Aliexpress) seems to have a weak power regulator, I not use a high quality board with proper regulator and external epaper driver board (typically for rpi2040) worked right away after the swap

I tried, but no difference on results. Still shows as before.

If I do a more frequent refresh (like every 2min it is not as bad, but with a 2hs refresh it stays as showed on the picture.)

Thanks @doubleU . I am using the controller also purchased from Waveshare (out of their store on AliExpress). This issue was not happening before, but started a few days ago after a month of working “somehow” properly.

When the screens refreshes, it does shows a perfect screen just to draw it again with all those streaks after. So all things led me to agree with you it is the controller in my case as well.

Sorry, but I did not follow your alternative set-up. Would you mind sharing the link for the new parts you replaced? Does it still work with the same setup on ESPHome?

For reference, I am currently using this driver board:

Hi @Bruhildo

just checking it is not 2min or 2hs it is 2ms

reset_duration: 2ms

Sorry, my bad. I was not clear.

I changed the ‘reset_duration: 2ms’ and did not any difference with 2ms or 200ms (default).

What I was saying is that when I change the ‘update_interval:’ to a more frequent time (like 5 min) it gets a better image than if I use 2hs instead. But even in this case I am still unsure if this is what was causing issues with further tests I did today. I understand now that the more likely issue is the driver board.

That is the exact board that gave me troubles, it also got quite hot in the process. Might be a bit hard to see but I’m using this pi pico board and wired it to a esp32 board from ttgo with build in 18650 cell

1 Like