어제 가상시뮬레이터에서 LCD 16x2를 제어를 해보았는데 오늘은 실제 LCD 16x2 I2C을 이용해서 동일한 코딩 로직으로 결과를 출력하는 실험을 해보겠습니다. 사실 LCD 16x2를 가지고 있어 그것도 보여드리면 좋았겠지만 그냥 편하게 실험하기 위해서 LCD 16x2 I2C를 사용해서 실험 했네요.
LCD 16x2 I2C의 뒤면 검은색 모듈이 추가되어 있는데 I2C 통신을 하기 위한 모듈입니다. 간단히 4핀으로 구성되어 있으면 아두이노에 연결할때도 그리 어렵지 않게 연결할 수 있습니다.
제가 소유한 LCD 16x2와 LCD 16x2 I2C 인데 보는것 같이 핀 4개짜리를 사용하는게 훨 편하겠죠.
LCD 16x2 I2C의 뒷면에 보시면 적혀있기 때문에 쉽게 연결 할 수 있습니다.
아두이노에서 I2C에 잡혀있는 주소를 알아볼 수 있습니다. 예제가 있으니 그걸 복사하셔서 자신이 사용하는 부품의 주소를 확인하시면 됩니다.
이곳에 가셔서 LCD 16x2 I2C의 데이터 시트를 확인하시면 됩니다. 아주 간단하게 소개되어 있어서 보기 편할꺼에요. 이곳에 가시면 이표가 있는데 LCD 16x2 I2C 주소가 어떻게 지정되는지 확인 할 수 있습니다.
위에 LCD 16x2 I2C 뒤면 사진에서 파란사각모양(가변저항) 밑에 3개의 작은 사격형 모양으로 모듈 회로에 표시되어 있을꺼에요 각각 A0, A1, A2로 납땝이 어떤식으로 되어 있느냐에 따라서 주소가 바뀌게 됩니다. 인두가 있는분들은 주소를 변경해 볼 수 있겠죠. 그런데 별로 추천드리지 않고요 그냥 만들어져 있는 형태로 실험하세요.
하지만 2개이상을 쓸때 같은 주소인데 2개가 다른 용도로 개별적으로 출력을 하고자 할때는 한개 주소를 변경해줘야 겠죠. 변경해주면 해당주소에 해당값만 출력되게 됨으로 여러개를 같은 라인에 연결하여 사용할 수 있겠죠.
상단에 표시한 아무것도 적혀있지 않는 핀 두개가 있습니다. 거기 핀은 A5, A4라고 참고로 알아두시면 돼요. 위로 연결을 하던 아래로 연결을 하던 동일하니깐 아무곳이나 연결하세요.
LiquidCrystal_I2C lcd(0x3F,16,2); // 0x27 or 0x3F
이전 실험해서는 LiquidCrystal(rs, enable, d4, d5, d6, d7) 함수만 사용하였지만 LiquidCrystal_I2C클래스에는 생성자 함수 인자가 주소랑 가로x세로 값을 던져 줍니다. LiquidCrystal 클래스처럼 함수 선택장애는 없겠죠. 그외 함수들은 대충 비슷함으로 생략합니다.
설계는 이전 LCD16x2 (LiquidCrystal) 제어(아두이노) 소스랑 동일합니다. 동일한 형태로 진행했습니다.
혹시 함수를 자세히 보고 싶으시다면 https://github.com/marcoschwartz/LiquidCrystal_I2C 가셔서 LiquidCrystal_I2C.h 파일을 살펴보세요. 그리고 함수 내부동작을 자세히 보기 위해서는 LiquidCrystal_I2C.cpp 파일을 열어보시면 됩니다.
#include
#include
LiquidCrystal_I2C lcd(0x3F,16,2); // 0x27 or 0x3F
void setup()
{
lcd.init(); //초기화
lcd.backlight(); //배경불켜기
lcd.setCursor(0, 0);
lcd.print("Hello World");
delay(1000);
lcd.clear();
}
void loop() {
lcd.setCursor(0, 1);
lcd.print("COUNT : ");
for(int i=0;i<10;i++){
lcd.setCursor(9, 1);
lcd.print(i);
delay(1000);
}
}
우선 LiquidCrystal_I2C 라이브러리를 사용하기 위해서는 아두이노 IDE에 라이브러리로 등록해 줘야 합니다. 나중에 다른 부품을 사용할때도 이 과정을 계속 수행해야 하기 때문에 잘 알아 두세요.
라이브러리 관리를 누르고 검색어로 LiquidCrystal_I2C를 치시면 설치가능한 라이브러리 파일들이 나타납니다. 이렇게 설치해도 되고요 구글링하셔서 해당 라이브러리파일을 다운 받은 후 .zip 라이브러리추가하시면 됩니다. 그러면 파일->예제 열기가 있는데 추가되어 있을꺼에요. 그 예제로 실험하셔도 됩니다.
제가 RaspberryPi3에 아두이노 IED를 설치해서 아두이노를 원격으로 실험하고 있는데요. 문제는 라이브러리 관리 항목이 없어서 일일히 다운 받아야 하는게 귀찮더군요.
구글 검색을 통해 해당 라이브러리 파일이 있는 GitHub 경로를 찾아야 합니다.
이렇게 페이지에 들어가면 Clone or download를 클릭하시면 경로가 나오고 그걸 복사를 합니다. 그리고 라이브러리파일을 저장할 디렉토리를 만든 후 그 위치에서 다운받습니다.
git clone https://github.com/marcoschwartz/LiquidCrystal_I2C.git
그리고 나서 아두이노 IED에서 Add Libray... 를 눌러 다운받았던 경로의 라이브러리파일을 등록해야 사용할 수 있습니다.
파일->예제 누르니 3개의 샘풀 예제가 등록되어 있네요. HelloWorld 예제로 실험하시거나 아니면 위 코딩으로 정상적으로 출력되는지 복사하셔서 실험하시면 됩니다.
동영상 결과는 간단히 실제 결과만 출력되는 걸 보여줍니다. 여기에 코딩된 것은 실행 시키고 달려가서 아두이노우노가 있는 위치까지 가서 촬영을 해야 했기 때문에 "Hellow World"의 출력 메시지를 최대한 딜레이 시간을 준 코딩으로 촬영 했네요.
오늘은 가상시뮬레이터에서는 실험 할 수 없습니다. 어제 LCD 16x2 로 출력은 가능했지만 실제 LCD 16x2 I2C가 가상시뮬레이터에는 없기 때문에 아쉽게도 오늘 실험은 실제 아두이노 부품이 있는분만 가능할 듯 싶네요.
대충 이런식으로 제어를 한다는 것만 보여 드렸으며 자세한 함수 설명은 생략했습니다. 계속 가상시뮬레이터 실험을 주된 실험으로 이루어지기 때문에 가상시뮬레이터에만 초점을 두겠습니다.
이제 LCD 16x2 로 출력을 할 수 있게 되면은 측정센서 부품을 사용할때 그 결과를 LCD 16x2로 출력시키면 좀 더 재미 있겠죠.