HINK-E075A07-A0 7.5inch 880x528 e-ink display with esphome - blank display

Hi there

I just got one of these https://www.aliexpress.com/item/1005008096259306.html
( HINK-E075A07-A0 7.5inch 24Pin 880x528 e-Paper E-ink raw Display Red Black White )

Along with a https://www.aliexpress.com/item/1005009827197743.html ( Waveshare e-Paper ESP32 Driver Board Rev 3 )

Hooked it all up, and configured the GPIOs according to the image on the waveshare site

However I am getting zero reaction out of the e-ink display.

This e-ink display is 7.5" however the resolution is 880x528 pixels - the waveshare site for the driver board doesn’t list this res. With some google-fu I found I can use “generic SPI” to drive this display:

esphome:
  name: esp32-eink-1

esp32:
  board: esp32dev
  framework:
    type: esp-idf

logger: 
  level: VERBOSE

api:
  encryption:
    key: "redacted"

ota:
  - platform: esphome
    password: "redacted"

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

captive_portal:

font:
  - file: "fonts/menlo.ttf" 
    id: font_menlo
    size: 32

spi:
  clk_pin: GPIO13
  mosi_pin: GPIO14

display:
  - platform: epaper_spi
    model: SSD1677        # Via https://esphome.io/components/display/epaper_spi/
    cs_pin: GPIO15
    dc_pin: GPIO27
    reset_pin: GPIO26
    busy_pin: { number: GPIO25, inverted: False, mode: { input: True, pulldown: True } }
    dimensions:
      width: 880
      height: 528
    full_update_every: 1
    update_interval: 10s
    lambda: |-
      it.fill(Color::WHITE);
      it.print(0, 0, id(font_menlo), Color::BLACK, "HELLO WORLD!");

But I got no reaction from the display; so and get this in the logs:

[I][app:194]: ESPHome version 2025.12.2 compiled on Dec 29 2025, 17:24:09
-- irrelevant stuff removed --
[C][spi:067]: SPI bus:
[C][spi:068]:   CLK Pin: GPIO13
[C][spi:069]:   SDI Pin: 
[C][spi:070]:   SDO Pin: GPIO14
[C][spi:075]:   Using HW SPI: SPI2_HOST
[C][epaper_spi:329]: E-Paper SPI
[C][epaper_spi:329]:   Rotations: 0 °
[C][epaper_spi:329]:   Dimensions: 880px x 528px
[C][epaper_spi:330]:   Model: SSD1677
[C][epaper_spi:331]:   Reset Pin: GPIO26
[C][epaper_spi:332]:   DC Pin: GPIO27
[C][epaper_spi:333]:   Busy Pin: GPIO25
[C][epaper_spi:334]:   CS Pin: GPIO15
[C][epaper_spi:399]:   Update Interval: 10.0s
[C][epaper_spi:336]:   SPI Data Rate: 20MHz
[C][epaper_spi:336]:   Full update every: 1
[C][epaper_spi:336]:   Swap X/Y: NO
[C][epaper_spi:336]:   Mirror X: NO
[C][epaper_spi:336]:   Mirror Y: NO
-- irrelevant stuff removed --
[V][epaper_spi:226]: Exit state IDLE
[V][epaper_spi:234]: Enter state UPDATE, delay 0, wait_for_idle=FALSE
[V][epaper_spi:165]: Process state entered in state UPDATE
[V][epaper_spi:226]: Exit state UPDATE
[V][epaper_spi:234]: Enter state RESET, delay 0, wait_for_idle=FALSE
[V][epaper_spi:165]: Process state entered in state RESET
[V][epaper_spi:226]: Exit state RESET
[V][epaper_spi:234]: Enter state RESET_END, delay 10, wait_for_idle=FALSE
[V][epaper_spi:165]: Process state entered in state RESET_END
[V][epaper_spi:226]: Exit state RESET_END
[V][epaper_spi:234]: Enter state INITIALISE, delay 0, wait_for_idle=TRUE
[V][epaper_spi:141]: Screen was busy for 4 ms
[V][epaper_spi:165]: Process state entered in state INITIALISE
[V][epaper_spi:071]: Command: 0x18, Length: 1, Data: 80
[V][epaper_spi:071]: Command: 0x0C, Length: 5, Data: AE.C7.C3.C0.80
[V][epaper_spi:071]: Command: 0x01, Length: 3, Data: 6F.03.02
[V][epaper_spi:071]: Command: 0x3C, Length: 1, Data: 01
[V][epaper_spi:071]: Command: 0x11, Length: 1, Data: 03
[V][epaper_spi:226]: Exit state INITIALISE
[V][epaper_spi:234]: Enter state TRANSFER_DATA, delay 0, wait_for_idle=TRUE
[V][epaper_spi:141]: Screen was busy for 5 ms
[V][epaper_spi:165]: Process state entered in state TRANSFER_DATA
[V][epaper_spi:071]: Command: 0x4E, Length: 2, Data: 00.00
[V][epaper_spi:071]: Command: 0x44, Length: 4, Data: 00.00.6F.03
[V][epaper_spi:071]: Command: 0x4F, Length: 2, Data: 00.00
[V][epaper_spi:071]: Command: 0x45, Length: 4, Data: 00.00.0F.02
[V][epaper_spi.ssd1677:061]: Writing bytes at line 0 at 15249ms
[V][epaper_spi:165]: Process state entered in state TRANSFER_DATA
[V][epaper_spi.ssd1677:061]: Writing bytes at line 1 at 15263ms
[V][epaper_spi:165]: Process state entered in state TRANSFER_DATA
[V][epaper_spi.ssd1677:061]: Writing bytes at line 38 at 15281ms
[V][epaper_spi:165]: Process state entered in state TRANSFER_DATA
[V][epaper_spi.ssd1677:061]: Writing bytes at line 115 at 15295ms
[V][epaper_spi:165]: Process state entered in state TRANSFER_DATA
[V][epaper_spi.ssd1677:061]: Writing bytes at line 165 at 15313ms
[V][epaper_spi:165]: Process state entered in state TRANSFER_DATA
[V][epaper_spi.ssd1677:061]: Writing bytes at line 238 at 15327ms
[V][epaper_spi:165]: Process state entered in state TRANSFER_DATA
[V][epaper_spi.ssd1677:061]: Writing bytes at line 301 at 15345ms
[V][epaper_spi:165]: Process state entered in state TRANSFER_DATA
[V][epaper_spi.ssd1677:061]: Writing bytes at line 375 at 15359ms
[V][epaper_spi:165]: Process state entered in state TRANSFER_DATA
[V][epaper_spi.ssd1677:061]: Writing bytes at line 452 at 15377ms
[V][epaper_spi:165]: Process state entered in state TRANSFER_DATA
[V][epaper_spi.ssd1677:061]: Writing bytes at line 521 at 15390ms
[V][epaper_spi:226]: Exit state TRANSFER_DATA
[V][epaper_spi:234]: Enter state POWER_ON, delay 0, wait_for_idle=TRUE
[V][epaper_spi:141]: Screen was busy for 9 ms
[V][epaper_spi:165]: Process state entered in state POWER_ON
[V][epaper_spi:226]: Exit state POWER_ON
[V][epaper_spi:234]: Enter state REFRESH_SCREEN, delay 0, wait_for_idle=TRUE
[V][epaper_spi:141]: Screen was busy for 7 ms
[V][epaper_spi:165]: Process state entered in state REFRESH_SCREEN
[V][epaper_spi.ssd1677:011]: Refresh screen
[V][epaper_spi:226]: Exit state REFRESH_SCREEN
[V][epaper_spi:234]: Enter state POWER_OFF, delay 0, wait_for_idle=TRUE
[V][epaper_spi:141]: Screen was busy for 9 ms
[V][epaper_spi:165]: Process state entered in state POWER_OFF
[V][epaper_spi:226]: Exit state POWER_OFF
[V][epaper_spi:234]: Enter state DEEP_SLEEP, delay 0, wait_for_idle=TRUE
[V][epaper_spi:141]: Screen was busy for 9 ms
[V][epaper_spi:165]: Process state entered in state DEEP_SLEEP
[V][epaper_spi.ssd1677:018]: Deep sleep
[V][epaper_spi:226]: Exit state DEEP_SLEEP
[V][epaper_spi:234]: Enter state IDLE, delay 0, wait_for_idle=FALSE
[D][epaper_spi:220]: Display update took 362 ms

I am assuming the esp32 is able to transmit the display data to the display (Or else I would expect there would be some errors?) But I have no reaction from the display at all (it’s totally “white”, i.e. how it looked when it was shipped to me).

I’ve searched for people using this specific display, but I’ve come up short - however, I assumed this is like many other things HomeAssistant - close enough that it’ll work but this time, that appears to not be the case.

Any guidance on how to get this going would be appreciated!

Did you try the Waveshare demo code to verify your devices are working?

I found the issue… I had a loose connection. Its working now. Here is the code I’m using:

font:
  - file: "fonts/menlo.ttf" 
    id: font_menlo
    size: 32
  - file: "gfonts://Open Sans@700"
    id: font_os_bold
    size: 32
  - file: "gfonts://Montserrat@800"
    id: font_montserrat
    size: 32
  - file: "gfonts://Bitter@900"     
    id: font_bitter
    size: 32

spi:
  clk_pin: GPIO13
  mosi_pin: GPIO14

display:
  - platform: waveshare_epaper
    update_interval: 600s
    cs_pin: GPIO15
    dc_pin: GPIO27
    busy_pin: GPIO25
    reset_pin: GPIO26
    model: 7.50in-hd-b
    lambda: |-
      it.print(10, 20, id(font_menlo), "The quick brown fox jumps over the lazy dog");
      it.print(10, 80, id(font_bitter), "The quick brown fox jumps over the lazy dog");
      it.print(10, 140, id(font_montserrat), "The quick brown fox jumps over the lazy dog");
      it.print(10, 200, id(font_os_bold), "The quick brown fox jumps over the lazy dog");

Only thing is I haven’t figured out how to draw in red colour :wink:

Docs have example for that

lambda: |-
  const auto BLACK   = Color(0,   0,   0,   0);
  const auto RED     = Color(255, 0,   0,   0);

  it.print(100, 100, id(font1), RED, "Hello World in red!");

Yes I tried that:

font:
  - file: "fonts/menlo.ttf" 
    id: font_menlo
    size: 32

spi:
  clk_pin: GPIO13
  mosi_pin: GPIO14

display:
  - platform: waveshare_epaper
    update_interval: 600s
    cs_pin: GPIO15
    dc_pin: GPIO27
    busy_pin: GPIO25
    reset_pin: GPIO26
    model: 7.50in-hd-b
    lambda: |-
      const auto BLACK   = Color(0,   0,   0,   0);
      const auto RED     = Color(255, 0,   0,   0);
    
      it.print(10, 260, id(font_menlo), RED, "Hello World in red!");

Unfortunately it comes up in B/W:

try to flip the dip switch a/b and repower the board.