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

Arduino Uno 로 0.96 인치 와 1.3 인치 OLED를 사용해서 문자와 비트맵 이미지 출력해 보기

by 오마이엔지니어 2017. 3. 25.
반응형

Arduino Uno 로 0.96 인치 와 1.3 인치 OLED를 사용해서 각종 문자와 비트맵 형식의 이미지를 출력해 보는 프로젝트 입니다

OLED(Organic Light Emitting Diodes)란?

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

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




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

0.96인치 와 1.3인치 OLED 모두 128 X 64 해상도의 사양이나 드라이버 칩이 틀립니다
0.96인치는 SSD1306 드라이버 칩이 장착되어 있으며 1.3인치는 SH1106 드라이버 칩이 장착되어 있습니다

SSD1306 Datasheet.pdf

SH1106 datasheet.pdf
첨부된 데이터시트를 확인해 보면 알수 있듯이 SSD1306 은 RAM 용량이 128 X 64 bit 입니다
반면 SH1106 은 RAM 용량이 132 X 64 bit 입니다
때문에 SSD1306 과 SH1106 의 프로그램은 일정부분 호환이 가능하지만 SH1106 으로 SSD1306 의 프로그램을 사용하려면
라이브러리를 (0X02) 부터 화면을 시작하도록 수정해 주어야 합니다


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

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

0.96인치 I2C OLED 화이트
1.3인치 I2C OLED 블루

브래드보드
점퍼케이블

구성 배선도

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

Adafruit-GFX-Library-master.zip

Adafruit_SSD1306-master.zip


테스트를 위해서는 첨부된 두개의 라이브러리를 모두 추가해 주어야 합니다

주의! Adafruit SSD1306 라이브러리는 128X32 로 해상도 설정이 되어있습니다 때문에 128X64 예제로 컴파일 하면 컴파일 에러가 납니다
ssd1306_128x64_i2c 예제를 사용하기 위해서는 Adafruit SSD1306 라이브러리 파일의 Adafruit_SSD1306.h 파일을 워드패드로 열어서

//   #define SSD1306_128_64
   #define SSD1306_128_32
//   #define SSD1306_96_16

파란색 부분을    #define SSD1306_128_64 로 수정해 주고 사용하면 됩니다

본 테스트에서는 사용하기 쉽고 편리한 OzOLED 라이브러리를 사용하였습니다

OzOLED(init_modified).zip

u8glib 범용 그래픽 라이브러리를 사용해서 테스트 하고자 한다면 아래 포스팅을 참고해서 진행하도록 하세요
Arduino Uno 로 0.91인치 I2C OLED 를 사용해서 문자 및 그래픽 출력해 보기

1.3인치도 마찬가지로 u8glib 범용 그래픽 라이브러리 나 Adafruit 라이브러리 를 사용해서 구동시킬수 있습니다


Adafruit-GFX-Library-master.zip

Adafruit_SH1106-master.zip


라이브러리를 첨부하였습니다
Adafruit-SH1106 예제를 실행하기 위해서는 Adafruit-GFX 라이브러리도 필요로 합니다
테스트를 위해서는 첨부된 두개의 라이브러리를 모두 추가해 주어야 합니다

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

컴파일 과 소스 업로드도 무사히 마쳤고 배선도 문제 없는데 OLED의 화면이 나오지 않거나 깨져서 나온다면
리셋버튼을 눌러주거나 보드의 전원을 제거했다가 다시 연결해 보는 과정을 반복해 보면 출력이 정상적으로 될수 있습니다

프로젝트 동영상


Arduino IDE 에서 파일--->예제--->OzOLED--->OLED_Horizontal_Addressing_Mode
순으로 클릭후 "OLED_Horizontal_Addressing_Mode" 스케치를 업로드해 줍니다



Arduino IDE 에서 파일--->예제--->OzOLED--->OLED_Bitmap_Inverse_Display
순으로 클릭후 "OLED_Bitmap_Inverse_Display" 스케치를 업로드해 줍니다



0.96인치는 원래 SSD1306 라이브러리를 사용해야 맞습니다, 하지만 Adafruit 의 SSD1306 라이브러리는 128X32 로 세팅 되어있어서
Adafruit_SSD1306.h 파일을 128X64로 수정해 주어야 하는데 수정하기 귀찮은 관계로 
그냥 SH1106 라이브러리로 테스트 해 보았습니다

(왼쪽 한칸이 밀리는 현상이 있습니다)
Arduino IDE 에서 파일--->예제--->Adafruit_SH1106--->sh1106_128x64_i2c
순으로 클릭후 "sh1106_128x64_i2c" 스케치를 업로드 해 줍니다



1.3인치는 Adafruit_SH1106 라이브러리를 사용해서 해상도에 맞게 잘 동작 시킬수 있습니다
Arduino IDE 에서 파일--->예제--->Adafruit_SH1106--->sh1106_128x64_i2c
순으로 클릭후 "sh1106_128x64_i2c" 스케치를 업로드 해 줍니다


비트맵 변환 프로그램을 사용하면 다양한 비트맵 이미지를 출력할 수도 있고 코드를 잘짜면 한글도 역시 출력이 가능하기 때문에
여러모로 다양한 프로젝트에 적합한 OLED 인것 같습니다

아두이노 나노(Arduino Nano)와는 동일한 배선 연결로 사용이 가능합니다


하지만 Arduino MEGA2560 과 연결시에는 LCD의 SCL 과 SDA 핀을 A5 , A4 핀에 연결하는것이 아니라
Arduino MEGA2560 의 SCL(21) 과 SDA(20) 핀에 연결하여 테스트해야 합니다



Google 을 통해서 공유되고 있는 OLED_I2C 라이브러리를 사용해서도 테스트를 해보았습니다

OLED_I2C.zip


09.6인치 (SSD1306)는 호환이 잘 되지만, 1.3인치 (SH1106) 와는 호환이 되지 않습니다
배선은 위의 첨부된 배선도와 동일하게 배선하면 됩니다 (라이브러리에 첨부된 예제를 테스트 해보았습니다)






SH1106 datasheet.pdf
1.4MB
Adafruit_SH1106-master.zip
0.01MB
Adafruit_SSD1306-master.zip
0.02MB
Adafruit-GFX-Library-master.zip
0.26MB
OzOLED(init_modified).zip
0.07MB
OLED_I2C.zip
0.39MB
SSD1306 Datasheet.pdf
1.79MB
반응형

댓글