Program your MATRIX device with JavaScript! A Node.js addon for HAL.
Branch: master
Clone or download
Latest commit bd853a6 Feb 22, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode Added more microphone functions Jan 28, 2019
hal_wrapper Comment fix Feb 22, 2019
lib Flexable led inputs Feb 11, 2019
.drone.yml Update .drone.yml Feb 1, 2019
.gitignore Removed build folder Jan 30, 2019
README.md Update README.md Feb 22, 2019
binding.gyp Fixed path for sources Dec 21, 2018
index.js Added kernel check to alsa Feb 7, 2019
package-lock.json Added alsa dependancies Feb 8, 2019
package.json Flexable led inputs Feb 11, 2019

README.md

MATRIX-Lite-JS

MATRIX Lite JS is an npm package that allows users of varying skill levels to easily program their MATRIX Device.

Roadmap

This roadmap is for achieving a basic implementation of the checklist below. As this package develops, the API will improve and may change.

  • Leds
  • Sensors
    • IMU
    • Humidity
    • Pressure
    • UV
  • GPIO
  • Microphones
    • Hal Mics
    • Alsa Mics

Dependencies

Ensure you have a Raspberry Pi, attached with a MATRIX device, that's flashed with Raspbian Stretch.

1. Install MATRIX HAL

https://matrix-io.github.io/matrix-documentation/matrix-hal/getting-started/installation-package/

2. Install Node.js & Create A Project

Downloads and installs the latest version of Node.js, using nvm (Node Version Manager)

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
. ~/.bashrc
nvm install node

mkdir myApp
cd myApp
npm init -y

3. Install matrix-lite-js

npm install @matrix-io/matrix-lite --save

Usage (may change during development)

Everloop

var matrix = require("@matrix-io/matrix-lite");

// Get LED count
console.log("This device has " + matrix.led.length + ' LEDs');

// A single string or object sets all LEDs
// Below are different ways of expressing a color (number values are from 0-255)
matrix.led.set('blue');
matrix.led.set('rgb(0,0,255)');
matrix.led.set('#0000ff');
matrix.led.set({r:0, g:0, b:255, w:0});// objects can set white

// LEDs off
matrix.led.set('black');
matrix.led.set([]);
matrix.led.set();
matrix.led.set({});

// Arrays set individual LEDs
matrix.led.set(['red', 'gold', 'purple', {}, , '#6F41C1', 'blue', {g:255}]);

// Arrays can simulate motion
everloop = new Array(matrix.led.length).fill({});
everloop[0] = {b:100};

setInterval(function(){
  var lastColor = everloop.shift();
  everloop.push(lastColor);
  matrix.led.set(everloop);
},50);

Sensors

var matrix = require('@matrix-io/matrix-lite');

// Sensors will update with each .read() call
var imu, uv, humidity, pressure;
setInterval(function(){
  imu = matrix.imu.read();
  uv = matrix.uv.read();
  humidity = matrix.humidity.read();
  pressure = matrix.pressure.read();
  
  console.log(imu, uv, humidity, pressure);
},50);

GPIO

var matrix = require('@matrix-io/matrix-lite');

// Read GPIO pin 0 (digital)
matrix.gpio.setFunction(0, 'DIGITAL');
matrix.gpio.setMode(0, 'input');
console.log(matrix.gpio.getDigital(0));

// Set GPIO pin 1 (digital)
matrix.gpio.setFunction(1, 'DIGITAL');
matrix.gpio.setMode(1, 'output');
matrix.gpio.setDigital(1, 'ON')

// Set GPIO pin 2 (PWM)
matrix.gpio.setFunction(2, 'PWM');
matrix.gpio.setMode(2, 'output');
matrix.gpio.setPWM({
  pin: 2,
  percentage: 25,
  frequency: 50 // min 36
});

// Set Servo Angle pin 3
matrix.gpio.setFunction(3, 'PWM');
matrix.gpio.setMode(3, 'output');
matrix.gpio.setServoAngle({
  pin: 3,
  angle: 90,
  // minimum pulse width for a PWM wave (in milliseconds)
  min_pulse_ms: 0.8
});

Alsa

Microphone

npm mic is used grab our microphone data from alsa.

// Record mic input to file
var matrix = require("@matrix-io/matrix-lite");
var fs = require('fs');

var mic = matrix.alsa.mic();// use default settings
var mic = matrix.alsa.mic({ // or configure settings
  rate: '16000',
  debug: true,
  exitOnSilence: 6,
  // up to 8 channels
  channels: '1'
});

// Pipe mic data to file
var micStream = mic.getAudioStream();
var file = fs.WriteStream('output.raw');
micStream.pipe(file);

micStream.on('startComplete', function() {
  setTimeout(mic.stop, 5000);
});

mic.start();

Building Locally For Development

If you want to contribute to matrix-lite-js, below are the steps to build locally. Each step should take place on your Raspberry Pi.

Have MATRIX HAL installed

https://matrix-io.github.io/matrix-documentation/matrix-hal/getting-started/installation-package/

Download the matrix-lite-js repository

git clone https://github.com/matrix-io/matrix-lite-js

Install Node.js

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
. ~/.bashrc
nvm install node

Install Node.js dependencies

npm install

If you need to edit any C++ files in the hal-wrapper folder, use the following to compile your changes.

npm run build