今回とりあげる、I2C通信式のLCDパネルは、こんな感じです↓
液晶パネルは通常の16桁×2行の1602パネル(緑色モジュール)が元になります。
これ自体は 4bit/ 8bit パラレル通信式モジュールなのですが、外部(
Arduinoなど)との接続ラインが電源含め8本以上必要と、とても多くなってしまいます。
そこで「パラレル⇔I2C変換モジュール(黒色)」により、接続ラインを電源含め4本に削減することができます。
Step 1 必要なライブラリーのダウンロード
このモジュール用に作られた
LCD Library を、下記からダウンロードします。
zipファイルはとりあえずダウンロードフォルダなどに保存しておいてください。
Step 2 ArduinoUNOとLCDモジュールとの配線
ジャンパー線(メス⇔オス)で次のように配線します。
GND ----- GND
VCC ----- 5V
SDA ----- A4 or SDA(UNO r3の場合、AREFの隣り)
SCL ----- A5 or SCL (UNO r3の場合、SDAの隣り)
I2C信号線(SDA, SCL)の外部抵抗によるプルアップは特に必要ありません
配線をすませ、
Arduino側のUSBケーブルを接続(電源ON)しますと、
LCDのバックライトが明るくなります。
LCD文字のコントラストは「
パラレル⇔I2C変換モジュール」上にある半固定抵抗にて調整します。
大体半分程度に合わせておいて、あとで微調整します。
Step 4 LCDモジュールの I2Cアドレスを見つけ出す 一般的に、各I2Cデ
バイスには固有のI2Cアドレスが指定されており、このアドレスを使って(
Arduinoなどの)I2Cマスター側は、特定のI2Cスレーブ・デ
バイスとの通信を確立します。I2C_
LCDモジュールはI2Cスレーブ・デ
バイスとなります。
LCDモジュールのI2Cアドレスは、多くの場合、デフォルトで0x27, 0x3F などが割り振られています。またモジュールのジャンパ・パターンの設定によってI2Cアドレスをある程度変更できるようになっています。これらは
「パラレル⇔I2C変換モジュール」を構成する主要ICの仕様です。
ここでは、
LCDモジュールのI2Cアドレスがわからない場合でも、そのアドレスを探し出せる方法をご紹介します。以下のI2C_scanというコードがよく知られています。
/* this program is to detect IC2 device connected to Arduino
*/
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
今回取り上げた
LCDモジュールのI2Cアドレスは 0x3Fでした。
Arduino-LiquidCrystal-I2C-library-masterのサンプル HelloWorldを開きます。
ここで、I2Cアドレスを修正します。Step 4で取得した 0x3Fを代入します。
<変更前>
<変更後>
できました!
補足
上記ライブラリーで使える関数の一部を挙げておきます
lcd.clear :画面クリア
lcd.setCursor( , ) :指定位置にカーソルをセット
lcd.noBacklight :バックライトをOFF
lcd.backlight :バックライトをON
lcd.createChar :カスタムキャラクター(絵文字)の作成
lcd.print :数値、文字列の表示
適宜更新します。