Yet another E-Ink weather display – but with Rust
harrystern.net
harrystern.net
I've been displaying slight variations of the same image on an old Kidle paperwhite for a bit over 5 years! I've noticed NO burn-in at all. I'm doing partial updates every refresh (30 second refreshes), so the display will go 1+ years without a full refresh (~1 million partial refreshes a year). There's some retention when I first work with it, but clearing the screen and showing a full-screen pattern is enough to remove that retention entirely.
Pretty impressive, and I am also impressed the old firmware stays attached to wifi for the whole time as well! Sometimes it can have trouble reconnecting (power outage, dog unplugged wifi, whatever), that's when I'll see if there's burn-in, probably once a year(ish).
Very nice work! It's beautiful.
E-Ink screen and an ESP32 in a white case, i.e. similar to what this guy has built. Programmable via USB-C. So I could buy this, program it to display something and put it on my wall.
Could be a range of different sizes.
Was fun.
Initially I was also going to use an external RTC but didn't want to have the additional circuitry to actually turn on and off the esp32 via the RTC's interrupt signal. Did you find that the internal RTC on the esp wasn't accurate enough?
It's more the power savings I was after :-) I wanted to put the esp32 into the deepest possible sleep state, which involves turning the RTC/RTC memory off entirely and is a pretty big drop. The external RTC I picked has a much lower current draw.
The esp's RTC is quite inaccurate, but certainly good enough to ballpark "morning update" and update system time to re-calibrate then.
I noted this in the "future work" section but I don't have a way to actually test or validate whether the various deep sleep levels are working. If I try to use the ammeter on a standard multimeter it can't cope with the changing ranges as the esp draws a bunch of power to boot and I think probably causes brownouts.
Do you have a current ranger / ucurrent gold type device?
- Put it in deep sleep
- On top of this, turn off the power domains for the RTC peripheral, RTC memory and the XTAL oscillator manually
- Use exlusively the ext1 external wakeup (ext0 requires the RTC peripherals to be powered on)
From my reading of the spec sheet, this is the best you can do on the chip.
Note that my choice of RTC also factors into the equation, the RV-3028-C7 has a significantly lower current draw than the common DS* RTC chips you see on maker-type boards.
And yeah, I bought a CurrentRanger :)
I'm very lazy about charging devices (I'm one of those people that keep their bicycle mechanical instead of going with the trend of electric shifters, because I absolutely don't want that hassle), so my goal was to maximize the number of months I wouldn't have to touch it.
Maybe I'll splurge for a CurrentRanger as well. I'm definitely on board with changing batteries as infrequently as possible.
I tend to go pretty obsessive with these release (e.g. https://github.com/eikehein/hyelicht), so it takes some time ...
And part of me doesn't want to know.
The pricing is pretty expensive even in bulk. $50 for the larger displays isn’t off by an order of magnitude (e.g. 7 inch with red) especially as a retailer is buying that as a larger solution which includes all the syncing hardware, maintenance programs, and integrations.
For retailers, the savings story is in increased pricing accuracy and reduced labor for price changes. There is the promise of dynamic pricing but that’s a minefield for various reasons.
That’s why you tend to see it in high-value retailers (pricing accuracy, precision, smaller tag count) and grocers (lots of price changes, high labor costs).
I also see Rust and I reach for WoolWax. That's just me though.
This is a cool project. I have been thinking of something like this using an old e-Reader.
The shaded area is a percentage and does extend to the top of the graph region, which means 100% chance of rain.
From the mark-up it looks like the data used for drawing the red curve and for annotating the - Day High Low - for temperature may have come from a different set of days since they don't fit well in the graph area. The low temperatures for each day are especially wonky.
I also noted that sunrise appears to be around 5 am at your location based on a quick attempt to define a horizontal scale for hour of the day. I don't know if that is correct.
I hope all this helps. I really like that red line capability. That is one of the things that to me makes using an e-ink display less than ideal. I like to be able to use colors to help define the data being graphed or displayed.
Good luck with this project. It is pretty cool.
The reason the current temperature is higher than the "weekly high" is simply that the current temperature is from actual observed data and the weekly high is from forecasted dated, so there are two possibilities: either the temperature is simply higher than forecasted, or the current temperature is higher than it will get the rest of the week.
For what it's worth, there are multicolor e-ink displays available at similar sizes but of course they're also more expensive and have longer refresh rates.
Now, in this case I'm using an older esp32 board so something like CircuitPython probably would have been equally fine, but it was nice to be able to share the same buffer type across the server and client. I also just enjoy writing Rust and find it less error-prone than C.
I searched the repo for "ttf".
Thanks for pointing it out!
Thanks for the subreddit link though, it could definitely be useful in the future.
But it looks like this was just an old rumor? https://www.mobileread.com/forums/showthread.php?t=14152
Also, for the e-ink screen, is there anything I should watch out for? Do I need it without PCB or with?
I want to order the pieces now and do something with Rust, but I wanna make sure I don't order something wrong. Any pointers would greatly be appreciated!
Can you use another program to rasterize a two tone bitmap image with the appropriate dimensions and then pass it to the display controller without needing to write any software?
There is minimal software on the e-ink display side… it connects to wifi, fetches the image, and sends it to the display.
(I could Google; more fun to discuss it here.)
I'm starting one of these "weather on an e-ink display" projects, and wondering which API to use.