Osoyoo Arduino 16×2 I2C LCD プロジェクト

Prev:Osoyoo Arduino 傾斜センサープロジェクト

今回は、I2CでLCDに文字を表示しちゃいましょう!って感じです。

I2Cとはなんじゃ?と言う方に少しだけ。

電源2本、信号線1本、クロック線1本の合計4本で通信が出来てしまうシリアル通信の規格なんです。簡単過ぎだwww

ネットワークには複数ノードが接続される為に、パケット内にSlaveアドレスを指定する必要があるため、送信データは増えてしまいます。

I2Cの後発でSPIというのがありますが、こちらは各ノードをCSで選択する事により送信データが少なく、また送受信の手順も簡単になっています。(I2Cはちょっと手間がかかる)。

ただし、その分CSの線がノード分増える事になりますので、設計する際には何が重要かで選択する事になると思います。

話を戻して、

今回の接続図です。

と思ったのですが、LCDの裏側のパーツがありません・・・・・

なので、本当のパクリでお送りします。

(しかも写真に透かしが・・・悪気はありません・・・ごめんなさい・・・・)

で、今回はI2Cのライブラリーを取り込む必要があるらしいです。

LiquidCrystal_I2C.zip

をダウンロードして、下記フォルダ内に配置します。

既に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!」が表示されます。

ほんま便利な世の中になったよなー。シミジミ

Next:74HC595 シフトレジスターを使って、直列入力並列出力プロジェクト

シェアする

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

フォローする