[I2C] I/O エキスパンダ (PCF8574A)

I/O ピンを I2C で拡張してみます。



購入

PCF8574A を利用した I2C I/O エキスパンダは Amazon 等で購入できます (購入時価格: ¥250)。




各部詳細

以下、 I/O エキスパンダの詳細です。

I2C アドレス設定用ジャンパーの値は以下の通りです。左側が+で、右側が-です (ON / OFF とかでよかったような気も...)。

PCF8574
Address
PCF8574A
Address
A0 A1 A2
0x27 0x3F
0x26 0x3E
0x25 0x3D
0x24 0x3C
0x23 0x3B
0x22 0x3A
0x21 0x39
0x20 0x38

I2C アドレスをずらせば、理論上は 8 つのエキスパンダを同時に制御できます。

こんな感じで合体させれば最大 64 ポートを制御できます。

See Also:



動作確認

Arduino (UNO) との接続は以下のようになります。

I2C LCD Arduino
VCC 1 VCC 5V
GND 2 GND GND
SDA 3 SDA A4
SCL 4 SCL A5

4 本だけの接続なので簡単ですね。


PCF8574 ライブラリ

以下のライブラリをインストールします。

<Arduino IDE インストールフォルダ>\library に PCF8574 というサブフォルダを作成してそこに展開してください。

See Also:



I2C キーパッド

UNO チュートリアルの Chapter 24 (Option): Keypad で使ったキーパッドを I2C 接続してみましょう。

ここにジャンパーピンがあるじゃろ?

それをこうじゃ!

ハード的にはこれで完成です。


I2C KeyPad ライブラリ

以下のライブラリをインストールします。ZIP で取得し、Keypad_I2C だけをインストールします。

サンプルスケッチもありますが、12 キー用なので、改変した 16 キー用スケッチを掲載しておきます。

#include <Keypad_I2C.h>
#include <Keypad.h>
#include <Wire.h>

#define I2CADDR 0x38

const byte ROWS = 4// four rows
const byte COLS = 4// four columns
char keys[ROWS][COLS] = {
  {'1''2''3''A'},
  {'4''5''6''B'},
  {'7''8''9''C'},
  {'*''0''#''D'}
};

// Digitran keypad, bit numbers of PCF8574 i/o port
byte rowPins[ROWS] = {0123}; // connect to the row pinouts of the keypad
byte colPins[COLS] = {4567}; // connect to the column pinouts of the keypad

Keypad_I2C kpd(makeKeymap(keys), rowPins, colPins, ROWS, COLS, I2CADDR, PCF8574);

void setup(){
  Wire.begin();
  kpd.begin(makeKeymap(keys));
  Serial.begin(9600);
  Serial.println("start");
}

void loop(){
  char key = kpd.getKey();
  if (key){
    Serial.println(key);
  }
}

シリアルモニタを開いてキーを押すと対応した文字が入力されます。

See Also:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: