2016年8月25日木曜日

Johnny-Fiveでマイコン制御36 - IOエクスパンダ

○Expanderオブジェクトを作成する
 IOエクスパンダを使用するには、Expanderオブジェクトを使います。Expanderオブジェクトは、物理的なボードに接続された単一のIOエクスパンダを表すオブジェクトです。
Expanderオブジェクトを作成するには、Expanderコンストラクタを使います。引数にはデバイス名を指定します。
new five.Expander("デバイス名");

 オプションの「controller」プロパティを使用して、次のように書くこともできます。
new five.Expander({
  controller: "デバイス名"
});

Johnny-FiveのサポートするIOエクスパンダは、次のとおりです。IOエクスパンダのほかに、AD/DAコンバータ、多チャンネルサーボ―コントローラなどもサポートしています。

PCF8574PCF8574APCF8575
PCA9685
PCF8591
GROVEPI(Raspberry Pi)
74HC595, SN74HC595
CD74HC4067

 各IOエクスパンダの機能は、次のとおりです。
デバイス名
ピン数
モード
MCP23017
16
INPUTOUTPUT
MCP23008
8
INPUTOUTPUT
PCF8574
8
INPUTOUTPUT
PCF8574A
8
INPUTOUTPUT
PCF8575
16
INPUTOUTPUT
PCF8591
4
INPUTOUTPUT
PCA9685
16
OUTPUTPWMSERVO
MUXSHIELD2
48
INPUTOUTPUTANALOG
GROVEPI
10()
INPUTOUTPUTANALOGPWMSERVO
CD74HC4067
16
ANALOG
74HC595
8
OUTPUT
7デジタル、3アナログ

○IOエクスパンダのI2Cアドレスを指定する
 I2CインターフェイスのIOエクスパンダのI2Cアドレスを指定するには、「address」プロパティを使います。
new five.Expander({
  controller: "デバイス名",
  address: 0x??
});

 各デバイスの既定のI2Cアドレスは、次のとおりです。

デバイス名
範囲
既定値
MCP23017
0x20-0x27
0x20
MCP23008
0x20-0x27
0x20
PCF8574
0x20-0x27
0x20
PCF8574A
0x38-0x3F
0x38
PCF8575
0x20-0x27
0x20
PCF8591
0x48-0x4F
0x48
PCA9685
0x40-0x4F
0x40
GROVEPI
0x04
0x04
CD74HC4067
0x0A
0x18

○74HC595用のExpanderオブジェクトを作成する
 シフトレジルタの74HC595を使用するためExpanderオブジェクトを作成するには、「controller」プロパティに「74HC595」を指定し、「pins」プロパティに「data」「clock」「latch」「reset(オプション)」用のピンの値を含む配列またはオブジェクトを指定します。
 たとえば、2ピンを「data」、3ピンを「clock」、4ピンを「latch」に使用する「74HC595」のExpanderオブジェクトを作成するには、次のように書きます。
// J5-Arduino\12\Expander\anode-common.js
new five.Expander({
  controller: "74HC595",
   pins: {
    data: 2,
    clock: 3,
    latch: 4
  }
})

・配線図











○IOエクスパンダのI/Oポートを制御する
 IOエクスパンダのI/Oポートを制御するには、ExpanderオブジェクトのAPIメソッドを使います。

・ピンモードの設定
 ピンモードを設定するには、「pinMode」メソッド使います。引数にはピン番号とモードを指定します。各IOエクスパンダで設定可能なモードは、こちらの表を参照してください。
pinMode(ピン番号, モード)
 たとえば、0ピンのモードを入力(デジタル入力)に設定するには、次のように書きます。
expander.pinMode(0, expander.MODES.INPUT);

・アナログ入力値の読み取り
 アナログピンのアナログ入力値を読み取るには、「analogRead」メソッドを使います。引数には、ピン番号とハンドラを指定します。ハンドラには、(読み取り時に実行するコールバック関数を指定します。読み取った値はハンドラの引数に返されます。
analogRead(ピン番号, ハンドラ( 引数 ) )
 たとえば、0ピンのアナログ入力値を読み取り、取得した値を表示するには、次のように書きます。
expander.analogRead(0, function(value) {
  console.log(value);
});

・デジタル入力値の読み取り
 デジタルピンのデジタル入力値を読み取るには、「digitalRead」メソッドを使います。引数には、ピン番号とハンドラを指定します。ハンドラには、(読み取り時に実行するコールバック関数を指定します。読み取った値はハンドラの引数に返されます。
digitalRead(ピン番号, ハンドラ( 引数 ) )
 たとえば、0ピンのデジタル入力値を読み取り、取得した値を表示するには、次のように書きます。
expander.digitalRead(0, function(value) {
  console.log(value);
});

・デジタル値の出力
 デジタル値を出力するには、「digitalWrite」メソッドを使います。引数には、ピン番号と出力値(0」または「1)を指定します。
digitalWrite(ピン番号, 出力値)
 たとえば、0ピンに「1(HIGH)を出力するには、次のように書きます。
expander.digitalWrite(0, 1)

PWMの出力
 PWMを出力するには、「pwmWrite」メソッド、または「analogWrite」メソッドを使います。引数には、ピン番号と出力値(0255)と指定します。
pwmWrite(ピン番号, 出力値)
analogWrite(ピン番号, 出力値)
 たとえば、0ピンにPWM値「255」を出力するには、次のように書きます。
expander.pwmWrite(0, 255);

・サーボ値の出力
 サーボ値(サーボモーターの回転角度)を出力するには、「servoWrite」メソッドを使います。引数には、ピン番号と角度(0180)を指定します。
servoWrite(ピン番号, 角度)
 たとえば、0ピンのサーボ値180度を出力するには、次のように書きます。
expander.servoWrite(0, 180);

○IOエクスパンダとコンポーネントを関連付ける
 IOエクスパンダは、コンポーネントと関連付けすることで、コンポーネントのオブジェクトからシームレスでアクセスできるようになります。
 IOエクスパンダは、コンポーネントと関連付けするには、まずIOエクスパンダの仮想ボードを作成します。仮想ボードを作成するには、Board.Virtualコンストラクタの引数にExpanderオブジェクトを渡します。
 たとえば、「PCF8575」の仮想ボードを作成するには、次のように書きます。
  var virtual = new five.Board.Virtual(
   new five.Expander("PCF8575")
  );

 次にコンポーネントのオブジェクトを作成します。このとき、「board」プロパティに仮想ボードのオブジェクトを指定します。「pin」や「pins」プロパティには、仮想ボード上のピン番号を指定します。
 たとえば、「PCF8575」の0ピンにLEDを、17ピンにボタンを接続して、コントロールできるようにするには、次のように書きます。
// J5-Arduino\12\Expander\pcf8575.js
  // Ledオブジェクトを作成
  // PCF8575」の0ピンにLEDを接続
  var led = new five.Led({
    board: virtual,
    pin: 0,
  });

  // Buttonオブジェクトを作成
  // PCF8575」の17ピンにボタンを接続
  var button = new five.Button({
    board: virtual
    pin: 17,
  });



・配線図


0 件のコメント:

コメントを投稿