GithubHelp home page GithubHelp logo

epd2in7b's Introduction

epd2in7b

A Node.js package for the 2.7inch e-Paper HAT(B) waveshare display on a Raspberry Pi 2/3/zero. It was forked from williwasser's epd7x5 Node.js package It is rewritten in the Node non-blocking way and implements demo code provided by Waveshare for 2.inch e-Paper HAT(B).

Link to waveshare wiki

Dependencies

  1. WiringPi for GPIO access of Raspberry Pi
  2. libgd2 for text output and drawing
  3. rpi-gpio-buttons for HAT keys handling

Installation

Enable the SPI interface on Raspberry Pi: sudo raspi-config

WiringPi: follow installation on wiringpi.com

libgd2: sudo apt-get install libgd2-dev # libgd

epd2in7b: npm install epd2in7b

Usage example

const epd = require('epd2in7b')
const font = '/home/marco/fonts/Roboto-Regular.ttf';
const fontSize = 12

const img = epd.getImageBuffer('landscape');
const width = epd.height
const height = epd.width
let epdp = epd.init({fastLut: false})

const refreshDisplay = message =>
  epdp = epdp
    // init is required since we set it sleeping at the end of this chain
    .then(() => epd.init({fastLut: false}))
    .then(() => img.then(img => {
      // display a black rectangle
      img.filledRectangle(
        Math.round(width / 8), Math.round(height / 8),
        Math.round(7 * width / 8), Math.round(7 * height / 8),
        epd.colors.black)

      // display a red rectangle
      img.filledRectangle(
        Math.round(width / 4), Math.round(height / 4),
        Math.round(3 * width / 4), Math.round(3 * height / 4),
        epd.colors.red)

      // Retrieve bounding box of displayed string
      let [xll, yll, xlr, ylr, xur, yur, xul, yul] = img.stringFTBBox(epd.colors.white, font, fontSize, 0, 0, 0, message)

      // Center the message
      img.stringFT(epd.colors.white, font, fontSize, 0,
        Math.round(width / 2 - (xur - xul) / 2),
        Math.round(height / 2 + (yll - yul) / 2),
        message)

      return epd.displayImageBuffer(img)
    }))
    .then(() => epd.sleep())

refreshDisplay("Hello world !")

// Handle buttons
epd.buttons.handler.then(handler =>
  handler.on('pressed', function (button) {
    let buttonLabel = 'none'
    switch (button) {
      case epd.buttons.button1:
        buttonLabel = 'first button'
        break
      case epd.buttons.button2:
        buttonLabel = 'second button'
        break
      case epd.buttons.button3:
        buttonLabel = 'third button'
        break
      case epd.buttons.button4:
        buttonLabel = 'fourth button'
        break
      default:
        buttonLabel = 'an unknown button'
    }
    refreshDisplay(`You pressed \n${buttonLabel}`)
  })
)

// Handle exit
function exitHandler (options, err) {
  let promise = null
  if (options.cleanup) {
    promise = img.then(img => img.destroy())
  }

  if (err && err.stack) {
    console.log(err.stack)
  }

  if (options.exit) {
    if (promise !== null) {
      promise.then(() => process.exit())
    } else {
      process.exit()
    }
  }
}

process.on('exit', exitHandler.bind(null, {cleanup: true, exit: true}))
process.on('SIGINT', exitHandler.bind(null, {exit: true}))
process.on('SIGUSR1', exitHandler.bind(null, {exit: true}))
process.on('SIGUSR2', exitHandler.bind(null, {exit: true}))
process.on('uncaughtException', exitHandler.bind(null, {exit: true}))

The module exports the following functions and constants:

Functions:

epd.init({fastLut: false})) fastLut parameter is an attempt to speed up refresh process using LUT alternative table on the Web. It doesn't work work well with red color.

epd.getImageBuffer('landscape') Use landscape to get a buffer oriented in landscape mode.

epd.displayImageBuffer(img)

epd.clear() Equivalent to push a white image

epd.sleep() Put the display in sleep mode. init is required to come back to operations.

epd.buttons.handler The rpi-gpio-buttons instance

Constants:

epd.buttons.button1

epd.buttons.button2

epd.buttons.button3

epd.buttons.button4

epd.colors.white

epd.colors.black

epd.colors.red

epd.width

epd.height

gd namespace for access of functions on the gd object:

epd.gd

example: epd.gd.createFromFile(path) to open an image

Documentation of node-gd functions can be found here

License

Apache 2.0

Todos

Handle errors

epd2in7b's People

Contributors

williwasser avatar molaux avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.