Get Started

A battery e-ink dashboard that runs for months on one charge

A paper-like screen on the hall shelf with today's weather, a rain chart for the next twelve hours, your calendar, live departures and your to-do list. No cable: it wakes every 15 minutes, fetches a fresh picture, redraws and goes back to sleep, and a 2000mAh battery keeps it going for around three months. You render your own dashboard on your PC in step 1.

180 minAdvancedTools: Around £60 to £70 for the panel (Seeed XIAO 7.5in ePaper Panel), software freeStep 1 free
A renderer that draws an 800x480 black-and-white dashboard from live data: Open-Meteo weather, any ICS calendar, TfL departures and line status, a to-do file
ESPHome firmware that wakes, downloads, redraws and deep-sleeps, and sleeps straight through the night
A battery budget you can calculateseconds awake per wake, wakes per day, months per charge
  • The design pattern behind every good e-ink display: the server does the work, the battery board just shows a picture
  • A kit: renderer, config, ESPHome YAML that validates and compiles with ESPHome 2026.9.1, battery calculator, systemd service, parts list
Before you start
  • A Seeed Studio XIAO 7.5in ePaper Panel (ESP32-C3, 800x480, 2000mAh battery; around £58 to £70) or an Inkplate
  • An always-on computer on your network to run the renderer: a Raspberry Pi, NAS or home server
  • uv for Python (uv docs ↗) and a USB-C data cable for the first flash
  • Comfortable editing YAML and JSON. ESPHome basics help: Run AI on a £5 chip uses it too
01/06Render your dashboard on your PC0 done
STEP 01 of 06~20 min

Render your dashboard on your PC

See the exact picture your e-ink screen will show, built from live data, before you buy anything.

  1. Why server-side renderingDrawing fonts, charts and calendars on a tiny battery board is slow, and every second awake costs battery. So a computer on your network draws the whole dashboard as an 800 by 480 black-and-white PNG, and the e-ink board just downloads it and shows it. Changing the layout never means reflashing the board.

  2. The kitDownload the kit or open kit.md. Edit dash.json: your latitude and longitude, your calendar links, and your station. Then render once:

    Terminal
    uv run --with pillow --with icalendar --with recurring-ical-events python dash_server.py --config dash.json --render dashboard.png
    Output
    wrote dashboard.png
    Black and white 800 by 480 dashboard: Monday 12 October, 14 degrees partly cloudy with a 12-hour rain chart, three night bus departures, today's calendar with three events, a to-do list with tick boxes and a line saying the Tube is closed for the night
    Rendered at 02:35 with live Open-Meteo weather, live TfL night buses and line status. Calendar events and to-dos are sample data.
  3. What's on itCurrent temperature and conditions, today's high, low and sunset, and a bar chart of the chance of rain for each of the next 12 hours (the most useful thing on the whole screen when you're deciding on a coat). Live departures from your stop, today's events with tomorrow's first one underneath, your to-dos with tick boxes, and the status of the lines you care about along the bottom.

✓
Checkpointdashboard.png shows your local weather, a rain chart, and today's events from your own calendar.
If it breaksIt shows Calendar unavailable + 1 more
It shows Calendar unavailable
The ICS link isn't reachable or isn't a calendar. Open the link in a browser: it should download a file starting with BEGIN:VCALENDAR. For Google Calendar use the Secret address in iCal format from the calendar's settings.
Fonts look blocky
The renderer looks for DejaVu Sans (installed on most Linux), then Segoe UI and Arial. On a minimal Linux box run sudo apt install fonts-dejavu-core.
Still stuck? Ask the community
Next mission · Advanced buildsBuild your own NAS that checks, snapshots and backs itself up
→