16핀을 가지는 1602 lcd 디스플레이는 사용법이 그다지 복잡하지는 않으나 핀 수로 인해 점퍼 선 와이어링 작업이 과한 편이다. 이러한 점퍼 선 작업을 줄이기 위해서 1602 lcd PCB의 뒷면에 백팩(backpack)으로 부착하여 I2C 인터페이스를 사용하는 lcd 로 개조해 보기로 한다. 백팩 PCB는 시중에서 660원의 저렴한 가격으로 구입할 수 있다. 한편 아예 백팩이 부착된 I2C lcd를 구매하는 것도 방법이다.
I2C 인터페이스의 장점으로는 와이어링에 필요한 전기 배선이 전원선 GND 와 5V, SCL 과 SDA 4개의 점퍼선이면 충분하다. 반면에 아두이노에서 응용 시에 LiquidCrystal_I2C.h 및 Wire.h 라이브러리 사용이 필요하다.
아래는 16핀 백팩 PCB회로가 납땜되어 있는 lcd의 뒤태이다. 우측 상단에 가변 저항이 1개 부착되어 있는데 이는 lcd의 백라이트 밝기를 조절하기 위함이다.
아두이노 편집기의 스케치 탭 메뉴의 라이브러리포함하기에서 ZIP 라이브러리 추가를 실행하여 라이브러리 LiquidCrystal_I2C.h 를 설치한다.
i2c 방식으로 lcd를 사용하기 위해서는 Wire.h 라이브러리도 필요한데 이 라이브러리는 아두이노에 디폴트로 설치되어 있으므로 코드 전반부에 그냥 헤더파일을 불러 쓰면 된다.
라이브러리 바로 밑에서 클라스 명령 LiquidCrystal_I2C lcd(0x3F,16,2)을 실행한다.
setup() 문에서 초기화 및 백라이트 제어 명령을 실행한다. 주의할 점은 I2C 인터페이스를 쓸 경우와 쓰지 않을 경우의 중요한 차이점은 초기화 명령이 서로 다르다는 점이다. I2C 인터페이스의 초기화는 lcd.init() 이며 반면에 I2C를 쓰지 않는 경우에는 lcd.begin() 명령을 사용한다.
준비가 되었으면 위 그림의 간단한 코드를 실행보기 바란다. 아울러 코드가 대단히 간단해도 실패할 수 있는데 백팩회로를 부가함에 따라 하드웨어적으로 I2C 주소가 0x27로 변경되어 버린 경우가 있다.
실제 I2C 인터페이스의 주소 값이 얼마인지 첨부된 i2cscanner 코드를 사용하여 시리얼 모니터에서 확인하도록 하자.
i2cscanner
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; 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("Unknown 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
}//끝
'아두이노프로세싱 프로그래밍' 카테고리의 다른 글
아두이노 DHT22 온습도 센서 측정 (0) | 2018.01.04 |
---|---|
아두이노 DHT11 온습도 측정기 I2C인터페이스 1602 lcd 출력 (0) | 2017.12.15 |
초보자를 위한 아두이노 DHT11 온습도 측정 결과 1602 lcd 출력 (0) | 2017.11.28 |
초보자를 위한 아두이노 lcd 와이어링과 Hellow World!코딩 (0) | 2017.11.28 |
weMos의 LED 및 DHT11 사물인터넷 와이파이 제어를 위한 HTML 코딩 (0) | 2017.11.22 |