Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/steffenkn/ws2801-pi
A simple module to control a WS2801 ledstrip with a pi via SPI.
https://github.com/steffenkn/ws2801-pi
Last synced: 1 day ago
JSON representation
A simple module to control a WS2801 ledstrip with a pi via SPI.
- Host: GitHub
- URL: https://github.com/steffenkn/ws2801-pi
- Owner: SteffenKn
- License: mit
- Created: 2019-10-11T19:02:06.000Z (over 5 years ago)
- Default Branch: develop
- Last Pushed: 2023-05-02T19:21:40.000Z (almost 2 years ago)
- Last Synced: 2025-01-17T23:46:27.562Z (19 days ago)
- Language: TypeScript
- Homepage:
- Size: 154 KB
- Stars: 6
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
- License: LICENSE
Awesome Lists containing this project
README
# WS2801-Pi
WS2801-Pi is a module for controlling WS2801 LED strips with a Raspberry Pi via SPI.
## Installation
- Install this module
- [Activate SPI](https://www.raspberrypi-spy.co.uk/2014/08/enabling-the-spi-interface-on-the-raspberry-pi/)## Documentation
The documentation can be found [here](http://ws2801-pi.knaup.dev/).
## Wiring
| Raspberry Pi | led strip |
|:------------:|:----------:|
| GND | GND |
| SCLK | Clock |
| MOSI | Data |> You should connect the GND and the V+ of the led strip to an external power supply.
## Config
| Config | Explanation | Type | Default |
|:------------:|:----------:|:----------:|:----------:|
| debug | Run without sending signals to the gpio ports. | boolean | false |
| automaticRendering | Automatically run `show()` after changing Leds. | boolean | false |
| clockSpeed | Set the desired [clockSpeed](https://projects.drogon.net/understanding-spi-on-the-raspberry-pi/). | ClockSpeed | 2e6 \| 2MHz |> The **clockSpeed** can also be changed via `ledController.clockSpeed`.
## Usage
```javascript
import LedController from 'ws2801-pi';
// const LedController = require('ws2801-pi').default;const amountOfLedsOnStrip = 100;
const ledController = new LedController(amountOfLedsOnStrip);
let color = {
red: 255,
green: 120,
blue: 0,
};// Set color of whole led strip
ledController.fillLeds(color);
ledController.show();color.red = 0;
color.green = 0;
color.blue = 255;// Set color of single led
ledController.setLed(0, color);
ledController.show();// Clear led strip (turn all leds off)
ledController
.clearLeds()
.show();
```> **Hint:** Make sure to call `show()` after changing leds in order to physically change the leds.
> **Hint:** If `automaticRendering` is set `show()` does not have to be called. The rendering can then be awaited via `ledController.renderPromise`.
## Example Animation
```javascript
import LedController from 'ws2801-pi';
// const LedController = require('ws2801-pi').default;const amountOfLedsOnStrip = 100;
const ledController = new LedController(amountOfLedsOnStrip);
async function wait(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}async function animate() {
let colors = [
{red: 255, green: 0, blue: 0},
{red: 0, green: 255, blue: 0},
{red: 0, green: 0, blue: 255},
{red: 255, green: 255, blue: 0},
{red: 255, green: 0, blue: 255},
{red: 0, green: 255, blue: 255},
{red: 0, green: 2505, blue: 0},
];for (const color of colors) {
for (let ledIndex = 0; ledIndex < amountOfLedsOnStrip; ledIndex++) {
ledController
.setLed(ledIndex, color)
.show();await wait(30);
}await wait(300);
}
}
animate();
```