激安モジュールトライアルの続き。
IIC/I2C/TWI/SPI シリアルインタフェースボードモジュール
激安中華なモジュールをちょろちょろと買い込んで調べています。
キャラクタLCD表示器は便利なため頻繁に使用するのですが、4bitパラレルモードで使用しても配線数が多くて制御線の操作もけっこう面倒。自分用に初期化から表示などコマンド類を含めた一連の操作をライブラリ化をしたものを作成してありますが、たまにはArduinoをベースにして世の中の賢い人が作ってくれた背中に乗ってしまおうと安易な方向へ流されました(笑)。パラレル4bit接続ではなくI2Cで接続したLCDディスプレイの利用です。
NXPセミコンダクタのI2C 8bit I/OエクスパンダPCF8574Aを搭載したLCDモジュール向けのI2C制御モジュール基板。
モジュールのデバイスデフォルトアドレスはアドレス設定ピンA0〜A2が10kΩでプルアップされていますので0x3Fとなりますが基板上のパターンにA0/A1/A2のショート用パターンが出ていますので、ここに0Ωのチップ抵抗を実装かショートすれば0x38〜0x3Fの範囲の任意のアドレスを設定することができ、別々にすることで最大8台のキャラクタLCD表示器をI2Cバス上に接続できます
ここでは自前のLCDライブラリを使わずにmarcoschwartzさんの作成したLiquidCrystal_I2Cライブラリを使ってみました。
使い方は至極簡単で
#inlcude <LiquidCrystal_I2C.h> // lcd(address, col_num, row_num) LiquidCrystal_I2C lcd(0x3F, 16, 2); void setup() { lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Hello, world!"); lcd.setCursor(0, 1); lcd.print("Arduino Uno R3"); } void loop() { }
と記述するだけで使用できます。
とりあえず、ライブラリの動作確認を手持ちのArduino Uno R3を使って行ってみました。
動作確認サンプルなので横着していますが、実際には初期化部分だけをstartup()に記述して実際の表示周り操作はloop()やその中から呼び出される関数で記述します。
用意されているライブラリのメッソドにはHD44780互換デバイスの制御に使うものが豊富にあって、CGRAMにオリジナルキャラクタを書込むメソッドも用意されており大変便利です。
この子基板をLCDモジュールの基板背面に実装する場合、この子基板の裏側の部品とLCDモジュールの裏側の部品が干渉して接触する微妙な距離になる場合があります。予めカプトンテープなどで覆って絶縁を行うか、モジュールに子基板のコネクタをハンダ付けする際に十分な隙間をあけて実装して、隙間を確保するスペーサーを挟むなどするようにした方が後々のトラブルにならないと思います。
※ 搭載しているデバイスがPCF8574の場合とPCF8574Aの場合があるようです。中華な製品の場合、平気で調達の状況かなにかで勝手に仕様変更して出てきますので注意が必要です。1ロット中であっても変更が入る例を見てきたことがありますので…。
私の入手した物ではPC8547Aでしたが、もしPCF8574(Aなし)の場合は、I2Cのデバイスアドレスがデフォルト0x27、アドレス設定範囲は0x20〜0x27になりますのでご注意ください。