SkillAgentSearch skills...

Epaper.js

Node.js library for easily creating an ePaper display on a Raspberry PI using HTML and Javascript.

Install / Use

/learn @samsonmking/Epaper.js
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

ePaper.js

Node.js library for easily creating an ePaper display on a Raspberry Pi using HTML and Javascript.

ePaper.js can be used as:

  • A command line application for single step rendering of a URL onto an ePaper display
  • A library that can interface ePaper displays with custom Node.js applications

Features include:

  • Supports multiple ePaper Displays
  • High performance, native c++ hardware access
  • Multiple color modes: black / white, grayscale, black / white / red
  • Dithering for black / white images

Example weather station Example ereader gif

Usage

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.

Commands

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 | |

Workflows

Self-Hosting

  • Create a web app and store it on your Raspberry Pi
  • Host the web app with http-server
  • Run ePaper.js with ejs refresh <deviceType> "http://localhost:8080" (or whatever port you configure http-server to run on)

Cloud Hosting

  • Create a web app and host it on a service like GitHub Pages or Netlify
  • Run ePaper.js with 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

Example Applications

See the examples directory

  • weather-station: This creates an example weather station display
  • color-test: Used to test the various color modes
  • 4gray: A demonstration of the 4gray capabilities
  • dithering: A demonstration of the dithering feature

Supported Software Versions

The following versions are the recommended versions that using during development and testing. Other versions may work, but are not officially supported.

  • Node.js: 16 LTS
  • Raspberry Pi OS: Bullseye 32 / 64bit
  • Chromium: 104.0.5112.105

Installation

Raspberry PI

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

Supported Hardware

| 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 |

Adding Support For Additional Displays

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!

Related Skills

View on GitHub
GitHub Stars784
CategoryDevelopment
Updated21d ago
Forks51

Languages

C

Security Score

95/100

Audited on Mar 11, 2026

No findings