MagInkCal: E-Ink Calendar Project
Prior art for the eink training display spec. A mature e-ink calendar project with lessons learned.
Architecture
PiSugar2 RTC wakes Pi → Cron triggers script →
Fetch Google Calendar → Render with PIL →
Display on e-ink → Shutdown
The Pi only runs for the few seconds needed to update. E-ink persistence means the calendar stays visible while powered off.
Key Decisions
Waveshare 12.48” tri-color display: Supports black, white, red. But tri-color is slow (26s refresh). For my project, B/W with 4s refresh is better.
PiSugar2 for battery + RTC: Provides scheduled wake via onboard RTC. Gets 3-4 weeks battery life. Since my display is wall-powered, I don’t need this — but the RTC concept applies.
Bootstrap CSS → PIL rendering: Uses HTML/CSS for layout, then renders to image. Interesting approach but adds complexity. Direct PIL drawing is simpler.
Google Calendar Integration
Uses official Google API Python client:
- Generate OAuth credentials in Google Console
- Run
quickstart.pylocally to authenticate - Creates
token.picklefor persistent auth - Transfer pickle to Pi
This is the standard Google Calendar approach — works but requires initial OAuth dance on a machine with a browser.
Display Constraints
- Only 3 events per day fit (with “4 more” overflow indicator)
- Shows 35 days (current week + 4 weeks)
- Multi-day events show start/end with arrows
These constraints come from resolution and readability. My 7.5” display (800×480) will have similar limits.
Lessons for My Project
Do:
- Use cron for scheduling
- Cache API responses aggressively
- Full refresh daily to clear ghosting
- Shutdown/sleep when not updating
Don’t:
- Depend on “bullseye” RPiOS with older Pi Zero (use Pi Zero 2 W)
- Expect complete documentation (plan to read code)
- Use tri-color if refresh speed matters
Related Projects
- MagInkDash: Same author, adds weather + OpenAI
- mendhak/epaper-dashboard: SVG-based templating, multiple weather providers
- mcal: Uses Pico W + 12” Pervasive Displays
Sources: