piglow v3.0.1
node-piglow
v2 does not contain the commandline interface and the animations interface anymore. They are moved to two seperate modules. (node-piglow-cli and node-piglow-animations)
v3 removes node 0.10 and 0.12 support and only works for node versions >4
The piGlow is a little LED-Board for the Raspberry Pi sold by Pimoroni. It features 18 LEDs in six different colors (white, blue, green, yellow, orange, red) arranged like a vortex:
This module offers an interface to control the individual LEDs.
In action video: http://www.youtube.com/watch?v=s-rD8PfAke8
TOC
Installation
$ npm install piglow
Setup
$ sudo vi /etc/modules
Add these two lines
i2c-bcm2708
i2c-dev
$ sudo vi /etc/modprobe.d/raspi-blacklist.conf
Comment out blacklist i2c-bcm2708
#blacklist i2c-bcm2708
Invocation
var piGlow = require('piglow');
//callback fires when board is initialized
piGlow(function(error, pi) {
pi.all;
});
Adressing
To each LED a brightness value between 0 (off) and 255 (freakin' bright) can be assigned. If one preferrs percentage values, as a convenience function all values smaller than 1 are treated as percentage values. Note that the value of '1' is not treated as 100% but as the brightness value of 1!
Individual LEDs
//parameter sets the brightness:
pi.l_0_0 = 100; //sets LED 1 of leg 1 to a brightness of 100 (of 255)
pi.l_0_1 = 10; //sets LED 2 of leg 1 to a brightness of 10
pi.l_0_1 = 0.5; //sets LED 2 of leg 1 to a brightness of 50% (=brightness of 127)
...
pi.l_2_5 = 200; //sets LED 6 of leg 3 to a brightness of 200
//shorthand form:
pi.l_0_0; //sets LED 1 of leg 1 to a brightness of 255
Legs
pi.leg_0 = 100; //sets all LEDs of leg 1 to a brightness of 100
//shorthand
pi.leg_0; //sets all LEDs of leg 1 to 255
Rings
pi.ring_0 = 100; //sets LED 1 of leg 1, LED 1 of leg 2 and LED 1 of leg 3 to 100
//shorthand
pi.ring_0; //sets LED 1 of leg 1, LED 1 of leg 1 and LED 1 of leg 2 to 255
As the rings are distinguishable by color (order from outer ring to the inner: red, orange, yellow, green, blue, white), they can be adressed via the ring's color:
pi.red = 100; //sets the first ring to a brightness of 100
//shorthand
pi.red; //sets the first ring to maximum brightness
All LEDs
pi.all = 100; //set all LEDs to 100
//shorthand
pi.all; //set all LEDs to 255 (watch your eyes)
pi.reset; //set all LEDs to 0
Random
pi.random = 0.5;
//shorthand
pi.random;
The propbability of lighting up can be defined (pi.random = 0.1;
) and is otherwise calculated via this formula: (0.4 + Math.random() * 0.2);
.
The brightness is calculated via this formula: parseInt(MAX_VALUE / 2 + (MAX_VALUE / 2 * Math.random()), 10)
Transactions
Each parameter that is set causes the backend to transfer the complete set of values to the piglow board. Thus the following operation would cause three write operations:
pi.l_0_1 = 100;
pi.l_0_2 = 100;
pi.l_0_3 = 100;
The piglow-interface offers the possibility to open up a transaction and to commit it when all changes have been made. So the following code will cause only one write to the hardware board:
pi.startTransaction();
pi.l_0_1 = 100;
pi.l_0_2 = 100;
pi.l_0_3 = 100;
pi.commitTransaction();
This benefits performance especially when the LEDs are changed in high frequency.
Animations
Do you like your piglow animated? Checkout piglow-animations!
Command-Line-Interface
node-piglow-cli wraps piglow and offers a command line interface. You can than invoke the piglow like this (lights up the red LEDs):
$ piglow --red
Possible use cases:
- use it in your Makefile to indicate a sucessfull built
- use it in your CI server to indicate failed (or sucessfull) built
- ...
Mocking
This module also exposes its internal structure, with the possibility to invoke the piGlow interface with a injected mocking backend.
There are two backends, BackendMock
prints the piglow data as JSON, BackendMockPrettyPrint
structures the data in a readable way.
var piGlow = require('piglow');
var PiGlowBackendMock = piGlow.BackendMock;
var piGlowInterface = piGLow.piGlowInterface;
var myMock = new PiGlowBackendMock();
var myInterface = piGlowInterface(myMock);
//lets hack
myInterface.ring_0 = 255;
This way the module can be used in a non raspi environment for development or with a testing mock for unit tests. To implement your own mocks follow this interface:
function PiGlowMock() {}
PiGlowMock.prototype.update = function(piGlowConfiguration, callback) {
/*
piGlowConfiguration is a object in the following form:
{
"l_0_0":0, "l_0_1":0, "l_0_2":0, "l_0_3":0, "l_0_4":0, "l_0_5":0,
"l_1_0":0, "l_1_1":0, "l_1_2":0, "l_1_3":0, "l_1_4":0, "l_1_5":0,
"l_2_0":0, "l_2_1":0, "l_2_2":0, "l_2_3":0, "l_2_4":0, "l_2_5":0
}
*/
};
Used in
- piglow-system a system utlity tool that shows metrics about your system
- piglow-clock a binary watch implemented via the piglow
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago