North Pittsburgh Meatpackers

    rpi-ws2801

    0.0.4 • Public • Published

    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.

    Install

    npm i rpi-ws2801

    DownloadsWeekly Downloads

    6

    Version

    0.0.4

    License

    MIT

    Last publish

    Collaborators

    • jorgen-vikinggod