Custom E-Paper Fitness Dashboard – From Training Focus to Full Flexibility
by rsappiawf in Circuits > Arduino
81 Views, 1 Favorites, 0 Comments
Custom E-Paper Fitness Dashboard – From Training Focus to Full Flexibility


After a first dive into the world of e-paper with a simple Solar E-Ink Weather Station, I’m back — and this time with something bigger, smarter, and definitely more personal.
This project is a smart training dashboard powered by a 7.5" e-paper display, a Waveshare ESP32 driver, and a Raspberry Pi running the backend.
It’s designed for athletes (and data nerds like me) who live in the Strava + Garmin universe — and who wish both platforms would just get along for once.
⚠️ Please don’t judge the training stats too harshly — I’ve been injured for a while 😅. The design, not the distance, is what counts here!
Supplies

Main Components:
- 7.5” e-paper display (800x480, black-white-red)
- For the prototype phase
- ️ Waveshare ESP32 e-Paper driver board
- Raspberry Pi (used as a backend to fetch data, fuse info, and generate images via Python)
- Python scripts that fetch and process training + weather data, generate the final dashboard image, and send it to the ESP32 for display
The ESP32 acts as a display driver and image receiver, while all the logic, rendering and data aggregation happens on the Pi.
I will be updating the list according to the project phases.
Concept & Motivation
Like many endurance athletes, I use both Strava and Garmin to track my training. Each platform is great — but together they’re even better.
The goal of this project was to create a dedicated display that combines both data sources into a clean, ambient, always-on dashboard.
I didn’t want another screen to scroll or another app to check — just a passive, daily snapshot that lives quietly on my desk and reflects my training rhythm.
Selecting Components

For the prototyping I chose the following hardware:
- 7.5” e-paper display (800×480, black/white/red) – big enough to display detailed data
- Waveshare ESP32 e-Paper driver board – perfect for low-power updates and wireless image transfer
- Raspberry Pi 5 – used as the backend for pulling, merging and rendering data
Optional:
- 3D-printed case (coming soon!)
- Power supply via USB (wall charger or battery bank)
Backend & Data Fusion (Python)
The Raspberry Pi is in charge of all the logic on the backend side. Here's what happens under the hood (in progress):
- A Python script runs on a schedule (hourly or daily)
- It connects to both Strava and Garmin APIs (or data exports)
- It fetches and merges data into a common format
- Based on the day (active vs. rest), it renders a dashboard image using Pillow
- The image is saved as a BMP and sent wirelessly to the ESP32
This part is where most of the "magic" happens — especially the fusion logic.
The raspberry Pi is just a quick and dirty solution that in the future will be replaced by a solution on the cloud.
ESP32 Display Receiver

The ESP32 listens for a new image, downloads it, and sends it to the e-paper display.
Using the Waveshare libraries and examples as a base, I trimmed the code down to a simple "fetch-and-display" cycle:
- Connect to WiFi
- Download latest image from the Pi
- Update the display with the new BMP
- Go to deep sleep until the next refresh
This keeps power usage very low and the update process clean and efficient. Here I am implementing a similar solution to the one I did for my Solar E-Ink Weather Station which by the way has been running for several months without even being exposed to direct sunlight!
Dashboard Layouts & Modes


The dashboard currently adapts its layout based on the type of day — active or recovery — and presents a variety of key training and environmental metrics in a clean, low-distraction format.
Each layout is rendered in either light or dark mode, depending on your visual preference.
Here’s what’s already implemented:
Daily Logic: Two Main Layout Modes
- Active Day: shows your most recent activity, core metrics, and weather for the upcoming days.
- Recovery Day: focuses on training load evolution and a broader overview of trends and progress.
Current Dashboard Elements
Monthly calendar
- Displays the current month with active days marked in red, offering an immediate visual overview of your activity streaks or gaps.
Radar chart
- A circular diagram compares time and distance across the last 4 weeks and the current month, helping identify focus areas or imbalance between activity types.
Recovery metrics
- Includes recovery time and chronic load from high-intensity sessions, giving a clearer view of how strained (or fresh) your body might be.
Weekly intensity stats
- Displays the current week's accumulated low- and high-intensity minutes, based on data pulled from Strava/Garmin.
Weather forecast
- A dedicated section shows the next four days of weather for the location set in the configuration file — including icons for clarity.
Each element has been designed with readability on e-paper in mind, using black/white/red only, and keeping typography and layout minimal.
- More layouts and additional visualizations are on the roadmap (see Step 6!), but even in its current state, the dashboard gives a rich and actionable overview of your training journey.
What’s Next (Future Plans)
This is just the beginning.
The core dashboard is already functional, but I’m actively developing new features and refining the overall experience. Here’s what’s currently in progress or on the roadmap:
Customization & Layouts
- Modular templates: I’m working on making the dashboard layout fully customizable, so users can choose what data to show (and how).
- Activity-specific views: Different data focus depending on whether you’re running, cycling, recovering, etc.
- Widget system (in progress): The idea is to allow users to eventually build their own widgets or reuse existing ones.
Backend Evolution
- I’m evaluating cloud-based options to offload the backend, so that a Raspberry Pi won’t be required for everyone.
- This would make the setup more accessible and allow it to run on simpler hardware (or even mobile-triggered updates).
Data Fusion Logic
- I’m refining how Strava and Garmin data are combined to generate meaningful, unified insights, especially when the same activity appears in both platforms.
- The merging process will become smarter and more configurable.
Public Release
- A lightweight version of the code (with mock data and basic layout) is in the works.
- Perfect for users who want to try the concept without full API integration.
Hardware & Design
- I’m designing a wall-mountable enclosure as well as a desk portrait-style frame, using minimal aesthetic to match the e-paper feel.
- A custom ESP32 board is also on the drawing board — the goal is to have it fit seamlessly into the frame, both visually and mechanically.
Power Optimization
- I previously worked on deep sleep routines and low-power strategies for my paper ink weather station, and I’m bringing those learnings here.
- Fine-tuning Wi-Fi usage, update intervals, and display refresh cycles to get the most out of each mAh.
Stay tuned — this Instructable will be regularly updated as new features and improvements come to life. And if you’re interested in contributing or testing the public version once it’s ready, feel free to comment or reach out!