node.jsでAdafruit 32x16 RGB LED Matrixを制御する

Last updated on

前回のpostで、LED Matrixのサンプルを動かせました。
引き続き、発光パターンの制御をするために、node.jsを使って制御してみます。

node.jsで使用するためのライブラリとして、node-rpi-rgb-led-matrixが公開されているので、これを使ってみます。

0.node.jsのインストール

これは解説がたくさんあるので割愛します。
個人的にはnodebrew派なので、この記事を参考にさせて頂いています。
後述しますが、sudo権限でnodeが使えるようにしておいてください。

Raspberry PiにNode.js実行環境を構築 - ブログを書くまでが

1.プロジェクトの作成

適当にプロジェクトディレクトリを作って、npmを初期化

1
2
3
$ mkdir node-ledmatrix
$ cd node-ledmatrix
$ npm init

npmの初期化に色々聞かれますが、とりあえず適当でOKです。

2.ライブラリのインストール

1
$ npm i node-rpi-rgb-led-matrix --save

あー、色々warningでるな。とりあえず、無視で。

3.サンプルを動かしてみる

test.jsを作成して、サンプルコードを入れてみます。エディタは何でも。

1
$ nano test.js

で、下記のサンプルコード(npmのreadmeそのまま転記)を入力して、保存します。

1
2
3
4
5
var LedMatrix = require("node-rpi-rgb-led-matrix");

var matrix = new LedMatrix(16);
matrix.fill(255, 50, 100);
matrix.setPixel(0, 0, 0, 50, 255);

できたら実行してみる。

1
$ sudo node test.js

一瞬ピンクに光って、{x: 0, y: 0}のピクセルが青く光りました。よかった。
リフレッシュレートとか決められるのかな。

ちなみにここで、

1
$ node test.js

とやると、

1
2
can't open /dev/mem: : Permission denied
node: ../src/ledmatrix.cc:21: LedMatrix::LedMatrix(int, int, int): Assertion `io.Init()' failed.

のエラーが出ます。/dev/memのアクセス権限エラーですね。
githubのissueで議論されていました。対処する必要がある方は参考にしてみてください。

How do you run this as sudo? · Issue #12 · zeitungen/node-rpi-rgb-led-matrix

4.一瞬光るだけだと物足りない人に

1
2
3
4
5
6
7
8
9
10
var LedMatrix = require("node-rpi-rgb-led-matrix");

var matrix = new LedMatrix(16);

matrix.clear();
matrix.fill(255, 50, 100);

setTimeout(function(){
// nop
}, 1000);

delay(1000);の代わりのsetTimeout…笑
常に信号送ってないと光らないわけじゃないんだな。
ちなみに、最初にmatrix.clear();入れた方が安定しました。

今日はここまで。