E-Ink Training Display
A calm, intentional physical device that surfaces meaningful information without demanding attention. Design like a printed page, not a digital screen.
Core Vision
Three views, one philosophy:
| View | Purpose | Updates |
|---|---|---|
| Training Log | Today’s workout, streak, next session | On-demand + after workouts |
| State of World | Date, weather, calendar, unread items | Every 15-30 min |
| Focus Mode | Current task, timer, minimal distractions | Manual toggle |
Hardware Stack
- Compute: Raspberry Pi Zero 2 W (quad-core ARM, 512MB, WiFi)
- Display: Waveshare 7.5” E-Paper V2 (800×480, B/W, ~4s full / ~0.4s partial refresh)
- RTC: DS3231 (±2ppm accuracy, CR2032 backup, I2C @ 0x68)
- Input: 3× tactile buttons (prev/next/action)
Total power: ~0.6W average. Display draws near-zero when not refreshing.
Key Design Decisions
Why Pi Zero 2 W over ESP32? Full Linux + Python ecosystem wins for development speed. ESP32’s deep sleep advantage matters more for battery projects — this is wall-powered.
Why 7.5” B/W over tri-color? Tri-color is 26s refresh vs 4s. That’s the difference between responsive and frustrating.
Why RTC? Pi loses time on every power cycle. Network may be unavailable at boot. Accurate timestamps for training logs matter.
Software Architecture
Application Layer → Views (Training, World, Focus, Settings)
↓
Service Layer → Weather, Calendar, Training, Config
↓
Hardware Layer → Display Driver, RTC, Buttons, Network
State machine: BTN1/BTN2 cycle views, BTN3 short = action, BTN3 long (2s) = enter focus/settings.
Data Layer
SQLite for training logs:
workouts→ date, name, type, durationexercises→ workout_id, name, ordersets→ exercise_id, reps, weight, rpedaily_metrics→ denormalized for fast queries
File-based cache for API responses (weather, calendar) with TTL.
Open Questions
- Calendar integration: Google Calendar API vs manual entry?
- Training data source: Manual logging vs sync from existing app?
- Enclosure: 3D printed vs picture frame hack?
- Button placement: Below display or side-mounted?
Bill of Materials
| Component | Cost |
|---|---|
| Pi Zero 2 W (w/ headers) | $18 |
| Waveshare 7.5” E-Paper HAT V2 | $55 |
| DS3231 RTC Module | $10 |
| 32GB microSD (A2) | $10 |
| 5V 2.5A Power Supply | $10 |
| Buttons + Wires | $10 |
| Total | ~$113 |
Plus $15-30 for enclosure.
Implementation Phases
- Hardware (Week 1-2): Assemble, test display pattern
- Core Software (Week 2-3): Views rendering, buttons working
- Services (Week 3-4): Weather, training data integration
- Polish (Week 4-5): Enclosure, reliability, systemd service
Resources
- Waveshare 7.5” Wiki
- Open-Meteo API — free weather, no API key
- MagInkCal — similar project for inspiration
- TRMNL — commercial e-ink dashboard
Next Actions
- Order components
- Flash Pi OS Lite, enable SPI/I2C
- Run display test with Waveshare examples
- Wire up RTC, verify I2C detection