[Genuino 101][Johnny-Five] マトリックス LED の制御

sgier-johnny-five-i-catch

johnny-five

車輪開発大好きおたいがです。こんにちは。( 挨拶 )

今回は Genuino 101 ( 以下 Genuino ) と Johnny-Five を使用したマトリックス LEDの制御についてまとめてみました。

Johnny-Five の一部 API では、特定メーカーのデバイスやドライバが明示的にサポートされており、闇雲にパーツを購入すると後で泣きを見ることがあります。そして、今回使用する Led.Matrix クラスでは、MAX7219, HT16K33 といった LED ドライバがサポートされているので、後者の HT16K33 を利用することにしました。

動作環境・道具など

マトリックス LED の組み立て

購入したマトリックス LED 基板は組立キットなので、自前で工作する必要があります。内容物は以下になります。

  • LED 動作基板 (HT16K33)
  • 8x8 マトリックス LED
  • 6 ピンヘッダ ( ちぎって 4 ピンにする )

j5-matrix-led-001

これを

j5-matrix-led-002

こんな感じにはんだ付けします。4 ピンヘッダ、マトリックス LED の接続方向を間違えると悲惨なことになるので要注意です。( 一回やらかしたので基盤を焦がしてしまいました… )

回路図

j5-matrix-led-003

配線はシンプルです。Genuino の電源、GND、そして 2 本の I2C ピン ( SDASCL ) をそれぞれ LED 基板に接続します。

サンプルスケッチ ( プログラム ) をボードに書き込む

Genuino に StandardFirmata スケッチを書き込みます。
( 参照 : http://dev.classmethod.jp/hardware/johnny-five-genuino-101-debut/#toc--- )

Johnny-Five 実行用のサンプルプロジェクト作成および実行

Johnny-Five の導入および実行するためのプロジェクトを用意します。任意のプロジェクトディレクトリを作成して移動したあとに、下記コマンドを入力します。

package.json の初期化

$npm init

Johnny-Five のダウンロード

$npm install johnny-five

サンプルコードの作成

var five  = require('johnny-five');
// Genuino が接続されているポート番号 ( `/dev/tty*` (Mac/Linux) or `COM*` (Windows) )
var board = new five.Board({ 'port': 'COM8' });

board.on('ready', function() {

  var heart = [
    '01100110',
    '10011001',
    '10000001',
    '10000001',
    '01000010',
    '00100100',
    '00011000',
    '00000000'
  ];
  
  // 文字列のリストで各行の点灯情報を渡す場合
  // 1 と 0 の組合せで構築
  var data1 = [
    '01010101',
    '10101010',
    '01010101',
    '10101010',
    '01010101',
    '10101010',
    '01010101',
    '10101010'
  ];
  
  // 整数のリストで各行の点灯情報を渡す場合
  // 渡した整数の 2 進数表記が各行の点灯情報となる
  var data2 = [
    0xAA, //10101010
    0x55, //01010101
    0xAA, //10101010
    0x55, //01010101
    0xAA, //10101010
    0x55, //01010101
    0xAA, //10101010
    0x55  //01010101
  ];

  var matrix = new five.Led.Matrix({
    'controller' : 'HT16K33',
    'rotation'   : 3 // 180 度反転
  });

  this.repl.inject({
    'm'     : matrix,
    'test1' : data1,
    'test2' : data2
  });

  matrix.clear();
  matrix.draw(heart);
});

実行

$node index

上記コードを実行すると、このように…

j5-matrix-led-004

コマンドの例

Genuino と通信中にコマンドを入力することで点灯状況を変化させることができます。

>> m.draw(test1);

j5-matrix-led-005

>> m.draw(test2);

j5-matrix-led-006

>> m.draw('C');

j5-matrix-led-007

>> m.draw('M');

j5-matrix-led-008

半角英数字と一部の記号を入力することも可能です。

>> m.clear();

j5-matrix-led-009

すべて消灯されます。