Build a Raspberry Pi E-Paper Dashboard for Shop Status, Weather, and Print Progress
An e-paper display uses almost no power, shows crisp text in daylight, and keeps its image without power. That makes it ideal for an always-on shop dashboard that does not glow, flicker or distract. This project builds a wall-mounted display driven by a Raspberry Pi Zero 2 W that shows the time, weather, the status of your 3D printer through Moonraker, and any other numbers you want to track. Unlike the ESP32 e-paper setups elsewhere on this site, the Pi lets you draw pages in Python with Pillow and reach any API without hardware constraints.
How It Works
A Python script fetches data, draws an image with the Pillow library, and sends that image to the display with Waveshare's driver. A cron job or systemd timer runs the script every few minutes. After each refresh, the script puts the panel to sleep, so it draws almost no power between updates.
Important E-Paper Rules
- Do not refresh constantly. Waveshare's guidance is to leave at least about three minutes between full refreshes, and to refresh the panel at least once every 24 hours.
- Do not leave a static image for days or weeks. Long-term static images can cause ghosting or damage. A scheduled refresh solves that.
- Sleep the panel after each update by calling the driver's sleep function, and power it down when the Pi shuts off.
- Handle the flexible cable gently. It tears if bent sharply.
Build Steps
- Prepare the Pi. Flash Raspberry Pi OS Lite to the SD card with the Imager, setting hostname, Wi-Fi and SSH before writing.
- Enable SPI. Run sudo raspi-config, go to Interface Options, and enable SPI, then reboot.
- Install packages. Install python3-pil, python3-numpy, python3-spidev, python3-gpiozero and git, and clone the Waveshare e-Paper library or install it as documented for your panel.
- Connect the HAT. Power the Pi off. Fit the HAT onto the 40-pin header, and connect the display's ribbon into the HAT's connector with the latch open, then close the latch. Match the driver file to the exact panel model, for example epd7in5_V2.
- Run a demo. Run one of the library's example scripts to confirm the panel refreshes. A blank or half-drawn screen often means the wrong driver version.
- Write your dashboard script. Create a 800 by 480 pixel 1-bit image, draw text and lines, and send it to the display. Use a clear, large font such as DejaVu Sans or a font of your choice.
- Add data sources. For weather, use an API with a free tier such as Open-Meteo, which needs no key. For printer status, query Moonraker at /printer/objects/query?print_stats&display_status. For any custom values, read from MQTT or a local file.
- Schedule. Add a cron entry to run every 5 or 10 minutes, and log errors to a file so you can debug problems.
- Frame it. Mount the display behind a mat in a shadow box or a printed frame, keeping the Pi at the back with airflow.
Dashboard Layout Ideas
ZoneContent Top barDate, time, and Wi-Fi status Left columnWeather now and a short forecast CentrePrinter name, state, progress percentage, time remaining Right columnShop temperature and humidity from a sensor over MQTT FooterLast update time, so stale data is obviousPower and Reliability
Because the panel only updates every few minutes, the Pi Zero 2 W can run cool and lean. For a reliable, always-on unit, consider running the Pi with a read-only root filesystem (see the read-only overlay guide on this site) so power cuts cannot corrupt the SD card, and set a hardware watchdog so it reboots if it freezes.
Troubleshooting
ProblemCauseFix Blank displaySPI disabled or wrong driverEnable SPI, use the driver matching the panel version GhostingPartial refresh onlyDo a full refresh every few updates Script works by hand but not in cronPath or environment differencesUse full paths and redirect output to a log Data does not updateWi-Fi drop or API errorAdd error handling and show an error line on the display Slow refreshNormal for e-paperFull refresh takes several seconds; plan updates accordinglyClosing
A Pi and e-paper display make a quiet, low-power information panel that fits in a shop without becoming another glowing screen. Start by getting the panel to show a static test image, then add one data source at a time, and keep the refresh interval conservative so the display lasts.