Overview

A Reader That Kept Growing.

Fernweh is a fork of t5-ereader-firmware by Eric Antonson / Yeti Wurks LLC, taken up at upstream v0.4.5 under the MIT licence. That project contributed a working EPUB engine: parsing, pagination, fonts. Fernweh's licence carries a dual copyright saying so. I took a good reader and asked it to become something else.

The something else is a device you take out the door instead of a phone. It runs on a LilyGo T5 4.7-inch e-paper board: an ESP32-S3 driving a 960×540 sixteen-shade grey panel, with capacitive touch and a microSD slot. It joins home WiFi to fetch books, weather and map tiles.

The Fernweh home screen: a six-card grid of Reader, Weather, Games, Maps, Music and Settings
The launcher. Six peers, no Settings maze.
Offline map rendered on the e-paper panel, dithered for a sixteen-shade grey display
Maps, off a tile pyramid on the SD card. The tone curve is tuned so raster tiles stay legible in grey.
Weather screen showing a current reading and a seven-day forecast strip
Weather keeps the old forecast on screen while fetching the new one, labelled with its age.
Games menu listing Checkers and Othello, each offering to continue a saved game
Games. Both resume where you left them, which matters on a device you put in a bag mid-turn.

Captured by dumping the device's framebuffer over USB serial, so these are the exact pixels that were on the e-paper, not photographs or mockups.

The Direction

Everything Is an App

The original firmware treated the book library as the home screen and buried everything else in Settings. Fernweh replaced that with a launcher: a grid of peer apps, each opening and backing out to home. The board has exactly one physical button (short press forward, double press back, long press sleep), so every app works by touch too.

Reader

Books

EPUB reading with chapters, bookmarks, five text sizes, a serif/sans switch and five line-spacing settings. It also pulls books straight off a Calibre server or Project Gutenberg over OPDS (an open catalogue standard for book libraries), with a genre browser you work by tapping alone.

Weather

Forecast

Forecasts from Open-Meteo, located by a rough network lookup. An optional GPS module is wired in and its NMEA stream parses on-device, but a satellite fix is still untested outdoors, so location does not depend on it. The last forecast stays on screen while a new one loads, labelled with its age.

Maps

Offline Maps

Tiles live on the SD card, so the map works with no signal at all. Drag to pan, search real places and businesses, get a walking route drawn on the map. On WiFi it downloads and keeps an area for later; the tiles come from a provider that permits caching, never from scraping OpenStreetMap's own tile servers.

Games

Checkers & Othello

Two board games written from scratch for a screen that redraws slowly. Tap a piece, then tap where it goes; never drag. Both save after every move, so the device can fall asleep mid-game and wake exactly where you left it.

Music

Audio

The player and audio engine are built: MP3, FLAC, WAV, M4A and AAC from an SD folder. Getting sound out needs a small external audio chip wired to three spare pins. The board has no speaker and no audio output, and this chip family has no Bluetooth Classic, so ordinary wireless headphones are impossible in any firmware for it.

The Hard Part

Fighting the Screen

E-paper holds an image with no power; that's why the battery lasts. Changing that image is slow, though, and old pixels leave faint traces behind (ghosting). Nearly every decision here is downstream of that.

Performance

Never Decode During a Redraw

Page turns use a fast partial refresh, with a stronger cleaning pass on a cadence to scrub the ghosts. That budget doesn't survive decoding a JPEG mid-page, so pictures inside a book are converted once, ahead of time, into a ready-to-draw file on the SD card. Painting a page becomes a read and a copy. PNG images are deliberately skipped for now: that path could corrupt memory and reboot the device.

Constraint

Replacing the Boot Screen

The inherited boot screen was a 36 KB picture compiled into the firmware. Rebranding could have meant drawing a new one; instead the new one is typographic: wordmark, rule, the subtitle “a longing for far-off places”, version. It's built from lines and text, no image at all. The rebrand handed back 36,720 bytes of flash, the exact size of the bitmap it replaced.

The Fernweh boot screen: the wordmark, a rule, the subtitle a longing for far-off places, and the firmware version

The one that took three tries

Switching apps used to flash the whole screen black-and-white several times. Replacing that with an animated wipe made it slower; the fix looked right and measured wrong. The cause sits in the panel itself: a grey redraw scans the entire screen no matter how small the region you asked for, so animating in ten steps cost ten full refreshes. The working version sweeps a single-colour frame instead, about 40 ms a step against roughly 600 ms for a grey redraw, then paints the finished screen once. There are fourteen wipe styles now, picked at random each time you move.

Boot took three minutes because of empty folders

The device logged 31 books found in 183,709 ms. Three minutes to start, for thirty-one books. The library scanner walked /books recursively, and that SD card happened to hold about 1,600 subfolders; at roughly a third of a second each over SPI, the walk itself was the entire startup time. The scan now runs in two phases: loose .epub files at the top level appear immediately, then subfolders are explored only until a four-second budget runs out. Boot is bounded now, whatever anyone puts on the card. It starts in seconds.

Status

Where It's Going

Planned

Interactive Fiction

Designed, not built: choose-your-path stories reusing the reader's own text layout, then an interpreter for the classic text adventures. It's a good fit for a screen you read, not watch.

Planned

Optional Phone Pairing

A mode where a phone hands over its location and weather over Bluetooth Low Energy, for trips with no WiFi. Optional by design; the device has to work identically with the phone left at home.

Honest status

Fernweh runs on real hardware and updates itself over WiFi, no cable. Reader, launcher, weather, maps and games work; music waits on a small soldering job; GPS is an optional add-on, not stock. It's a personal device, not a product. And it stands on Eric Antonson's t5-ereader-firmware, where the reading engine came from. Next up is 802.1X enterprise WiFi for university and workplace networks: specced, and reusing a recipe already proven on Planetaria, but not built yet.