I2Cで複数の液晶ディスプレイをArduinoに接続する


I2Cシリアル・パラレルインタフェースボード付きのLCD(液晶ディスプレイ)2個セットを購入し、I2Cで複数のLCDを接続してみた。


購入したLCDは裏面にPHILIPS社のPCF8574が搭載されたI2Cシリアル・パラレルI/Fが接続されているものだった。


裏側にこのI/Fがあると操作しにくいので、ハンダを外して表面に移動した。


I2Cシリアル・パラレルインタフェースボードには、黄色線で囲んだA0・A1・A2のジャンパ端子があり、PCF8574の同名のピンに接続されている。各ジャンパの上側は赤色線で囲んだ抵抗でVccにプルアップされ、PCF8574に接続されている。各ジャンパの下側はGNDに接続されている。ジャンパがオープンの状態で”HIGH”、ジャンパを短絡すると”LOW”に設定される。


A0・A1・A2のうちA0を短絡して、LCDの複数接続をためしてみる。
PCF8574のデータシートの記載ではジャンパ設定とI2Cアドレスは次のとおりである。

A2 A1 A0 アドレス
HIGH HIGH HIGH 27h
HIGH HIGH LOW 26h
HIGH LOW HIGH 25h
HIGH LOW LOW 24h
LOW HIGH HIGH 23h
LOW HIGH LOW 22h
LOW LOW HIGH 21h
LOW LOW LOW 20h

A0を短絡してI2Cのアドレスを26hにしたLCDと、デフォルトのアドレス27hのLCDをArduinoに接続して別々の表示をしてみる。ソースは次のとおり。

#include <LiquidCrystal_I2C.h>
void setup(){
}
void loop(){
	LiquidCrystal_I2C lcd26(0x26,16,2); // アドレス0x26でインスタンス生成
	lcd26.begin();                      // LCD初期化
	lcd26.clear();                      // LCDクリア
	lcd26.setCursor(0,0);               // カーソルを0,0にする
	lcd26.print("LCD Multi disp");      // LCD表示
	lcd26.setCursor(0,1);               // カーソルを0,1にする
	lcd26.print("Address 0x26");        // LCD表示
	LiquidCrystal_I2C lcd27(0x27,16,2); // アドレス0x27でインスタンス生成
	lcd27.begin();                      // LCD初期化
	lcd27.clear();                      // LCDクリア
	lcd27.setCursor(0,0);               // カーソルを0,0にする
	lcd27.print("LCD Multi disp");      // LCD表示
	lcd27.setCursor(0,1);               // カーソルを0,1にする
	lcd27.print("Address 0x27");        // LCD表示

	while(1);
}

プログラムの内容は、ハードで設定したI2Cのアドレスを指定して、アドレス毎にインスタンスを生成し、それぞれのインスタンスに対して出力するものだ。

実行すると次のとおり、LCDに個別の表示を行うことができる。

ArduinoとLCDの接続は次のとおり。

LCD(27h) LCD(26h) Arduino
Vcc Vcc 5V
GND GND GND
SDA SDA A4
SCL SCL A5

シェアする

  • このエントリーをはてなブックマークに追加

フォローする