WeAct Studio E-Ink 4.2 with esp32 S3

Hello all,

I keep on having problems with my E-Ink display from WeAct Studio. the fifth day in a row making every change chatpgt is asking for but it never worked.
The idea is to show on the screen a screenshot of a dashboard and refresh it at a certain time.

following installing parameters:

21:12:23.897][C][logger:316]: Logger:
[21:12:23.897][C][logger:316]:   Max Level: DEBUG
[21:12:23.897][C][logger:316]:   Initial Level: DEBUG
[21:12:23.900][C][logger:322]:   Log Baud Rate: 115200
[21:12:23.900][C][logger:322]:   Hardware UART: USB_SERIAL_JTAG
[21:12:23.923][C][logger:332]:   Task Log Buffer Size: 768 bytes
[21:12:23.923][C][spi:066]: SPI bus:
[21:12:23.927][C][spi:152]:   CLK Pin: GPIO18
[21:12:23.927][C][spi:152]:   SDI Pin: 
[21:12:23.927][C][spi:152]:   SDO Pin: GPIO11
[21:12:23.948][C][spi:074]:   Using HW SPI: SPI2_HOST
[21:12:23.949][C][psram:016]: PSRAM:
[21:12:23.949][C][psram:019]:   Available: YES
[21:12:23.953][C][psram:021]:   Size: 8192 KB
[21:12:23.973][C][waveshare_epaper:2771]: Waveshare E-Paper
[21:12:23.973][C][waveshare_epaper:2771]:   Rotations: 0 °
[21:12:23.973][C][waveshare_epaper:2771]:   Dimensions: 400px x 300px
[21:12:23.973][C][waveshare_epaper:2772]:   Model: 4.2in (B V2) BWR-Mode
[21:12:23.977][C][waveshare_epaper:152]:   Reset Pin: GPIO5
[21:12:23.978][C][waveshare_epaper:152]:   DC Pin: GPIO9
[21:12:23.978][C][waveshare_epaper:152]:   Busy Pin: GPIO13
[21:12:24.000][C][waveshare_epaper:452]:   Update Interval: never
[21:12:24.000][C][captive_portal:128]: Captive Portal:
[21:12:24.000][C][wifi:1304]: WiFi:
[21:12:24.000][C][wifi:1304]:   Local MAC: 90:70:69:07:0B:C8
[21:12:24.000][C][wifi:1304]:   Connected: YES
[21:12:24.003][C][wifi:1037]:   IP Address: 192.168.178.83
[21:12:24.020][C][wifi:1048]:   SSID: [redacted]
[21:12:24.020][C][wifi:1048]:   BSSID: [redacted]
[21:12:24.020][C][wifi:1048]:   Hostname: 'to-do-display2'
[21:12:24.020][C][wifi:1048]:   Signal strength: -38 dB ▂▄▆█
[21:12:24.020][C][wifi:1048]:   Channel: 1
[21:12:24.020][C][wifi:1048]:   Subnet: 255.255.255.0
[21:12:24.020][C][wifi:1048]:   Gateway: 192.168.178.1
[21:12:24.020][C][wifi:1048]:   DNS1: 192.168.178.1
[21:12:24.020][C][wifi:1048]:   DNS2: 0.0.0.0
[21:12:24.022][C][esphome.ota:075]: Over-The-Air updates:
[21:12:24.022][C][esphome.ota:075]:   Address: to-do-display2.local:3232
[21:12:24.022][C][esphome.ota:075]:   Version: 2
[21:12:24.026][C][esphome.ota:082]:   Password configured
[21:12:24.031][C][safe_mode:021]: Safe Mode:
[21:12:24.031][C][safe_mode:021]:   Successful after: 60s
[21:12:24.031][C][safe_mode:021]:   Invoke after: 10 attempts
[21:12:24.031][C][safe_mode:021]:   Duration: 300s
[21:12:24.032][C][safe_mode:038]:   Bootloader rollback: supported
[21:12:24.045][C][web_server.ota:231]: Web Server OTA
[21:12:24.050][C][api:221]: Server:
[21:12:24.050][C][api:221]:   Address: to-do-display2.local:6053
[21:12:24.050][C][api:221]:   Listen backlog: 4
[21:12:24.050][C][api:221]:   Max connections: 8
[21:12:24.052][C][api:228]:   Noise encryption: YES
[21:12:24.057][C][http_request:012]: HTTP Request:
[21:12:24.057][C][http_request:012]:   Timeout: 30000ms
[21:12:24.057][C][http_request:012]:   User-Agent: ESPHome/2026.1.4 (https://esphome.io)
[21:12:24.057][C][http_request:012]:   Follow redirects: YES
[21:12:24.057][C][http_request:012]:   Redirect limit: 3
[21:12:24.062][C][http_request:020]:   Watchdog Timeout: 15000ms
[21:12:24.063][C][http_request.idf:028]:   Buffer Size RX: 512
[21:12:24.063][C][http_request.idf:028]:   Buffer Size TX: 512
[21:12:24.069][C][mdns:177]: mDNS:
[21:12:24.069][C][mdns:177]:   Hostname: to-do-display2

following the log:

[21:13:15.818][I][safe_mode:066]: Boot seems successful; resetting boot loop counter
[21:13:18.010][D][esp32.preferences:155]: Writing 1 items: 0 cached, 1 written, 0 failed
[21:14:17.675][I][online_image:109]: Updating image http://homeassistant.local:10000/dashboard-test/test2?viewport=400x300&eink=2&invert
[21:14:29.736][D][online_image:175]: Starting download
[21:14:29.738][D][online_image:194]: Allocating PNG decoder
[21:14:29.757][I][online_image:212]: Downloading image (Size: 3275)
[21:14:29.757][W][component:547]: online_image took a long time for an operation (12072 ms)
[21:14:29.757][W][component:550]: Components should block for at most 30 ms
[21:14:29.759][W][component:547]: api took a long time for an operation (12076 ms)
[21:14:29.759][W][component:550]: Components should block for at most 30 ms
[21:14:29.759][D][online_image:089]: Allocating new buffer of 15000 bytes
[21:14:30.859][D][online_image:226]: Image fully downloaded, read 3275 bytes, width/height = 400/300
[21:14:30.863][D][online_image:228]: Total time: 1s
[21:14:30.865][W][http_request:028]: No header with name etag found
[21:14:30.878][W][http_request:028]: No header with name last-modified found
[21:14:32.923][W][component:547]: online_image took a long time for an operation (1851 ms)
[21:14:32.928][W][component:550]: Components should block for at most 30 ms
[21:16:17.675][I][online_image:109]: Updating image http://homeassistant.local:10000/dashboard-test/test2?viewport=400x300&eink=2&invert
[21:16:29.333][D][online_image:175]: Starting download
[21:16:29.337][D][online_image:194]: Allocating PNG decoder
[21:16:29.343][I][online_image:212]: Downloading image (Size: 3275)
[21:16:30.447][D][online_image:226]: Image fully downloaded, read 3275 bytes, width/height = 400/300
[21:16:30.450][D][online_image:228]: Total time: 1s
[21:16:30.458][W][http_request:028]: No header with name etag found
[21:16:30.461][W][http_request:028]: No header with name last-modified found
[21:18:17.676][I][online_image:109]: Updating image http://homeassistant.local:10000/dashboard-test/test2?viewport=400x300&eink=2&invert
[21:18:29.763][D][online_image:175]: Starting download
[21:18:29.765][D][online_image:194]: Allocating PNG decoder
[21:18:29.773][I][online_image:212]: Downloading image (Size: 3275)
[21:18:29.774][W][component:547]: online_image took a long time for an operation (12097 ms)
[21:18:29.775][W][component:550]: Components should block for at most 30 ms
[21:18:29.797][W][component:547]: api took a long time for an operation (12100 ms)
[21:18:29.798][W][component:550]: Components should block for at most 30 ms
[21:18:30.892][D][online_image:226]: Image fully downloaded, read 3275 bytes, width/height = 400/300
[21:18:30.893][D][online_image:228]: Total time: 1s
[21:18:30.893][W][http_request:028]: No header with name etag found
[21:18:30.893][W][http_request:028]: No header with name last-modified foundThe closest i got resulted in following log:

following the code:

esphome:
  name: to-do-display2
  friendly_name: To Do Display2

esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf
psram:
  mode: octal
  
  
# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: ...

ota:
  - platform: esphome
    password: ...

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

captive_portal:

http_request:
  verify_ssl: false
  timeout: 30s
  watchdog_timeout: 15s

online_image:
  - id: dashboard_image
    format: PNG
    type: BINARY
    buffer_size: 25000
    url: http://homeassistant.local:10000/dashboard-test/test2?viewport=400x300&eink=2&invert
    update_interval: 120s
    on_download_finished:
     - delay: 200ms 
     - component.update: main_display
spi:
  clk_pin: GPIO18
  mosi_pin: GPIO11


display:
  - platform: waveshare_epaper
    id: main_display
    cs_pin: GPIO10
    dc_pin: GPIO9
    busy_pin: 
      number: GPIO13
      inverted: true
    reset_pin: GPIO5
    model: 4.20in-bv2-bwr
    update_interval: never
    lambda: |- 
      it.image(0, 0, id(dashboard_image));

Has anyone an idea how to solve that? Most tutorials I have seen have been done with other E-Ink Screens, so not shure if this is the problem…
Thank you in advance!

I have the 4.2" WeAct Studio E-paper and have tried the alternative drivers that support WeAct (no luck). I tried to define it as a 4.20in B V2, and others, but no luck… Tried alternate drivers, nothing. I am using an ESP32-Devkitc-v4.
Now, this said, using the same hardware and pin assignments and loading the WeAct Example code in Arduino. it works perfectly. Go figure!
What I really want is simply for it to work natively in ESPHOME with partial refresh available. It works for Arduino, somebody needs to figure it out, PLEASE!
:wink: Impatiently waiting for a solution

Wanted to do it in esp home to noy have to figure out arduino again :smile: been using it some years ago and happy to just be in esp home now. Seems we have to wait till someone shows compassion and helps out :smile:

Just found this on github: GitHub - RaceNJason/WeAct-Studio_ePaper: ESPHome custom component for WeAct Studio ePaper displays

Seems there is a solution to our problem