본문 바로가기

관리하지않음/아두이노

[아두이노] I2C LCD 사용법

I2C 1602 LCD

아두이노 키트를 사면 대부분 I2C LCD 모듈이 포함되어 있습니다. 이번 포스팅에서는 2줄 16글자를 한 화면에 출력할 수 있는 I2C 1602 LCD를 사용해 I2C LCD 사용법을 간단하게 정리해봤습니다.

1. 라이브러리 설치

먼저 LiquidCrystal I2C 라이브러리를 설치해야 합니다. 아래 깃헙 링크에서 ZIP 파일로 다운로드합니다. 

Arduino-LiquidCrystal-I2C-library 링크

 

라이브러리 다운로드

아두이노 IDE를 실행한 뒤 스케치>라이브러리 포함하기>.ZIP 라이브러리 추가를 클릭합니다.

 

스케치>라이브러리 포함하기>.ZIP 라이브러리 추가

아까 다운로드 받은 Arduino-LiquidCrystal-I2C-library-master.zip 파일을 추가해주시면 됩니다.

 

라이브러리 추가하기

정상적으로 라이브러리가 추가되었다면, 스케치> 라이브러리 포함하기 아래의 Contributed 라이브러리 영역에서 추가한 라이브러리 이름이 뜹니다.

 

스케치>라이브러리 포함하기> Contributed 라이브러리

2. 보드 구성

I2C LCD 아두이노
GND GND
VCC 5V
SDA A4
SCL A5

I2C LCD와 아두이노 핀 연결을 표로 만들었습니다. 중요한 것은 SDA, SCL은 무조건 A4, A5에 연결해주셔야 하는 점입니다. 다른 핀에 연결하면 동작하지 않습니다.

 

아두이노 보드 구성

3. 코드

라이브러리 자체에서 예제코드를 제공하고 있습니다. 저는 HelloWorld.ino라는 예제 코드를 실행시켜봤습니다. 아래 코드를 복붙 한 뒤 IDE에서 실행합니다.

 

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
	// initialize the LCD
	lcd.begin();

	// Turn on the blacklight and print a message.
	lcd.backlight();
	lcd.print("Hello, world!");
}

void loop()
{
	// Do nothing here...
}

실행 사진

LCD에 잘 실행이 되었습니다 :>

 

4. 응용 1 - 줄마다 다른 문자 출력하기

첫 번째 줄과 두 번째 줄에 서로 다른 문자를 출력하는 예제입니다.

첫 번째 줄에는 Hello를, 두 번째 줄에는 Bye를 출력하게 만들었습니다.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  // initialize the LCD
  lcd.begin();

  // Turn on the blacklight and print a message.
  lcd.backlight();
  //lcd.print("Hello, world!");
}

void loop()
{
  lcd.setCursor(0,0); //첫번째 줄의 0번째 부터 출력
  lcd.print("Hello");
  lcd.setCursor(0,1); //두번째 줄의 0번째 부터 력출
  lcd.print("Bye");
}

실행 사진

문자를 0번째가 아니라 n번째부터 출력하고 싶다면 lcd.setCursor(n, 0)으로 변경하시면 됩니다. 아래 사진은 Hello를 lcd의 7번째 열에서 출력하게 만든 것입니다.

 

실행 사진

5. 응용 2 - 문자열이 오른쪽에서 왼쪽으로 흐르는(스크롤) 연출

간판에서 많이 볼 수 있는 효과 중에 하나가 오른쪽에서 왼쪽으로 글자가 흐르면서 더 많은 정보를 제공하는 것입니다. 라이브러리에서 제공하는 scrollDisplayLeft() 함수를 통해서 쉽게 구현할 수 있습니다.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  // initialize the LCD
  lcd.begin();

  // Turn on the blacklight and print a message.
  lcd.backlight();
}

void loop()
{
  char str[] = "Hello, world!             "; //26자 맞추기
  //char str2[] = "Hello, world! My name is Hello Alpaca"

  lcd.setCursor(15, 0); // set the cursor to column 15, line 0
  
  for (int pos = 0; pos < 26 ; pos++)
  {
    lcd.scrollDisplayLeft(); 
    lcd.print(str[pos]);
    delay(1000); //wait for 1 seconds
  }
  
  lcd.clear();
}

 

실행 영상

문자가 26개보다 작다면, space를 통해서 26자리로 맞춰주셔야 합니다. 그리고 문자가 26자가 넘어가면 26자 이후의 글자가 아래와 같이 아랫줄에 출력이 됩니다.

 

26자리가 넘어가면 생기는 일

라이브러리를 깃헙이 아니라 블로그나 개인 홈페이지에서 받는 걸 싫어하는 편이라서 Arduino-LiquidCrystal-I2C-library를 찾고 세팅 방법을 정리했습니다. 자체적으로 제공하는 기능이 많아서 커스텀하기 편했습니다. 응용 2의 스크롤 기능은 Sunfounder라는 외국 홈페이지에서 참고했습니다. 추가적으로 응용하고 싶은데 자료가 없다면 영어로 검색하셔야 빠르게 자료를 찾으실 수 있을겁니다ㅠ_ㅜ


잘못된 내용이 있다면 언제든지 댓글이나 메일로 알려주시면 감사하겠습니다.

이 포스팅이 도움이 되었다면 공감 부탁드립니다.

궁금한 점은 언제든지 댓글 남겨주시면 답변해드리겠습니다:D