If you're even slightly interested in getting into jailbreaking/hacking of devices, the Kindle is a great place to start.
There's a lot of low-hanging fruit there. Particularly because the device has a USB port and, by design, exposes a user partition that you can read/write to (so you can upload files and documents and ebooks to the device).
There's definitely been an effort by Amazon to lock them down, but just taking your reverse-engineering tool of choice and decompiling their firmware binary will give you tons of readable code to dig through. They use a mix of java, native c, and javascript.
Fun fact, at startup the Kindle looks for certain files in the user partition, with certain naming patterns. You can, for example, disable the screensaver by dropping a file with a special name there. They patched this once, but after doing a grep for the user-partition mount location (to see all the places in their code where they read from user partition files) I was pretty quickly able to find another way to do this. It's fun stuff.
I looked into it precisely once, and found a bunch of results that the newer firmware versions didn’t have jailbreaks available, and that downgrading wasn’t feasible. I’m hoping to be proven wrong though…
The most fun part of these projects is seeing people quickly build ad-hoc renderers for E-Ink. Very quickly you find out you need render passes, dithering, debanding, etc.
The one display I got takes about 2 seconds to cycle. You can make it shorter with partial redraws, but for my purposes, the cycle was the right thing to do.
2. It is in stock. :) Raspberry Pi Zero 2 and the waveshare displays are in a bit of a stock crunch, and the frame I ended up mounting this in, along with the special flat USB cable, pushed the project cost to the same price. It's my own aEsTheTic tho.
If you’re not up for DIY, I’ve been using a unit from https://www.invisible-computers.com/ for years and I love it. Not affiliated; just a happy customer.
My heart made a little jump when I saw this, I've been working on this project for years and I do not take it for granted that my users are starting to recommend the product.
I am here to answer any questions anyone might have.
I understand your desire to build out an "ecosystem" of app and everything, however, I'd really like an option to go fully on my own and skip your iOS/android app.
Is it something that you plan on doing and document? Or is there an easy way I can ssh into the device and figure out on my own?
ssh-ing is hard because there is no USB port. There isn't even an USB controller on the board, just some rudimentary UART pins. The usb plug is just for power.
How does it communicates with anything from the external world? This same channel could be used for sshing or anything
Actually, from another comment
> Privacy Information: Plese note that the data is proxied through the Invisible Computers API backend and a non-reversible hash of most recent image is stored for up to 48 hours.
So there's some mechanism to make API calls to your own cloud infrastructure, but customers can't use it to skip the middleman and send things directly to the device? I hope I'm reading this wrong, because that's awful.
Oh man, glad you’re still going. For some reason I remember you getting a ton of critical feedback last time this was posted - glad you’ve persisted. Keep on my friend.
Last time I posted, the bezel on the screen was about twice as wide still... :D And even so, while I had a few comments who were ripping me for the huge bezel, most people still liked it! So this actually encouraged me :D
It's not something I have tried yet. I would be worried about the readability of text in this case.
When it comes to the layout, there is definitely a lot that could be done, that hasn't been implemented yet. I am always working to add features but of course there are always more ideas than time. :D
(For example, I recently, I added the option to display the calendar vertically:
This thing looks like a lot of fun, however it looks like the device is "tethered" to some kind of back-end service you provide, rather than just being a standalone device on the network. Can you explain how communication with the device works?
Is there any option to self-host that backend service? I'm not comfortable, from a mental health perspective, with integrating a device into my life routines that could suddenly stop working through loss of a hosted service.
What's the actual communication technology? Is it Wi-Fi? Cellular?
Edit: I see elsewhere you state it's Bluetooth and Wi-Fi. From a Wi-Fi perspective and workplace deployment does it support 802.1x?
> Is there any option to self-host that backend service?
Not yet, I want to support that in future but it's not possible yet.
I have personally decided that I will keep the backend running even if I decide the project isn't worth it for me any more... but of course, I understand the this is no 100% guarantee.
> From a Wi-Fi perspective and workplace deployment does it support 802.1x?
Uhhh, I don't know.. how would I check that?
I admit that this is still a bit rough around the edges...
As a simpler alternative, if you just want to build some layout for yourself and you do not need user management, you can simply render it as an image on the internet and point the device to it:
> Privacy Information: Plese note that the data is proxied through the Invisible Computers API backend and a non-reversible hash of most recent image is stored for up to 48 hours.
Wait? It's always proxied through your service? So there is no way to show something on the screen without you also being able to see it? That's a big nope for me.
Ooh that looks interesting and not TOO expensive, for a "out of the box" solution. Does it work well / is it self-sufficient without phone once you set it up? Can you adjust the scale, scroll easily, etc?
Founder here. You can adjust how many of the upcoming days are shown, and you can adjust the first and the last hour of the day.
This really allows you to dial in the information density.
For scrolling, I am not quite sure what you mean - are you referring to a button that would allow to move the time forward on the calendar? (That doesn't exist yet)
Thanks! I wasn't sure if it's touch-screen (like e.g. Kindle) or an entirely passive unit; so for example if it's showing this week, can a user scroll on the unit to see what's coming next week? :)
A touch screen might be cool, maybe for a future version... but it would drive up the price.
From a product perspective, I wonder if people wouldn't rather pick up their smart phone if they want to look at their calendar more deeply. I don't think the device should try to compete with the smart phone, it can only lose.
FWIW: In family scenario, being able to quickly check next week (a simple scroll), can be very beneficial as we plan our kids activities etc (but I understand you don't want to overcomplicate it, and everybody has "just one more thing it needs":). I'll have a chat with my wife on whether it's something she would use as currently is; I'll be happy to share feedback either way if it's helpful :).
I repurpose all my old ereaders (Kindles and Kobos) into displays for something, weather, agendas, some even do images (albeit very low resolution). It's great to have these around the house, quietly doing their thing.
One thing I will point out from observation, the radios on ereader devices aren't great for heavy use; they were originally created for occasional syncing. Projects like these will require an HTTP request to somewhere to fetch data, on a regular basis, and the radio eventually stops working. It's not a terrible thing considering it's just an unused device. If you're looking for something longer lived, the waveshare screen are worth considering for mini projects.
I agree, dithering on these devices works really well. After this project I worked on displaying images of the sun from the NOAA satellite. Until I got dithering working displaying the image with just 4 levels of grey was was very lackluster.
Resolution is more important than grayscale for e-ink - not only are they two sides of the same coin for dithering, but e-ink renders far faster in black-and-white so with sufficient resolution you've got a snappier page turn.
What I really want is a simply end-to-end way to program these devices to display something: basically, something as easy as QBasic, P5.js, or Scratch.
What I don't want is to run a server to host something for them to display. I want it self-contained, so once made, it's alive until the device breaks. My experience is 95% of the cost of these is maintenance, and that goes away once a project is no longer new, glitzy, and flashy.
What I actually want to build myself is a clock which displays time in time zones where my friends, relatives, and family are. Most of the other things I'd like are equally esoteric. I'd like this to be a <3 hour project (so it sustains a child's attention span too).
WaveShare screens are very reasonably priced and are starting to have 3+ color options. Using a RasPi and Python one can simply display any image via Python Imaging and some code to transmit the data via the connector pins. The image remains fixed on the screen even when it's powered down.
I got a little screen and the demo code worked, didn't know Python well enough at the time to keep running with it (part of the motivation to learn Python in the past year). Might need some work to build a case/enclosure, but beyond that it's a little piece of hardware that does what you wish. I'm thinking similar things, some specific cases in mind.
(I can be hired to do work like this for $15/hr for the first 90 days, contact info in profile).
Yeah e-ink uses no power, only when it refreshes. If you refresh say from 7 AM till 11 PM but not in night then WLAN has to fire up (cheap on ESP32 etc) and you could easily use a poor man's powerbank such as 18650 in USB enclosure.
Tho I think PoE is neat for a device like this. White cable (assuming wall is white) and you're done.
Though I wouldn't rely on a proprietary solution. Nor on Google Calendar.
There are plenty of such options available. For example [1] but there's many more. Here another [2]. Can't find the one I got but yeah it broke and remember you need to update the software at times. I put it on a VLAN and guest WLAN to be sure.
I did something similar with a first gen kindle. Some day it stopped working, I opened the enclosure to find a completely cracked-open kindle with a battery the size of a weather balloon inside.
This was about a month after I returned from a six week trip during which I kept that thing running.
Reminder that a lot of battery-powered devices really don't like to be connected to power all the time.
That's not an issue for a device like this. The typical use case is refreshing the screen once every 5, 10, 15, etc. minutes, which takes a few seconds (including connecting to wifi, downloading the data, etc.), and then spend the rest of the time in some super low power deep sleep mode, drawing maybe tens of microamps. Or maybe checking over Bluetooth LE whether to trigger an update, once every couple seconds. This will never get hot enough to the point where it would matter.
OP said that they did this with a first-gen kindle, and I would not be surprised if it had an always-on wifi connection and was processing data much more frequently then you suggest. I agree that there are plenty of ways to build this in a power-efficient way, I just want to suggest that given modern battery controllers, heat is a much more likely cause of failure then keeping the kindle plugged in all the time.
An aside but I’ve long thought that if Apple was truly committed to the environment and equipment reuse they’d let us use old iPads for stuff like this. I’d love to make a digital photo frame/day planner from an old iPad mini I have kicking around. They could even integrate Siri etc.
(I know you can get some way toward this with various apps but it’s definitely not the same as something OS-level)
They have by far the longest support historically compared to the rest of the ecosystem. It’s not even close. A while ago my parents bought an android device that SHIPPED one version behind and was never updated. Totally pathetic. I’ve seen fixes for surprisingly old iOS devices and even new features often go back some generations.
My work does something like this with Surfaces and unfortunately if you leave devices like that plugged in all the time the batteries swell and bend the screen and frame.
Maybe they could soft lock them to 50% or something but under normal circumstances it's too dangerous.
I have an old ipad Mini running ios9. there is an app called liveframe and it has integrations with google photos. i have been running it as a picture frame for a couple of years now
Another option for displaying things on a jailbroken Kindle is to use kterm to ssh into a computer and then connect to a tmux session. I've used this to read man pages - it's quite satisfying to press 'f' on my laptop and see the page scroll on the Kindle.
Connectivity is easy, as you can connect over USB or WiFi (my Kindle connects to my iPhone's hotspot).
Keep it out of the sun. E-Ink does not like direct sunlight. I built a similar thing, more of central panel for all my home-grown cloud gadgets (because I hate backlit LCD), and after a summer of afternoon sun, half the panel died. Which was a bummer because it was a $300 panel.
I did something similar, but with photos. I managed to process everything on the device in 100% golang with imagemagick C-bindings.
As Imagemagick is also able to render text, it might be a solution for you to get rid of the need for an external server. The ARM build process happens on GitHub actions, so you can check it out.
Cool, it looks like your processor is only slight newer then mind and is also on a 32 bit version of ARM so this approach would probably work. I'll keep this in mind for next time mine needs some work.
More than any other piece of technology I own - phone, laptop, watch - my Kindle makes me happy. A big part of that is the display and it's paper-likeness.
I just wish I could figure out a power scheme that would make it worth my trouble to use them as information radiators. Perhaps rechargeable batteries.
Displays like this would be a good candidate for wireless power schemes, but they aren’t sited in places with a good set of power scavenging options. Maybe solar.
I had to turn it into a generic signage platform first (it lets you show any image you want), and then screenshot GCal onto that image. It works really well, though.
Nowadays it's an electronic power meter, which also looks great.
I have a 7.3 inch, 7 color eink display coming in the mail. Built-in raspberry pico with wifi. Can't wait till it gets here... < 100 usd price, it sounds too good to be true.
I can recommend checking out https://openepaperlink.de/. It's a project to repurpose e-ink electronic shelf labels (in various sizes, ranging from 1.54" to 7.4"). I have been playing around with it the last few weeks and it's a lot of fun! The community around this is very active on Discord.
Does this use the battery? Not clear to me if the Kindle program is running continuously or if it just periodically starts up, refreshes the screen and then powers back down.
I've set up my own DIY version of this. It pulls a new image via a cron job and repaints the screen with it. I've not invested time looking into it but by default if the device sleeps, which it does very quickly after loosing wall power, the cron job will no longer run and the display gets stuck. You need to poke the power button to get it to wake again.
Instead of using a cronjob you can put the device into sleep and use the RTC to schedule the next wakeup (see [1]). This takes only very little power, as the device is only turned on for mere seconds and sleeps the remaining time.
I presume it does, but would only need charging once every couple of months. If it's going to be in a fixed position, e.g., on a desk, then it could just be left plugged in.
I have done something like this with my kindle. I then got kind of mad at myself for doing something so utilitarian. I wrote a little script to instead generate random wordle playthroughs, display that, be happy with the code... then immediately throw the kindle in my drawer.
Still, "generate a static image from a computer and send it to a display at a certain rate" is an underrated way to do fun things
Recently went the DIY route to show a Notion board on my 4th gen kindle. This is much nicer though, as it's optimised for display on the lower resolution screen.
I just wanted to avoid having to pull data out of Notion & re-build a UI. Would be nice for some way to apply CSS to a page to make it more viewable.
I've been using a magnetic pad (https://www.plus-vision.com/jp/product/kaite/) that works on the same principles of eink, except using magnets rather than electric fields. There's many variants available on aliexpress now. The only con is that stray magnets like on computers will wipe the pad if placed too close together.
It won't happen until e-ink gets a similar scale of production - E-Ink is niche, because it's basically never better than LCDs and is more expensive, so it's only used in e-readers, supermarket tags, and nowadays e-notes, all of which are incredibly niche. This might change if E-Ink corp's fast multi-dye color tech ACeP/Gallery 3) takes off in a big way, but I wouldn't hold my breath.
Curling an image is the same approach that I use for my e-paper smart screen as well. It should be quite easy to bring your dashboard to my device... maybe we can work together on something? My email is info@invisible-computers.com
I bought one of your devices after seeing you on HN a month or two ago; after nearly 3 weeks of DHL doing god-alone-knows-what, it finally arrived and I can say it's super well built.
Thanks Corey! There are always things I want to improve of course :)
I want to be fair to DHL here: The parcels are shipped through the letter network to make the overseas shipping more affordable. It's expected that they take bit longer than the normal DHL packages.
I would love to use your product, but there is certain data I can't send through a remote proxy (like my work calendar). Is there anyway to run whatever the backend is locally on a machine on my network? Or to have the device pull from a custom URL that is local to my network instead?
Why do you proxy eveything through your api backend? Can the device not check the url directly? Also, does the checking result in full image download always or do you respect etags and other caching headers like if-modified-since?
> Why do you proxy eveything through your api backend
Because it makes development and maintenance soo much easier, faster and reliable. I don't have to debug stuff that breaks on somebody's embedded esp32. If something breaks, it's in the backend and I see it in Sentry.
> Can the device not check the url directly
Yes, it could (with some modifications). But then you need to transmit and store the URL on the device, which requires establishing a bluetooth connection to change it. I am considering to offer this as an option to give myself and other peace of mind.
> Do you respect etags and other caching headers like if-modified-since
Not yet, but I could implement this very quickly if you send me an email and tell me you need this. :)
(This is a great example how proxying things though the backend makes development easier: If I wasn't proxying, this change would require a firmware update.)
Instead of having your backend download and retransmit the file, you could return a redirect to it instead? Plus maybe lower the poll rate from a few times per minute to once an hour or so to avoid the need for caching to save battery.
If you can provide a script that takes in an HTML file and provides an image ready for rendering, that would be amazing. Then I can automatically take any website and have a cron job that dumps the result into a shared dropbox link where it can be used by the screen.
> If you can provide a script that takes in an HTML file and provides an image ready for rendering, that would be amazing.
Yea, that's something I have been trying to build, but it's surprisingly non-trivial. There are a bunch of headless browser options, but I haven't found a good way to tell them: "Render the page in X width and Y height and then take a screenshot".
That seems like a problem that should have 100 open source solutions for it, and I am sure there are some that work really well! But I personally haven't found one yet.
At least that is what I use to do for screen testing for some of our low-hanging-fruit QA.
At some point I rewrote it in puppeteer and it was as simple as the above line.
The screenshot results in being the X/Y size.
I'd be interested in why this doesn't work in your usecase.
I made something almost exactly like this before. I needed to convert svgs to pngs and have them display the same way they looked in the browser. It turned out that spinning up chromium and taking a screenshot was the easiest thing way to do that. I think I used puppeteer.
It feels fairly reasonable imo to specify something like "this uses phantomjs with the following screen size" and just say peoples work has to fit that.
Both of these require rendering the content via an HTTP endpoint and both of these currently only work together with the device backend.
> I can buy an ESP32 e-ink screen and run esphome or any of several other open source projects and put a piece of wood on the front of it, too.
Yes, you can! And if you do this, you have absolutely no need to use my e-paper smart screen.
(Though, for the record, it's not just a piece of wood in front, it's a CNC'd frame)
The PoE to USB solution is a "PoE splitter" and they're cheap and very useful. The website says the device has a USB-A connector for power. That's a bit of an odd connector to power a device from (since A is supposed to be a host port). Is that port really an A?
EDIT: I cannot respond to the child comment, but yes: The Device has a male USB plug, and then the cable goes right into the device, no receptacle on the device.
There's a lot of low-hanging fruit there. Particularly because the device has a USB port and, by design, exposes a user partition that you can read/write to (so you can upload files and documents and ebooks to the device).
There's definitely been an effort by Amazon to lock them down, but just taking your reverse-engineering tool of choice and decompiling their firmware binary will give you tons of readable code to dig through. They use a mix of java, native c, and javascript.
Fun fact, at startup the Kindle looks for certain files in the user partition, with certain naming patterns. You can, for example, disable the screensaver by dropping a file with a special name there. They patched this once, but after doing a grep for the user-partition mount location (to see all the places in their code where they read from user partition files) I was pretty quickly able to find another way to do this. It's fun stuff.