본문 바로가기
Arduino(아두이노) 활용 강좌

Arduino Uno 로 0.91인치 I2C OLED 를 사용해서 문자 및 그래픽 출력해 보기

by 오마이엔지니어 2018. 1. 8.
반응형

Arduino Uno 로 0.91인치 I2C OLED (128 X 32 해상도) 를 사용해서 U8glib 범용 라이브러리와

Adafruit 라이브러리를 사용해서 문자와 그래픽 등을 출력해 보는 프로젝트 입니다

OLED(Organic Light Emitting Diodes)란?

유기발광다이오드 또는 유기EL이라고도 부르며 형광성 유기화합물에 전류가 흐르면 빛을 내는
전계 발광 현상을 이용하여 스스로 빛을 내는 '자체발광형 유기물질'을 일컫습니다

OLED의 특징
낮은 전압에서 구동이 가능하고 얇은 박형으로 만들 수 있으며
넓은 시야각과 빠른 응답속도를 갖고 있어 일반 LCD와 달리 바로 옆에서 보아도 화질이 변하지 않으며 화면에 잔상이 남지 않습니다
또한 소형 화면에서는 LCD이상의 화질과 단순한 제조공정으로 인한 유리한 가격 경쟁력을 갖습니다
휴대전화나 카오디오, 디지털카메라와 같은 소형기기의 디스플레이에 주로 사용하고 있습니다

<0.91인치 I2C OLED SSD1306 이미지>

본 테스트에서는 0.91인치 I2C타입의 128 X 32 해상도의 SSD1306 SSD1306.pdf OLED를 사용하였습니다
SPI 타입도 있으나 I2C 타입이 배선하기도 편하고 사용하기 편리해서 I2C 타입으로 진행하였습니다
SPI타입도 조금만 검색해 보면 많은 레퍼런스가 공유되고 있기때문에 어렵지 않게 테스트 해볼수 있습니다

I2C통신 방식으로 단 2개의 라인 (SCL, SDA)으로 통신할수 있으며, 3.3V & 5V 동작전압으로 사용이 가능합니다 

사용된 부품
아두이노 우노 (Italy)

0.91인치 I2C OLED 화이트
브래드보드

점퍼케이블

구성 배선도



사용된 라이브러리
0.91인치 OLED는 u8glib 범용 그래픽 라이브러리 Adafruit 라이브러리사용해서 구동시킬수 있습니다


u8glib 범용 라이브러리

U8glib.zip

전역변수 선언.txt


Adafruit 라이브러리

Adafruit-GFX-Library-master.zip

Adafruit_SSD1306-master.zip


u8glib 범용 라이브러리로 테스트 하고자 할때는 위 첨부된 U8glib 압축파일을 다운로드 받아서 설치하거나 위 링크에서 다운로드 하면 됩니다
Adafruit 라이브러리로 테스트 하고자 할때는 위 첨부된 2개의 압축파일을 다운로드 받아서 설치하거나 위 링크에서 다운로드 하면 됩니다

라이브러리 추가 방법은 Arduino IDE 설치하기 포스팅을 참조해 주세요

1번 u8glib 범용 라이브러리 사용

u8glib 범용 라이브러리를 설치 후 기본 예제인 examples 폴더의 HelloWorld 예제를 스케치 업로드 합니다

라이브러리 설치 후 Arduino IDE 에서 파일--->예제--->U8glib--->examples--->HelloWorld 순으로 클릭

그러면 'u8g' was not declared in this scope 라는 에러 메세지가 뜨면서 컴파일 에러가 날것 입니다 
이는 예제코드에 u8g 라는 변수가 선언되지 않았기 때문에 나오는 에러 메세지입니다

u8g 라이브러리는 범용 라이브러리로 SSD1306 뿐만 아니라 상당히 다양한 드라이버 콘트롤러를 지원하기 때문에
예제코드에 드라이버 콘트롤러에 관한 변수가 따로 선언되어 있지 않습니다

예제코드마다 사용하는 LED 드라이버에 맞는 u8g 변수를 선언해 주는 내용을 추가해 주어야 합니다

https://code.google.com/p/u8glib/wiki/device
위 링크를 참조해서 사용하는 OLED 드라이버 컨트롤러 이름해상도 그리고 생성자 를 확인해야 합니다
SSD1306 드라이버를 사용하고 해상도는 128 X 32 이고 I2C 타입이기 때문에 디바이스 이름은  
u8g_dev_ssd1306_128x32_i2c 가 되고 생성자는

U8GLIB_SSD1306_128X32(U8G_I2C_OPT_NONE) 가 됩니다

생성자를 확인했으니 예제코드 전역변수 선언부에

U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);
를 추가해 주면 됩니다

전역변수가 무엇인지 잘 모른다면 위 파란색 글씨 링크를 참고 하도록 하며, 그래도 잘 모르겠다면 실행하고자 하는 예제코드의

U8glib.h 라이브러리를 불러오는 코드 #include "U8glib.h" 바로 아래 부분에

U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); 추가해 주면 됩니다 (하단 프로젝트 동영상 마지막 부분 참조)
그리고 나서 스케치 업로드를 하면 정상적으로 컴파일 에러 없이 스케치 업로드가 됩니다

좀 번거롭기도 하고 용량이 커서 스케치 업로드하는데 시간도 좀 오래 걸리지만 u8g 라이브러리는 그만큼 다양한 드라이버를 지원하기 때문에 막강합니다


프로젝트 동영상 - u8glib 범용 라이브러리 사용


2번 Adafruit 라이브러리 사용
Adafruit 라이브러리로 테스트 하고자 할때는 위 첨부된 Adafruit-GFX-Library-masterAdafruit_SSD1306-master

2개의 압축파일을 다운로드 받아서 설치합니다
라이브러리 설치 후 Arduino IDE 에서 파일--->예제--->Adafruit_SSD1306--->examples--->ssd1306_128x32_i2c 순으로 클릭합니다

U8glib 라이브러리에 비하면 간단하게 테스트 해볼수 있습니다

프로젝트 동영상 - Adafruit 라이브러리 사용





0.96인치 I2C OLED 도 동일하게 전역변수 선언 후
U8glib 라이브러리로 테스트 할수 있습니다

0.96 인치 I2C OLED는 128X64 해상도 이므로 아래와 같이 전역변수를 수정해서 추가해 줍니다
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);


구성 배선도


u8glib 범용 라이브러리를 설치 후 기본 예제인 examples 폴더의 HelloWorld 예제를 스케치 업로드
합니다

라이브러리 설치 후 Arduino IDE 에서 파일--->예제--->U8glib--->examples--->HelloWorld 순으로 클릭

예제코드 전역변수 선언부에
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
를 추가해 주면 됩니다

전역변수가 무엇인지 잘 모른다면 위 파란색 글씨 링크를 참고 하도록 하며, 그래도 잘 모르겠다면 실행하고자 하는 예제코드의

U8glib.h 라이브러리를 불러오는 코드 #include "U8glib.h" 바로 아래 부분에

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); 추가해 주면 됩니다 (하단 프로젝트 동영상 마지막 부분 참조)
그리고 나서 스케치 업로드를 하면 정상적으로 컴파일 에러 없이 스케치 업로드가 됩니다


프로젝트 동영상 - u8glib 범용 라이브러리 사용


Adafruit-GFX-Library-master.zip
0.26MB
U8glib.zip
1.05MB
SSD1306.pdf
1.79MB
전역변수 선언.txt
0.0MB
Adafruit_SSD1306-master.zip
0.02MB
반응형

댓글