Anyone had success with SEED Studio XIAO 7.5" ePaper Display

Also see here

2 Likes

So what is the verdict here? is the XIAO 7.5 decent?

Seems like some hoops to jump though to render a dashboard but not too bad.

I have been strongly considering a display like this for outside my office door so people know I am in meetings / should not disturb.

I have been running it for a week or so.

I have wife seal of approval!

There is an initial hurdle to get it setup and the guide provide is well done with a few glitches here and there that may trip up the less technically competent like me.

I have it


Setup in the lounge with information that I and my wife check normally several times day.

It is set to refresh every 5 mins, the 30 second was too much as the screen flashes when refreshing.

I need to put it on a charger pretty much once a day.

I put a date/time in the display so I could tell if it was still running.

I can see me just leaving it plugged in permanently.

If you plan to use as a sign on a door then you need to consider the screen refresh time.

If you set it to 5 mins then it could take up to 5 mins to reflect a change, you pull data from the device you can’t push to it.

I like it, I had thought about 3d printing a different case for it as they files are available online but have not got around to it yet.

I’m also using it, I made some changes to the setup, to get rid of the flickering with every update. This screen supports partial updates, so add a ‘p’ after the model name and add a “full_update_every” interval. Furthermore invert the busy pin as advised in the esphome docs for these models.

display:
  - platform: waveshare_epaper
    id: my_display
    cs_pin: GPIO3
    dc_pin: GPIO5
    busy_pin: 
      number: GPIO4
      inverted: true
    reset_pin: GPIO2
    model: 7.50inv2p
    full_update_every: 720
    update_interval: 10s
3 Likes

Thanks!!!

I have implemented your recommendations and much improved.

I thought while I was updating it I would change the display slightly and go from the Black Screen with white text to White background and black text.

The instructions for Puppet and SEEED state you add a &invert on the end of the url to get the Dashboard image

“
:10000/epaper-display/epaper-display?viewport=800x480&eink=2”

So it becomes

“
:10000/epaper-display/epaper-display?viewport=800x480&eink=2&invert”

When using this in a browser it does not change the output at all

However adding &inverted does invert the output when use in a browser but has not effect at all on the paper display.

Any ideas, not critical or important 
 but worth clarifying I think for anyone else trying to get the display the way they want it.

captive_portal:

http_request:

verify_ssl: false

timeout: 10s

watchdog_timeout: 15s

online_image:

- id: dashboard_image

format: PNG

type: BINARY

buffer_size: 30000

url: http://xxx.xxx.xxx.xxx:10000/epaper-display/epaper-display?viewport=800x480&eink=2&inverted

update_interval: 30s

on_download_finished:

- delay: 0ms

- component.update: main_display

spi:

clk_pin: GPIO8

mosi_pin: GPIO10

display:

- platform: waveshare_epaper

id: main_display

cs_pin: GPIO3

dc_pin: GPIO5

busy_pin:

number: GPIO4

inverted: True

reset_pin: GPIO2

model: 7.50inv2p

update_interval: 10s

full_update_every: 720

lambda: |-

it.image(0, 0, id(dashboard_image));

I don’t use the it.image function myself, but you can add the foreground and background ‘color’ of the epaper screen to the function.

it.image(0, 0, id(dashboard_image), COLOR_OFF, COLOR_ON);

or maybe you have to swap the COLOR_ON and COLOR_OFF depending on the required result.

it.image(0, 0, id(dashboard_image), COLOR_ON, COLOR_OFF);
2 Likes

Anyone know how to get the battery level/percentage reported back to HA?

I would be interested din that too!

Also anyone else having issues with it just stop updating overnight, I am having to restart Puppet and the device every morning.

Mine has been working great with a 15 day battery life between charges, with 30 minute deep sleep between updates.
I was trying to make it deep sleep during the night, and when I installed the updated code with ESPHome 2025.7.x, it broke. It stopped being able to decode the png images, it keeps running out of memory.

I have managed to fix this by replacing the format from PNG to BMP.

ie:

online_image:
  - id: dashboard_image
    format: BMP
    type: BINARY
    buffer_size: 30000
    url: http://xxx.xxx.xxx.xx:10000/eink-2/0?viewport=800x480&eink=2&invert&format=bmp #change this link to your screenshot link
    update_interval: 90s
    on_download_finished:
      - delay: 100ms
      - component.update: main_display 

Just change the format from PNG to BMP and add &format=bmp to the URL from Puppet.

Separately, a thanks to @jsuanet , I tried but failed to get the partial refresh to work previously. I have now followed your example there and it works without issue.

As far as the battery level is concerned, I showed the schematics to a friend of mine who knows more about electronics than I do, and based on his understanding the way this is wired does not allow the battery level to be picked up as is.

On a separate note, these fit perfectly inside an IKEA photo frame. Makes it really easy to hang them on a wall. Have it set up near my front entrance to provide information at a glance (weather, calendar, traffic, ev car range). 30 minutes between updates is more than enough.

1 Like

Fantastic!!

Back up and working!

By replacing the 5kb png that the esp home device errors out because it is greater than the 48kb available!

Now replacing the 5kb image with a 48k bmp image and everything is now ok and works.

Apparently a 5kb png is now larger than a 48k bmp.

So many,many thanks to @cromelex !!

Hopefully this will be fixed at sometime.

1 Like

That looks really nice :-j

I am printing a new all black case for mine and it is easy for me to keep it plugged in all the time.

What model of the Ikea frame is that? It looks and fits perfectly. I have two of this screens ordered and currently looking for a way to wall hang them. I have 5V cables behind it so it will be always powered.

It’s the Ribba 13x18cm.

I believe they’ve been discontinued and replaced by the Rödalm series. It should work just as well, I think the depth is sufficient.

1 Like

is it possible you share the complete yaml from Captive portal and down ? i do get an image here after all you guys there posts but when i use the Partial function its a blank screen, i cant figure out where im going wrong.

Thanks

Vince

EDIT: it suddenly came to life, so here it is for other people facing the same “problems” don’t forget to change the picture url ofc.

captive_portal:


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

online_image:
  - id: dashboard_image
    format: BMP
    type: BINARY
    buffer_size: 30000
    url: http://10.0.0.125:10000/lovelace/home?viewport=800x480&eink=2&invert&format=bmp #change this link to your screenshot link
    update_interval: 90s
    on_download_finished:
      - delay: 100ms
      - component.update: main_display

spi:
  clk_pin: GPIO8
  mosi_pin: GPIO10

display:
  - platform: waveshare_epaper
    id: main_display
    cs_pin: GPIO3
    dc_pin: GPIO5
    busy_pin: 
      number: GPIO4
      inverted: true
    reset_pin: GPIO2
    model: 7.50inv2p
    update_interval: 10s
    full_update_every: 720
    lambda: |-
      it.image(0, 0, id(dashboard_image));

Was the issue the image URL?

I have my full code available here, in case it helps.

2 Likes

no idea actually, but, what i now have is after X time Puppet crashes.

901 Error generating screenshot ProtocolError: Page.addScriptToEvaluateOnNewDocument timed out. Increase the 'protocolTimeout' setting in launch/connect calls for a higher timeout if needed.
902 Wait time: 40502740 ms
902 Handling /lovelace/epaper?viewport=800x480&eink=2&invert&format=bmp
    at <instance_members_initializer> (file:///app/node_modules/puppeteer-core/lib/esm/puppeteer/common/CallbackRegistry.js:97:14)
    at new Callback (file:///app/node_modules/puppeteer-core/lib/esm/puppeteer/common/CallbackRegistry.js:101:16)
    at CallbackRegistry.create (file:///app/node_modules/puppeteer-core/lib/esm/puppeteer/common/CallbackRegistry.js:20:26)
    at Connection._rawSend (file:///app/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/Connection.js:95:26)
    at CdpCDPSession.send (file:///app/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/CdpSession.js:70:33)
    at FrameManager.evaluateOnNewDocument (file:///app/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/FrameManager.js:229:14)
    at CdpPage.evaluateOnNewDocument (file:///app/node_modules/puppeteer-core/lib/esm/puppeteer/cdp/Page.js:730:41)
    at Browser.navigatePage (file:///app/screenshot.js:224:47)
    at async RequestHandler.handleRequest (file:///app/http.js:155:32)






Restart of puppet does repair it for a while, do you experience the same ?

Is the puppet screenshot URL available through a browser?

I use the Kindle Lovelace Screensaver add-on for taking screenshots rather than Puppet, could be an option for you to set up.

yes it is available when it has not crashed, when i see this notice then its a no. going to test that , thanks for the tip, i have it nowworking by every X hour restarting the addon.

It seems to have stabilized over the last few days not crashed once in 72hrs!