Skip to content
A node.js library to control a WS2801 RGB LED stripe via SPI with your Raspberry Pi
Branch: master
Clone or download
Pull request Compare This branch is 1 commit ahead of Jorgen-VikingGod:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore
LICENSE
README.md
example.js
package.json
rpi-ws2801.js

README.md

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.

You can’t perform that action at this time.