Prev:Osoyoo Arduino 傾斜センサープロジェクト
今回は、I2CでLCDに文字を表示しちゃいましょう!って感じです。
I2Cとはなんじゃ?と言う方に少しだけ。
電源2本、信号線1本、クロック線1本の合計4本で通信が出来てしまうシリアル通信の規格なんです。簡単過ぎだwww
ネットワークには複数ノードが接続される為に、パケット内にSlaveアドレスを指定する必要があるため、送信データは増えてしまいます。
I2Cの後発でSPIというのがありますが、こちらは各ノードをCSで選択する事により送信データが少なく、また送受信の手順も簡単になっています。(I2Cはちょっと手間がかかる)。
ただし、その分CSの線がノード分増える事になりますので、設計する際には何が重要かで選択する事になると思います。
話を戻して、
今回の接続図です。
と思ったのですが、LCDの裏側のパーツがありません・・・・・
なので、本当のパクリでお送りします。
(しかも写真に透かしが・・・悪気はありません・・・ごめんなさい・・・・)
で、今回はI2Cのライブラリーを取り込む必要があるらしいです。
をダウンロードして、下記フォルダ内に配置します。
既にLiquidCrystal_I2Cというフォルダがある場合には、リネームしておきます。
C:\Program Files (x86)\Arduino\libraries
ArduinoIDEの画面で「Sketch->Import Library ->Add Library」をクリックして、解凍済みのLiquidCrystal_I2Cフォルダを選択します。
リストで新しいLiquidCrystal_I2Cが出てきたらOKです。
ArduinoIDEを再起動します。
では、図のように接続します。
「SDA=A4 」
「SCL=A5」
「VCC=5V」
「GND=GND」
こんな感じで、通電するとLCDのバックライトが光ります。
LCDの拡大
何も文字は出てきてません。
さて、次はこのLCDのアドレスが何番かを知る必要があります。
先ほど説明したように、送信データとしてSlaveアドレスが必要なためです。
下記ソースをArduinoに展開します。
/* this program is to detect IC2 device connected to Arduino * project tutorial see https://osoyoo.com/?p=72 */ #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 }
Arduinoにロードします。
ArduinoIDEの画面で「Tools」-「serial monitor」を開くと接続されているI2CのSlaveが表示されますので、メモっておいてください。
いよいよ、LCDへの文字表示です。
/* ___ ___ ___ _ _ ___ ___ ____ ___ ____ * / _ \ /___)/ _ \| | | |/ _ \ / _ \ / ___) _ \| \ *| |_| |___ | |_| | |_| | |_| | |_| ( (__| |_| | | | | * \___/(___/ \___/ \__ |\___/ \___(_)____)___/|_|_|_| * (____/ * www.osoyoo.com IC2 Liquid Crysal Testing program * program tutorial : https://osoyoo.com/?p=72 * Copyright John Yu */ #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3f,16,2); // run ic2_scanner sketch and get the IC2 address, which is 0x3f in my case,it could be 0x3f in many cases void setup() { lcd.init(); // initialize the lcd } void loop() { // set cursor to first line lcd.setCursor(0, 0); // Print a message to the LCD. lcd.backlight(); lcd.print("Hello!"); lcd.setCursor(0,1); lcd.print("Osoyoo.com"); }
上記ソースで0x3fとなってる箇所を0x27へ変更します。
LiquidCrystal_I2C lcd(0x3f,16,2);
↓
LiquidCrystal_I2C lcd(0x27,16,2);
Arduinoにロードすると下記のように「Hello World!」が表示されます。
ほんま便利な世の中になったよなー。シミジミ