NHacker Next
  • new
  • past
  • show
  • ask
  • show
  • jobs
  • submit
Hacking an old Kindle to display bus arrival times (mariannefeng.com)
hex4def6 24 hours ago [-]
As someone who worked on kindle power consumption many years ago: One of the (by far) biggest consumers of power is the WiFi connection. It has to wake up and respond to the AP in order to not get disconnected every x seconds.

Off the top of my head, I think 'on' average power consumption was ~700uA without wifi, and about 1.5mA+/- with Wifi. This is from over a decade ago, so my memory is fuzzy though...

Obviously, page changes used relatively large amounts of power. I don't recall the exact amounts, but it was 100s of mA for seconds.

There is also an "every x pages, do a full screen refresh (black to white)" to fix up the ghosting issue that the article writer saw.

thegrey_one 22 hours ago [-]
I removed the battery on mine, kept the battery chip and fed 5V into the battery terminals, from Kindle's USB connector, through a diode (so 4.4V-ish). Without a battery it needs something that can deliver at least 1.5A, for short bursts. An older powered usb hub seems to work fine, hub is connected to my raspberry pi, and I use ssh through usb networking, no wifi, no battery, worked fine for months now.
ge96 6 hours ago [-]
I never connect my RM2 to wifi and it's crazy, I don't charge it for months. Granted I use it maybe under 30 time a month too. I guess WiFi isn't necessarily disabled but yeah.

Haven't modded my paper white kindle, I'm thinking at the very least I'm going to get rid of those forced ads you read when you wake it up.

mengchengfeng 23 hours ago [-]
Awesome tips. I'll try increasing the refresh interval to 2 minutes and turning off the wifi in between refreshes to see if helps with battery life.

Side note this also finally explains to me why battery life on the Kindle is SO good in airplane mode.

rwyinuse 15 hours ago [-]
Yeah you'll probably want to turn on airplane mode between the refreshes. That's at least what KUAL "Online screensaver extension" from Mobiread forums does, with it I'm getting several weeks of battery life with refreshes every couple of hours.
jbl0ndie 22 hours ago [-]
Could you adjust the refresh frequency based on your usage patterns? So refreshing less frequently outside your main transit times. An extension of your current pause at night.
nanobuilds 18 hours ago [-]
wonder if small amorphous silicon photovoltaic cells glued around the kindle would provide enough power to not charge every 5 days
8 hours ago [-]
thegrey_one 22 hours ago [-]
I took an even simpler route. After jailbreak and ssh I just made two scripts on the Kindle, one is triggered every minute, the other every half hour. Both draw the same image from the same location, the 30 minute one just adds a full refresh. This way the display is not fully refreshed every minute, but in time image is degrading so full refresh once every 30 minutes seems work out fine.

This way Kindle has a very simple job, no apps installed no anything, just two extra cronjobs to run the oneliner bash scripts that draw the image. And I use rsync from a raspberry pi to push a new image every minute. That image is assembled with a python script, rpi side, with air quality data. Connects to local mysql server, pulls the values and then assembles it.

password4321 22 hours ago [-]
> even simpler route ... rsync from a raspberry pi ... python script ... air quality data ... local mysql server

I smiled

thegrey_one 22 hours ago [-]
Ok fair enough but considering the Kindle ecosystem I'd rather deal with raspberry pi than with the Kindle stuff.
PunchyHamster 22 hours ago [-]
it's simple if the other stuff is already in place
nine_k 21 hours ago [-]
A pretty dumb eInk display that could do one thing, that is, receive and blit a bitmap at a given location, would suffice for great many uses. It only needs a way to connect to wifi or zigbee securely, e.g. using TLS.
gorgoiler 17 hours ago [-]
This is sort of related to a revelation I had once I got into Home Assistant.

The usual idea is a that a smart home becomes filled with smart devices and yet what worked really well for me was having dumb devices with a very smart brain in the middle.

Buttons, switches, lamps, and sensors are commodify Zigbee devices and the entirety of the logic and programming is done on the Home Assistant server. The downside is latency.

MayeulC 13 hours ago [-]
Usually you can bind ZigBee devices together. I have multiple IKEA "rodret" switches bound to generic ZigBee smart plugs from Aliexpress. Works great, with minimal latency.

With zha, you can bind them together from the Home Assistant device page.

I usually favor an architecture that can work without Home Assistant, such as standalone ZigBee dimmers, or contactors that can work with existing wiring. Home Assistant brings automation on top, but it doesn't matter much if it breaks (I mostly notice the shutters not opening with sunrise). Then Internet connectivity can bring additional features, but most things still work if it's down.

I'd say it has been pretty solid for years, and I don't stress too much when I have server issues.

lopis 13 hours ago [-]
Such devices exist are are expensive, more so than e-readers.
CTDOCodebases 11 hours ago [-]
I took an even simpler route.

I Jailbroke my Kindle so I can read epubs on the bus and I just ask Siri when the next bus is comming.

SwtCyber 12 hours ago [-]
There's something very satisfying about solving the whole problem with a couple of scripts instead of building a full framework around it
FlyingSnake 1 days ago [-]
Kindles are fun devices to hack and play with. I can grab an old kindle for €15-20 on eBay.

I did the same last year and had lots of fun in the process.

https://samkhawase.com/blog/hacking-kindle/

CTDOCodebases 11 hours ago [-]
There is also the Xteink4[0] that can be purchased on Aliexpress. It's just an ESP32 with an e-ink screen.

It costs more and is smaller but when you are done playing around with it you can flash it with Crosspoint[1], carry it in your pocket and read books on an e-ink display wherever you are.

[0] - https://www.youtube.com/watch?v=yMoq17-1pJA [1] - https://github.com/crosspoint-reader/crosspoint-reader

moffkalast 1 days ago [-]
For the less reverse-engineering prone among us, there are also similarly sized e-ink displays that plug into Raspberry Pi DSI ports for maybe $5 more on Aliexpress. They might actually be salvaged kindle screens.
slig 1 days ago [-]
Do you have a model number or link, please?
bartvk 14 hours ago [-]
I seriously do not like people saying "it's on AliExpress". I'm sure it is, but the problem is quality control so a specific link is greatly helpful.
slig 12 hours ago [-]
Yeah, there's a ton of e-ink displays, most of them do not come with the controller or are replacement for kindle (how to drive those?) or are tiny.
moffkalast 12 hours ago [-]
I'm afraid I can't really vouch for any specific one, it's been years since I've messed around with one and suppliers change their stock constantly.
mengchengfeng 1 days ago [-]
I love it! Always fun to see the route somebody else took to get to the same end product.

Your post is making me want to try more Cloudflare Developer Platform stuff like Cloudflare Workers.

uyzstvqs 24 hours ago [-]
Can you start jailbreaking straight away, or does it require an internet connection and Amazon account first during setup?
mengchengfeng 23 hours ago [-]
I don't believe you need internet connection - IRRC jailbreaking steps were plug in the Kindle, drop the jailbreak folder into the root directory, then choose `Update` from the Settings screen.

The hardest part was finding the `Update` menu item. It's only visible if you go to Settings, then press the menu button again while on the Settings page.

Not sure if registering the Kindle was required.

simonklitj 22 hours ago [-]
Depends on the firmware of the device. Latest firmware (anything after version 5.18.5.01 - which released in October 2025) is currently not jailbreakable.

Jailbreak of any firmware after version 5.16.2.1.1 (June 2023) requires the Kindle to be connected and registered.

Anything prior to, and including this version, can be jailbroken with no registration.

23 hours ago [-]
Havoc 22 hours ago [-]
Don’t connect it. I bought one for this purpose and it updated to a version that didn’t have a known jailbreak
kakkun 7 hours ago [-]
Nice!

Here's my version of a kindle dashboard I set up several months ago (https://github.com/thekakkun/kiiin). I use it to show local weather data and music data from my media server.

As for the "color bleed" (I assume it's ghosting) you mention, periodically using `eips -f` when drawing the image to force a full screen redraw should help.

mengchengfeng 7 hours ago [-]
Woww written in Rust, nice! Very cool, first time I've been tempted to learn Rust.
rwyinuse 15 hours ago [-]
Old kindles are a lot of fun. I've turned a couple of them into AI generated paintings that refresh their contents every few hours or so. I can control the prompts via web-ui, through template functions they can include things like weather conditions, random animals, countries, current date & time and even titles of random news articles. Prompt handling and image generation is done completely locally on my home server, using ollama and stable-diffusion-webui.

The only problem I've had is that most news articles from mainstream media are damn depressing, so generating paintings directly from them gets gloomy quick. I had to instruct ollama to try put a positive spin on negative articles. I do love my weather-forecast painting though. Whenever it's raining outside, the painting has rain in it too (or now during winter it's all snowy).

Battery life is really good too, lasts several weeks. I used existing "Online Screensaver extension" from MobileRead forums, with some customizations. It automatically turns on airplane mode after fetching the image and keeps it on until next fetch, which probably explains the improved battery life.

CamelCaseCondo 13 hours ago [-]
You could do imperfect speech to text and have one illustrate the ongoing conversation.
SwtCyber 12 hours ago [-]
E-ink feels weirdly well-suited to generative art
selcuka 17 hours ago [-]
In Queensland, Australia we have solar powered e-paper displays [1][2] at some bus stops that are very similar to this (much bigger than a kindle screen, though).

[1] https://translink.com.au/about-translink/projects-and-initia...

[2] https://www.facebook.com/TranslinkQLD/videos/e-paper-trial-h...

SirFatty 1 days ago [-]
For some reason, this project reminds me of this one:

https://engineersneedart.com/systemsix/systemsix.html

mengchengfeng 1 days ago [-]
Woah this is really cool! Makes me want to create a custom mount
pilina 11 hours ago [-]
Everybody seems to do stuff like this nowadays. Myslef included. I did have old K4NT lying around and started playing with it. With a little bit of help of AI (not for jailbreaking though! - lots of nonsense) I was able to put up little server, which now serves family calnedar agenda, but it is designed to be modular and I will put more stuff to it later. I've even designed and 3D printed insert into Ikea 12x18 frame and put a small "blade" powerbank with MagSafe to the back, so now I need to push powerbank button every 5 days. Internal battery is in a bad shape now, but I saw I can still buy an replacement. Wired version was not an option in my case.
scary-size 13 hours ago [-]
Real nice! Shutting down networking between refreshes definitely helps with the battery life. I also prevent mine [1] from updating between 10PM and 6AM. Nobody is looking at it anyway. If you search around on Github for Kindle dashboards, there's a lot of scripts out there with a bunch of battery life improvements (shutting down daemons, wifi etc.).

I built GTFS based public transit display on top of a Raspberry Pi Zero and a 2" e-ink display ~10 years ago [2].

[1] https://franz.hamburg/writing/kindling-e-ink-dashboard.html

[2] https://github.com/Scarysize/transit-pi

mengchengfeng 6 hours ago [-]
Hah I love the random Pokemon + remaining time for Laundry + Dishwasher! I'm not usually a big fan of smart appliances but boy oh boy would it be cool to display remaining time left for laundry on a dashboard...
miohtama 7 hours ago [-]
Very nice post! This is finally news for hackers again.
michaelbuckbee 1 days ago [-]
I love using Kindle's as single purpose tablet/interfaces/displays. I'm the weirdo who actually prefers the LCD displays vs eInk and it's incredibly easy to set Kindle Fire's into dev mode which lets you display a webpage, never turn off while connected to power and never show ads.

You can regularly find the Kindle Fire HD10s for ~$40

mengchengfeng 1 days ago [-]
Good to know about Kindle Fire. And hah, I can totally see why you'd prefer LCD's over e-ink - no ghosting + readable in pitch dark would be a sweet upgrade to the dashboard.
mbirth 23 hours ago [-]
A while ago I've rewritten TRMNL's Kindle-client from Bash into Lua, optimised it a bit and when doing a refresh every 5 minutes, my Kindle Paperwhite 10th gen now lasts about 5-6 days on a charge.

https://github.com/mbirth/trmnl-kindle/tree/lua-rewrite

ryanckulp 22 hours ago [-]
awesome work! the original Kindle project definitely has quirks, so we now offer a KOReader option as well. https://github.com/usetrmnl/trmnl-koreader/
mkmk 1 days ago [-]
I was glad to see the note about battery life down at the bottom. My biggest challenge with the old Kindles I have laying around is that most of them won't hold a charge!
bpmct 1 days ago [-]
I haven't developed on the Kindle ecosystem, but with old Nook devices I am able to set a screensaver, alarm, and put the device into deep sleep between refreshes. This changed my battery life from ~48 hours into 30+ days of battery life even with some old devices.

The "electric sign" app does this, which is where I referenced the code.

With trmnl, the image only refreshes every 10 mins so the device will set a ~9 minute alarm to wake the device right before it needs to load the next update.

The refresh period is also configurable so a slower refresh interval (e.g. every hour for less time-sensitive screens) yields larger battery savings

thegrey_one 22 hours ago [-]
I removed the battery but kept the I2C chip/pcb, and fed 5V from USB port via a diode, on the PCB battery connections, seems to work fine. I actually installed a single wire from USB VCC to diode then + battery terminal. But you need to power the Kindle from something that can deliver at least 1.5A for startup peaks. A USB hub does the job fine in my case, and also connects it to a raspberry pi for ssh through USB networking, so no wifi either. Use a good USB cable for power.
mengchengfeng 1 days ago [-]
Yeah that was definitely a worry of mine before I booted it up. Luckily it's still got decent battery life. We'll see how it holds up in 6 months...

Dyson vacuums and Kindles are not the same whatsoever, but I wonder how easily it'd be to swap out the battery on an older Kindle. For our vacuum, all I needed was a 20 dollar replacement battery and the will unscrew 3 mini screws.

BobaFloutist 1 days ago [-]
One thing that's disappointed me is that despite all the excitement over better and cheaper battery technology, you can't buy a cheapish drop in replacement battery for e.g. an old kindle that has more storage capacity than the OEM version.

I understand there's like all sorts of complexities in standards, form factors, voltage, wattage, etc, but I really wish I could upgrade my old devices like that.

hackersk 20 hours ago [-]
This is the kind of project that makes me want to raid the drawer of old electronics. The power consumption breakdown from hex4def6 is really valuable context too - wifi being the dominant power draw explains why so many of these e-ink dashboard projects end up with a Pi doing the heavy lifting over USB.

I've been thinking about similar setups for kitchen recipe displays. E-ink is perfect for anything you glance at - no backlight burning your eyes at 6am, and the always-on nature means you don't have to wake up a screen. The trade-off of slow refresh is actually a feature when your data only changes every few minutes.

ajb 12 hours ago [-]
These days digital shelf labels look like a really cheap option; lots of them look like they require a proprietary base station, but there are some out there with BLE/NFC - have been meaning to get one to try.

Of course, if you have an old kindle about, reusing it is a great way to avoid waste.

lee_wc 23 hours ago [-]
This is great! I love seeing e-ink/Kindle related displays. I thought I saw a HN article about it 'awhile ago', turns out, time flies, that was back in 2024!

This is the link: https://lilymara.xyz/posts/2024/01/transit-kindle/ from https://news.ycombinator.com/item?id=41923753

The author went from rendering a pixel-perfect image on Kindle to building a separate HTTP server to do it in rust!

Related: https://news.ycombinator.com/item?id=37661387

aaronbrethorst 17 hours ago [-]
I took an even simpler route:

I rebuilt the OneBusAway iOS app from scratch as a pair of Swift frameworks that will work anywhere, including tvOS[1].

Then, I started a new project to rebuild the OneBusAway server in Golang from scratch[2].

Then, I got an intern to build a suite of fantastic SDKs on top of Stainless[3].

Finally, I got Google to pay for an intern last summer to build a sign mode UI in SvelteKit that will work in any browser[4].

Easy!

But seriously though, if your transit agency isn't so cool that they provide GraphQL endpoints to query transit information, I think you'll find that the OneBusAway Maglev server is an incredibly easy way to consume your transit agency's scheduled and realtime data, and that our SDKs and apps are a fantastic way to visualize all of that information.

We're always looking for software developers to help out with our projects, as well as folks in disciplines ranging from user experience and product management, to biz dev and marketing, to volunteer some time to help our underfunded open source projects succeed. Feel free to reach out to me at aaron@onebusaway.org if that sounds interesting to you. Our software is used by millions of people every day in cities all around the world, including Seattle and New York City.

----

[1] https://github.com/oneBusAway/onebusaway-ios/

[2] https://github.com/OneBusAway/maglev

[3] https://developer.onebusaway.org/api/sdk and Stainless (which is a really terrific product) is at https://www.stainless.com

[4] https://github.com/oneBusAway/waystation

johndhi 8 hours ago [-]
Yes! I want this so bad. But for the weather or my calendar for the day.
mengchengfeng 6 hours ago [-]
If you've got an old Kindle, this project is totally doable over a weekend! Especially if you start with only weather data to begin with.
siddhartpai 13 hours ago [-]
would a barebones html page showing the bus timings and refreshing automatically every couple of minutes work?

Or is there a javascript restriction on kindle?

mengchengfeng 6 hours ago [-]
Seems like it should work. Another commenter said that for their dash, they had a site that they kept open in the Kindle browser.

Although I did notice some weirdness with using the browser. I have an HTML endpoint up at https://kindle.mariannefeng.com/, and for some reason whenever I tried to go to that page using the Kindle browser, it returned a message about not being able to load the page. And I don't even think my page has javascript.

spinningarrow 13 hours ago [-]
A long time ago I made a smart home automation web page for my Kindle, so that should definitely work.
jonmon6691 23 hours ago [-]
I made something like this! Except I have it plugged into an outlet in the kitchen, so no battery to deal with. It's a little hacky but it works for me.

https://github.com/jonmon6691/arduino_busstop

mengchengfeng 6 hours ago [-]
Oh your mini screen is so cuuuute! Hey whatever works
TurdF3rguson 20 hours ago [-]
If they ever reboot that Twilight Zone where Burgess Meredith breaks his glasses they should do someone who did this to their kindle.
SwtCyber 12 hours ago [-]
Makes me wonder why there isn't a whole category of "public display-friendly" e-ink devices with first-class APIs...
marsbars241 21 hours ago [-]
Regardless of anything else, I thought we were done messing with the cursor on websites.
mengchengfeng 19 hours ago [-]
Hahaha I love this comment!
retired 13 hours ago [-]
I don’t use public transportation but don’t the bus stops have these signs already? I remember seeing them.
stevekemp 13 hours ago [-]
I built a hardware display, with an LCD and a WeMos Mini D1, so that I can see the upcoming tram departure times outside my house. I could use the website, or a phone app, but having the departure times always present right by my front door is a real game-changer.

The actual tram-stop does indeed have a display, but here in Finland it might be -20°C in the winter time so I don't want to walk to the stop earlier than necessary.

Sure waiting ten minutes won't kill me, but I'd much rather wait 1-2 minutes instead. Keep myself toasty-warm indoors.

retired 13 hours ago [-]
Got it, I always thought that busses and trams would stop every couple of minutes. A ten minute wait is indeed a bit too much at those temperatures.

Living in warm country I don't really understand why people would live in such harsh conditions but that is a different topic :)

dxdm 13 hours ago [-]
Not all of them do. It's also nice to have one closer to you, so you don't have to walk to the bus stop to find out when it's time to leave house for the bus...

You could check on the phone, but I could certainly see the appeal of a fixed display in a convenient location.

retired 13 hours ago [-]
I don't really understand, don't you just go out of your house, go to a bus-stop and wait for the next one? Isn't the bus arrival display more of a convenience to know how long to wait? For the bus stop in my neighborhood I see busses every couple of minutes.
tdeck 13 hours ago [-]
You're very lucky to have high frequency transit. I've lived in several places (in cities) where the bus routes ran every 20-30 minutes. So if you don't feel like waiting at a bus stop for 20 minutes, often these days one without any seats, it's nice to be able to check the ETA.
retired 13 hours ago [-]
Got it. I typically use my legs or bicycle to get from A to B. Don't like being stuffed in a metal box with strangers. 20-30 minutes would definitely warrant a nice display on your fridge!
rga5321 16 hours ago [-]
In case anyone wants Todoist + Gcal events on the kindle, I coded a simple web app for that some years ago:

https://github.com/rga5321/productivity-dashboard

I am not using it anymore as I bought a TRMNL display and set up a simple template to do the same, but it worked well for me.

23 hours ago [-]
adhamsalama 1 days ago [-]
Why Jailbreak the Kindle when you can just open its browser and visit a website that shows the arrival times?

The Kindle browser is surprisingly decent, I made Claude Code generate an RSS feed reader compatible with the Kindle browser, with the ability to read full articles (for those feeds that require you to visit the website), and download articles. It also supports Reddit and Google News RSS feed. This is my new favorite way of browsing the internet.

https://github.com/adhamsalama/simple-rss-reader

mengchengfeng 1 days ago [-]
It's easier to load up a page in the Kindle browser, but more fun to jailbreak :D

I also didn't want the browser bar at the top.

adhamsalama 1 days ago [-]
Fair enough. I did consider jailbreaking my Kindle but I am afraid of bricking it.
thegrey_one 22 hours ago [-]
Bricked it few times in the process of figuring out more stuff about it, but luckily mine has a UART pads and I was able to restore it every time. A bit more involved as it's 1.8V if I remember right, but if you're careful it should be easy, provided you have the time.
mengchengfeng 1 days ago [-]
Also fair - bricking it was definitely one of my main concerns.

After going through this process though, I'd say as long as somebody has basic linux knowledge, chances of bricking are pretty low.

unrealhoang 22 hours ago [-]
it will be much less power-efficient, when jailbreak you could schedule the kindle to wake up once per 15/30/60 minutes to fetch the new data, set it as screensaver and then go back to sleep.
abstractspoon 17 hours ago [-]
Very cool
lifestyleguru 15 hours ago [-]
Did you hammer nails straight into a wall like a barbarian?!
mengchengfeng 6 hours ago [-]
Hahaha 100%. No 3D Printer and I wanted to be able to easily remove it from its "mount" for charging.

It teeters a fine line between jank and minimalism.

nickcageinacage 8 hours ago [-]
awesome
TZubiri 1 days ago [-]
A little bit of a hijack, but it's hard to find a more relevant time to post this.

For a defunct startup, I built this exact thing as a product for coffee shops:

cafetren.com.ar

https://cafetren-com-ar.translate.goog/?_x_tr_sl=auto&_x_tr_... (translated from spanish):

umairnadeem123 1 days ago [-]
[dead]
mengchengfeng 1 days ago [-]
Right now I'm doing a partial refresh, and it manages to last for a couple days but would be cool if it could be unplugged for 2 weeks.

A small solar battery is a VERY interesting idea. If I don't end up being able to hit that number by adjusting the code itself, will look into it.

thaumasiotes 1 days ago [-]
> for a bus schedule that updates every 60 seconds

Bus stops in Shanghai have e-ink displays that are kept up to date with the current estimated arrival time of each bus. (I don't know what the time resolution is; it could be 60 seconds, but not much longer than that.)

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact
Rendered at 22:35:38 GMT+0000 (Coordinated Universal Time) with Vercel.