Splash Screen | PaperPi LMS-Client Plugin |
E-Paper display with multiple, rotating display plugins.
PaperPi is designed run as a daemon process to display a vairety of plugins to SPI based e-paper/e-ink displays with long refresh delays. It has been specifically written to work with the WaveShare SPI displays.
PaperPi rotates through a user-configured selection of plugins each represented by a single static "screen." After the plugin screen has "expired", the next plugin with the highest priority (lowest value) will be displayed, eventually cycling through all the plugins.
To get started, jump to the Setup Instructions
PaperPi supports many different plugins and layouts for each plugin. The plugin structure is open and documented to allow building your own plugins or customizing existing plugins.
LibreSpot (spotify) Plugin | Word Clock | Logitech Media Server Plugin |
Decimal-Binary Clock | Met.no Weather | Basic Clock |
- Raspberry Pi 4B, Pi3
- A Pi Zero is likely sufficient, but is untested at this time (Nov 2020)
- WaveShare EPD SPI-only Screen with PiHat
- see the full list of currently supported screens
- UART, SPI/USB/I80 screens are not supported as there is no python library for diving these boards
- HiFiBerry hat (optional)
- The HiFiBerry DAC+ PRO and similar boards add high-quality audio output to the Pi so it can act as a display and also work as a LMS client player using squeezelite
- GPIO 2x20 headers must be added to the board to support WaveShare HAT
- HiFiBerry's DAC+ Bundle with the following configuraiton is a good choice:
- DAC+ Pro
- Acrylic Case for (RCA) AND DIGI+
- Raspberry Pi 4B 2GB (1GB should be sufficient as well)
- 16GB SD Card
- PowerSupply (USB C 5.1V/3A)
- 2x20 Pin Male Header (required for WaveShare HAT)
PaperPi plugins work with a variety of other software such as Logitech Media Server and Spotify. Check the Plugin documentation for further instructions
All Waveshare Screens
The WaveShare displays require the SPI interface. SPI can be enabled through the raspi-config
command.
- Enable SPI (see images below)
$ sudo raspi-config
> Interface Options > SPI > Yes
- Reboot
IT8951 HD Screens
- Install the Broadcom BCM 2835 library ccording to the directions found on Mike McCauley's site
PaperPi can be run directly on-demand from a user account such as the default "pi" user. Any other user will work as well, but the user must be a member of the spi group.
- Download the tarball
$ wget https://github.com/txoof/epd_display/raw/master/paperpi_latest.tgz
- Decompress the archive:
tar xvzf paperpi.tgz
- Launch PaperPi:
$ ./paperpi/dist/paperpi
- On the first run PaperPi will create a configuration file in
~/.config/com.txoof.paperpi/paperpi.ini
and then exit
- On the first run PaperPi will create a configuration file in
- Edit the configuration file to match your needs. The default configuration will provide a reasonable starting point
$ nano ~/.config/com.txoof.paperpi/paperpi.ini
- At minimum you must specify the
display_type
- If you are using an HD IT8951 display, you must also set the
vcom
value which can be found on the ribon cable.
# choose the display type that matches your e-paper pannel display_type = epd2in7 # vcom value for HDIT8951 displays vcom = 0.0
- See the list of supported screens for more information
- At minimum you must specify the
- Launch PaperPi again -- you should immediately see a splash screen followed shortly by the first active plugin.
- Press
ctrl+c
to shutdown paperpi cleanly- Waveshare recommends clearing pannels to a blank state prior to long-term storage
PaperPi is designed to run as an unattended daemon process that starts at system boot.
- Download the tarball
$ wget https://github.com/txoof/epd_display/raw/master/paperpi_latest.tgz
- Decompress the archive:
tar xvzf paperpi.tgz
- Install PaperPi as a service, run the install script:
$ sudo ./install.sh
- This will:
- add the necessary service users and groups
- add a configuration file to
/etc/defaults/paperpi.ini
- install PaperPi as a systemd service
- This will:
- Edit
/etc/defaults/paperpi.ini
to configure adisplay_type
and enable any plugins$ sudo nano /etc/defaults/paperpi.ini
- At minimum you must specify the
display_type
- See the list of supported screens for more information
- Start PaperPi:
$ sudo systemctl restart paperpi
- PaperPi will now start and restart at boot as a systemd service
- PaperPi may fail to display the splash screen after boot -- see the Known Issues section for more details
If you would like to develop plugins for PaperPi, you will likely need a working build environment.
- python 3.7
- pipenv
- Clone the repo:
https://github.com/txoof/epd_display.git
- Run
build.sh
to create a build environment- The build script will create a pipenv environment and prompt you to install necessary libraries
- if pipenv fails to install Pillow, try deleting Pipenv.lock and manually install pillow with
pipenv install Pillow
- The build script will then attempt to build a binary of PaperPi using pyintsaller
- executables are stored in
./dist/
- executables are stored in
PaperPi's core is written and maintained in Jupyter Notebook. If you'd like to contribute, please make pull requests in the Jupyter notebooks. Making PRs to the .py
files means manually moving the changes into the Jupyter Notebook and adds considerable work to the build/test process.
Plugins can be pure python, but should follow the guide provided.
See this gist for a quick guide for setting up a jupyter environment on a Raspberry Pi.
Most NON-IT8951 screens are only supported in 1 bit (black and white) mode. Color output is not supported at this time. Some waveshare drivers do not provide 'standard' display
and Clear
methods; these displays are not supported at this time.
All IT8951 Screens now support 8 bit grayscale output.
Some WaveShare screens that support color output will also work with with the non-colored driver. Using the 1 bit driver can yield significantly better update speeds. For example: the epd2in7b
screen takes around 15 seconds to update even when refreshing a 1 bit image, but can be run using the epd2in7
module in 1-bit mode which takes less than 2 seconds to update.
WaveShare Screen
NN. Board Supported:
- epd1in02 supported: False
- AttributeError: module does not support
EPD.display()
- epd1in54 supported: True
- epd1in54_V2 supported: True
- epd1in54b supported: True
- epd1in54b_V2 supported: True
- epd1in54c supported: True
- epd2in13 supported: True
- epd2in13_V2 supported: True
- epd2in13b_V3 supported: True
- epd2in13bc supported: True
- epd2in13d supported: True
- epd2in66 supported: True
- epd2in66b supported: True
- epd2in7 supported: True
- epd2in7b supported: True
- epd2in7b_V2 supported: True
- epd2in9 supported: True
- epd2in9_V2 supported: True
- epd2in9b_V3 supported: True
- epd2in9bc supported: True
- epd2in9d supported: True
- epd3in7 supported: False
- unsupported
EPD.Clear()
function - AttributeError: module does not support
EPD.display()
- epd4in01f supported: True
- epd4in2 supported: True
- epd4in2b_V2 supported: True
- epd4in2bc supported: True
- epd5in65f supported: True
- epd5in83 supported: True
- epd5in83_V2 supported: True
- epd5in83b_V2 supported: True
- epd5in83bc supported: True
- epd7in5 supported: True
- epd7in5_HD supported: True
- epd7in5_V2 supported: True
- epd7in5b_HD supported: True
- epd7in5b_V2 supported: True
- epd7in5bc supported: True
- All IT8951 Based Panels
- When starting as a daemon process from systemd, PaperPi may fail to show the splash screen image and the first module.
- After the first module's minimum display time elapses and it is refreshed, the problem appears to be rectified.
- See this issue on github for more details