Node.js library for easily creating an ePaper display on a Raspberry Pi using HTML and Javascript.
ePaper.js can be used as:
Features include:
ejs <command> [options] <deviceType>
For example, the following command will update the Waveshare 7.5" v2 screen with the contents of http://localhost:8080
every 10 minutes.
ejs refresh rpi-7in5-v2 "http://localhost:8080"
For available devices types, see supported hardware. The different commands and suggested workflows are described below.
Display: display a single rendition of a URL
ejs display [options] <deviceType> <url>
Option | Description | Allowed Values |
---|---|---|
-o / --orientation |
Use (h)orizontal or (v)ertical orientation | [h, v] |
-c / --colorMode |
Desired color mode | [black, 4gray, red] |
--screenshotDelay |
Wait an additional amount of time after loading the URL before displaying. Useful for client side apps | Time in milliseconds |
--dither |
Use a dithering algorithm to approximate grayscale / mid-tones on black and white displays | |
--username |
Username for basic authentication | username as string |
--password |
Password for basic authentication | password as string |
--debug |
Print additional log info and stacktraces | |
--version |
Show version number | |
--help |
Show help |
Refresh: continuously update and display the URL
ejs refresh [options] <deviceType> <url>
Option | Description | Allowed Values |
---|---|---|
-i / --interval |
Amount of time between refreshes | Time in seconds (default 10 min) |
-o / --orientation |
Use (h)orizontal or (v)ertical orientation | [h, v] |
-c / --colorMode |
Desired color mode | [black, 4gray, red] |
--screenshotDelay |
Wait an additional amount of time after loading the URL before displaying. Useful for client side apps | Time in milliseconds |
--dither |
Use a dithering algorithm to approximate grayscale / mid-tones on black and white displays | |
--username |
Username for basic authentication | username as string |
--password |
Password for basic authentication | password as string |
--debug |
Print additional log info and stacktraces | |
--version |
Show version number | |
--help |
Show help |
Clear: clear the display
ejs clear [options] <deviceType>
Option | Description | Allowed Values |
---|---|---|
--debug |
Print additional log info and stacktraces | |
--version |
Show version number | |
--help |
Show help |
Self-Hosting
ejs refresh <deviceType> "http://localhost:8080" (or whatever port you configure http-server to run on)
Cloud Hosting
ejs refresh <deviceType> "<URL of your app>"
Running As a Daemon \ There are several methods of automatically launching ePaper.js on startup and restarting in case of failures
See the examples directory
The following versions are the recommended versions that using during development and testing. Other versions may work, but are not officially supported.
16 LTS
Bullseye 32 / 64bit
104.0.5112.105
Enable SPI
sudo raspi-config
# Choose Interfacing Options -> SPI -> Yes to enable SPI interface
sudo reboot
Install Node The official recommendation by Node.js is to install Node with a package manager. This helps ensure you'll have the latest LTS version and the proper permissions to install global packages. ePaper.js recommends using nvm
Raspberry Pi 2, 3, 4 Zero 2:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
source ~/.bashrc
nvm install 16
Raspberry Pi 1, Zero:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
source ~/.bashrc
NVM_NODEJS_ORG_MIRROR=https://unofficial-builds.nodejs.org/download/release
nvm install 16
Install Dependencies
sudo apt-get update
sudo apt-get install -y build-essential chromium-browser
Install ePaper.js \
Globally install the @epaperjs/cli
command line app and the appropriate package for your screen (See supported hardware).
For example, to install ePaper.js for the Waveshare 7.5" V2 Screen:
npm install --global @epaperjs/cli @epaperjs/rpi-7in5-v2
Device | Device Type | npm Package | Color Modes |
---|---|---|---|
Waveshare 4.2" | rpi-4in2 |
@epaperjs/rpi-4in2 |
black 4gray |
Waveshare 7.5" v2 | rpi-7in5-v2 |
@epaperjs/rpi-7in5-v2 |
black |
Waveshare 3.7" hat | rpi-3in7 |
@epaperjs/rpi-3in7 |
black, 4gray |
Waveshare 2.13" hat v2 | rpi-2in13-v2 |
@epaperjs/rpi-2in13-v2 |
black, red |
Waveshare 2.13" bc | rpi-2in13-bc |
@epaperjs/rpi-2in13-bc |
black |
Waveshare 2.7" | rpi-2in7 |
@epaperjs/rpi-2in7 |
black |
It's easy to extend ePaper.js to support additional Waveshare devices. Displays from other manufacturers should be possible to support as well, as long as there is a C / C++ driver available.
If you would like to request support for another display, please open an issue with the title 'Add support for <Device Make \ Model>'. If you're a developer and have extended support yourself, put up a pull request!