npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

rpi-ws2801

v0.0.4

Published

A node.js library to control a WS2801 RGB LED stripe via SPI with your Raspberry Pi

Downloads

9

Readme

rpi-ws2801

This is a node.js library to control a WS2801 RGB LED stripe via SPI with your Raspberry Pi.

I wrote this to control a RGB LED stripe using the WS2801 with my Raspberry Pi. This should also work with other SPI devices.

installation

npm install rpi-ws2801

Module is registered to npm as rpi-ws2801

initialization

var leds = require("rpi-ws2801");
// connecting to SPI
leds.connect(32); // number of LEDs

parameters:

  • the number of LEDs your RGB LED stripe has (32, 60, …)
  • (optional) the name of the SPI device (if different to /dev/spidev0.0)
  • (optional) the gamma correction value (1, 2.5, …)

disconnect from SPI

leds.disconnect();

send stored buffer to SPI

leds.update();

This command sends all stored or set colors to SPI.

fill complete stripe with one color

leds.fill(0xFF, 255, 0x00);

parameters:

  • red value (0 to 255) or (0x00 to 0xFF)
  • green value (0 to 255) or (0x00 to 0xFF)
  • blue value (0 to 255) or (0x00 to 0xFF)

This example sets the complete stripe (all LEDs) to color yellow (r: 255, g: 255, b: 0).

set LED color by array

leds.setColor(0, [255,0,0]);  // set LED1 to red

parameters:

  • set led index from (0 to number of LEDs -1)
  • set color array[red, green, blue] with value (0 to 255)

This example sets the LED 0 (first LED) to red.

set LED color by percentage value

leds.setChannelPower(0, 0.5);

parameters:

  • set channel index from (0 to number of channels - 1, number of channels = 3 * number of LEDs)
  • set percentage from (0 to 1)

This example sets the channel 0 (by default the first red channel) to 50%.

sending the values to your driver

leds.setRGB(0, '#FF0000');    // set LED1 to red

parameters:

  • set led index from (0 to number of LEDs -1)
  • set hex color with web like hex color string.

This example sets the LED 0 (first LED) to red.

example

var leds = require('rpi-ws2801');

// connecting to Raspberry Pi SPI
leds.connect(32); // assign number of WS2801 LEDs
  
// set all colors to yellow
console.log("fill all yellow");
// fill(r, g, b)
// r, g, b: value as hex (0x00 = 0, 0xFF = 255, 0x7F = 127)
leds.fill(0xFF, 255, 0x00);
  
// after 2 seconds set first 6 LEDs to (red, green, blue, red, green, blue)
setTimeout(function(){
  console.log("red green blue red green blue");
  // setRGB(ledIndex, hexColor);
  // ledIndex: 0 = LED1, 1 = LED2, …
  // hexColor: '#FF0000' = red, '#00FF00' = green, ...
  leds.setRGB(0, '#FF0000');    // set LED1 to red
  leds.setRGB(1, '#00FF00');    // set LED2 to green
  leds.setRGB(2, '#0000FF');    // set LED3 to blue
 
  // setColor(ledIndex, color);
  // ledIndex: 0 = LED1, 1 = LED2, …
  // color: array[red, green, blue] = [255,0,0] = red, [0,255,0] = green
  leds.setColor(3, [255,0,0]);  // set LED4 to red
  leds.setColor(4, [0,255,0]);  // set LED5 to green
  leds.setColor(5, [0,0,255]);  // set LED6 to blue
  
  // send all set colors to SPI via update();
  leds.update();
}, 2000);

When running this example the LED stripe will first fill all LEDs with yellow color. After 2 seconds it sets the color of the first 6 LEDs to (red, green, blue, red, green, blue).

additional commands

Invert all color values.

leds.invert();

Reverse the order of LEDs (begin on start of stripe ot end of stripe).

leds.reverse();

Clear complete LED stripe (fill with black)

leds.clear();

Get channel count

leds.getChannelCount();

Define a new RGB order (if first LED is blue instead of red).

leds.setColorIndex(2, 1, 0);

parameters:

  • set red channel index from (0, 1 or 2)
  • set green channel index from (0, 1 or 2)
  • set blue channel index from (0, 1 or 2)

This example sets the RGB order to address first the blue than the green and at last the red color channel. Red: 2, green. 1, blue: 0 => blue, green, red. Default is red: 0, green: 1, blue: 2 => red, green, blue.

thx @ Frederic Worm for the initial idea of creating this library.

wiring the Raspberry Pi

Connect your Pi like this to the LED driver:

| Raspberry Pi | led driver | |:------------:|:----------:| | GND | GND | | 5V or 3.3V (or external) | input V+ | | SCLK | input CLK | | MOSI | input DIN | | CE0 | input LAT |

Connect /OE on the LED driver to GND or to a GPIO of your choice (you can quickly turn off all LEDs by using a GPIO).

Or use this Raspberry Pi Bridge from http://www.hackerspaceshop.com/

I am not responsible for any damages to your hardware. Use this at your own risk.