아두이노 우노 R4 SSD1309 OLED 디스플레이 128x64 | 2.42인치 I2C OLED 가이드
OLED(유기 발광 다이오드) 디스플레이는 자체 발광 픽셀을 특징으로 하며 진정한 검은색, 우수한 명암비, 모든 방향에서의 탁월한 시야각을 제공합니다 — 기존 LCD 기술에 비해 상당한 이점을 제공합니다. SSD1309 드라이버 칩은 I2C 통신을 사용하여 2.42인치(2.4인치로도 표기됨) 128×64 단색 OLED 모듈을 구동합니다.

이 실습 가이드는 DIYables_OLED_SSD1309 라이브러리를 통해 SSD1309 OLED 128×64를 Arduino Uno R4 보드와 인터페이스하는 방법을 안내합니다. 다음을 배울 수 있습니다:
- I2C 버스를 사용하여 2.42인치 SSD1309 OLED를 Arduino Uno R4에 배선하기
- 화면에 텍스트 문자열과 숫자 값 표시하기
- 텍스트를 가로 및 세로 중앙에 배치하기
- 기하 도형 렌더링(선, 사각형, 원, 삼각형, 둥근 모양)
- 단색 비트맵 그래픽 표시하기
- 여러 방향으로 하드웨어 스크롤 활성화하기
- 디스플레이 밝기 및 대비 수준 제어하기
- Adafruit GFX 폰트 라이브러리에서 사용자 정의 글꼴 통합하기
필요한 하드웨어
| 1 | × | Arduino Uno R4 WiFi | 쿠팡 | 아마존 | |
| 1 | × | Arduino Uno R4 Minima (또는) | 쿠팡 | 아마존 | |
| 1 | × | USB 케이블 타입-A to 타입-C (USB-A PC용) | 쿠팡 | 아마존 | |
| 1 | × | USB 케이블 타입-C to 타입-C (USB-C PC용) | 아마존 | |
| 1 | × | SSD1309 I2C OLED Display 128x64 (2.42 inch) | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노 R4용 스크루 터미널 블록 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) Sensors/Servo Expansion Shield for Arduino UNO R4 | 아마존 | |
| 1 | × | (추천) 아두이노 우노 R4용 브레드보드 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노 R4용 케이스 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노 R4용 전원 분배기 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 | 아마존 |
SSD1309 2.42인치 OLED 디스플레이에 대하여
SSD1309는 128×64 픽셀 OLED 매트릭스를 위해 설계된 전용 CMOS 드라이버 IC입니다. 레지스터 세트는 널리 사용되는 SSD1306과 호환성을 유지하므로 약간의 조정으로 코드를 재사용할 수 있습니다. 주목할 만한 하드웨어 차이점:
- 외부 전원 요구 사항 — SSD1306의 통합 차지 펌프와 달리 SSD1309는 외부 VCC 공급에 의존합니다. 그러나 시중에서 판매되는 브레이크아웃 보드(2.42인치 및 2.4인치 변형 포함)에는 온보드 부스트 컨버터가 내장되어 있어 사용 시 이 차이가 투명하게 처리됩니다.
- 확장된 전압 범위 — SSD1309는 최대 16V VCC 입력을 처리하는 반면, SSD1306은 약 4.2V로 제한됩니다.
2.42인치(2.4인치) OLED 모듈은 일반적으로 SSD1309 컨트롤러를 사용하며 I2C 프로토콜을 통해 통신하는 128×64 해상도 디스플레이를 제공합니다. 디스플레이 색상(흰색, 파란색, 노란색, 녹색 또는 이중 색상 영역)은 물리적 OLED 기판에 따라 달라지며 소프트웨어 명령으로는 변경할 수 없습니다.
이 튜토리얼은 I2C 버스를 통해 디스플레이와 인터페이스하며, 두 개의 신호선(SDA와 SCL)만 필요하고 추가 I2C 주변 장치와 버스를 공유할 수 있습니다.
SSD1309 OLED 핀아웃(I2C 모듈)
표준 2.42인치 SSD1309 I2C OLED 모듈에는 네 개의 연결 핀이 있습니다:
- GND — Arduino Uno R4 그라운드 기준에 연결합니다.
- VCC — 전원 공급 입력. Arduino Uno R4의 5V 출력(또는 모듈이 지원하는 경우 3.3V)에 연결합니다.
- SCL — I2C 클록 신호선.
- SDA — I2C 데이터 신호선.

※ 주의:
- 핀 배열은 제조업체마다 다릅니다. 연결하기 전에 특정 모듈의 실크스크린 라벨을 항상 확인하세요.
- 이 가이드는 DIYables의 2.42인치 SSD1309 OLED 디스플레이로 검증되었습니다. 다른 SSD1309 기반 2.4/2.42인치 모듈도 동일하게 작동해야 합니다.
배선도 — Arduino Uno R4 & SSD1309 OLED 128×64
- Arduino Uno R4와 2.42인치 SSD1309 OLED 128×64 사이의 회로도 연결

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
- Arduino Uno R4와 SSD1309 OLED 128×64 사이의 실제 배선 사진

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
Arduino Uno R4와 기타 부품에 전원을 공급하는 가장 효과적인 방법을 확인하시려면, 아래 링크를 참조하세요: 아두이노 우노 R4 전원 공급 방법.
Arduino Uno R4는 기존 Uno와 동일한 I2C 핀 위치를 사용합니다. 연결 세부 사항:
| OLED 모듈 | Arduino Uno R4 |
|---|---|
| Vin | 5V |
| GND | GND |
| SDA | A4 (또는 SDA 핀) |
| SCL | A5 (또는 SCL 핀) |
시작하기 — Arduino Uno R4에서 SSD1309 OLED 사용
1단계: DIYables_OLED_SSD1309 라이브러리 설치
- Arduino IDE를 실행하고 왼쪽 사이드바에서 Libraries 아이콘을 클릭합니다.
- 검색 필드에 "DIYables_OLED_SSD1309"를 입력하고 DIYables에서 만든 라이브러리를 찾습니다.
- Install 버튼을 클릭합니다.

- IDE에서 필수 의존성(Adafruit GFX Library)을 설치하라는 메시지가 표시됩니다. Install All을 클릭합니다.

2단계: 기본 프로그래밍 구조
모든 SSD1309 스케치는 다음과 같은 일관된 구조를 따릅니다: 헤더 포함, 디스플레이 객체 인스턴스화, setup()에서 초기화, 프레임 버퍼에 콘텐츠 그리기, 그 다음 display()를 사용하여 버퍼를 화면으로 전송.
- 필요한 헤더 포함:
- 화면 크기 정의(2.42인치 모듈의 경우 128×64):
- 디스플레이 객체 인스턴스화(리셋 핀이 연결되지 않은 경우 -1 사용):
- setup() 내에서 디스플레이 초기화:
- 초기화 후 드로잉 함수(clearDisplay(), drawPixel(), print() 등)를 호출한 다음 oled.display()를 호출하여 화면을 새로 고칩니다.
※ 주의:
이 가이드의 모든 코드 예제는 SSD1309 OLED 128×64(2.42인치)를 대상으로 하며 Arduino Uno R4에서 DIYables_OLED_SSD1309 라이브러리를 사용합니다.
Arduino Uno R4 코드 — SSD1309 OLED에 Hello World 표시
가장 간단한 데모: 여러 크기로 텍스트를 표시합니다.
Arduino Uno R4 코드 — SSD1309 OLED에 텍스트 표시
이 예제는 고급 텍스트 기능을 보여줍니다 — 가변 크기, 숫자 서식, RAM 절약을 위한 F() 매크로.
자주 사용하는 디스플레이 함수 레퍼런스
DIYables 라이브러리를 통한 자주 사용하는 SSD1309 OLED 함수의 빠른 레퍼런스:
- oled.clearDisplay() — 프레임 버퍼 지우기(모든 픽셀 끄기).
- oled.display() — 버퍼를 OLED로 전송하여 변경 사항 표시.
- oled.drawPixel(x, y, color) — 단일 픽셀 설정 또는 지우기.
- oled.setTextSize(n) — 폰트를 *n* 배율로 스케일(1 = 6×8, 2 = 12×16, …, 최대 8).
- oled.setCursor(x, y) — 픽셀 좌표 *(x, y)*에 텍스트 커서 배치.
- oled.setTextColor(SSD1309_PIXEL_ON) — 텍스트 전경만(투명 배경).
- oled.setTextColor(SSD1309_PIXEL_OFF, SSD1309_PIXEL_ON) — 명시적 배경 색상이 있는 텍스트.
- oled.println("message") — 문자열을 출력하고 다음 줄로 이동.
- oled.println(number) — 10진수 형식으로 정수 출력.
- oled.println(number, HEX) — 16진수 형식으로 정수 출력.
- oled.startscrollright(start, stop) — *start*와 *stop* 페이지 사이를 하드웨어로 오른쪽 스크롤.
- oled.startscrollleft(start, stop) — 하드웨어로 왼쪽 스크롤.
- oled.startscrolldiagright(start, stop) — 하드웨어로 대각선 오른쪽 스크롤.
- oled.startscrolldiagleft(start, stop) — 하드웨어로 대각선 왼쪽 스크롤.
- oled.stopscroll() — 활성화된 하드웨어 스크롤 중지.
- oled.setContrast(value) — 디스플레이 밝기 조정(0~255).
- oled.dim(true/false) — 디스플레이를 최소 밝기로 빠르게 어둡게 하거나 이전 대비로 복원.
- oled.invertDisplay(true/false) — 하드웨어 수준의 색상 반전(켜진 픽셀 ↔ 꺼진 픽셀).
SSD1309 OLED에서 텍스트를 세로 및 가로 중앙에 배치하는 방법
Arduino Uno R4 코드 — SSD1309 OLED에 도형 그리기
DIYables_OLED_SSD1309 라이브러리는 Adafruit_GFX를 상속하여 완전한 도형 그리기 기능을 제공합니다: 픽셀, 선, 사각형, 채워진 사각형, 원, 채워진 원, 삼각형, 채워진 삼각형, 둥근 사각형. 다음 스케치는 애니메이션 시퀀스로 모두 시연합니다.
Arduino Uno R4 코드 — SSD1309 OLED에서 하드웨어 스크롤
SSD1309에는 CPU 개입 없이 디스플레이 콘텐츠를 이동하는 하드웨어 스크롤 엔진이 포함되어 있습니다. DIYables 라이브러리는 오른쪽, 왼쪽, 대각선 오른쪽, 대각선 왼쪽의 네 가지 스크롤 모드를 제공합니다. 각각 시작 페이지와 끝 페이지 매개변수를 받습니다(페이지는 64픽셀 높이 디스플레이에서 0~7로 번호가 매겨진 8픽셀 높이의 가로 밴드입니다).
※ 주의:
스크롤을 시작하기 전에 반드시 display()를 호출하여 콘텐츠를 OLED로 전송하세요. 스크롤이 활성화된 동안 새 콘텐츠를 렌더링하지 마세요 — 먼저 stopscroll()을 호출하세요.
Arduino Uno R4 코드 — SSD1309 OLED에 비트맵 이미지 표시
SSD1309 OLED에 비트맵을 표시하려면 먼저 이미지를 C 바이트 배열로 변환해야 합니다. 이 변환을 위해 무료 image2cpp 온라인 도구를 사용하세요:
- 이미지 파일(PNG, JPG, BMP 등)을 업로드합니다.
- 캔버스 크기를 128×64(또는 더 작게)로 설정합니다.
- 출력 형식으로 Arduino code를 선택합니다.
- 생성된 배열을 스케치에 복사합니다.

아래 예제는 16×16 하트 아이콘과 전체 너비 DIYables 로고 사이를 번갈아 표시합니다:
※ 주의:
- 비트맵 크기는 화면 해상도(2.42인치 모듈의 경우 128×64)를 초과할 수 없습니다.
Arduino Uno R4 코드 — SSD1309 OLED의 대비 및 어둡게 하기
SSD1309는 256단계의 대비 수준(0~255)을 제공합니다. DIYables 라이브러리는 정밀 제어를 위한 setContrast()와 최소 밝기와 이전에 설정된 수준 사이를 빠르게 전환하기 위한 dim()을 제공합니다.
Arduino Uno R4 코드 — SSD1309 OLED의 사용자 정의 외부 폰트
Adafruit GFX 라이브러리에는 수십 개의 확장 가능한 FreeFont 글꼴(Serif, Sans, Mono — 각각 Regular, Bold, Italic, 여러 크기)이 포함되어 있습니다. 관련 헤더를 포함하고 setFont()를 호출하여 SSD1309 디스플레이에서 이들을 사용할 수 있습니다.
※ 주의:
- 외부 폰트가 활성화되면 커서 Y 좌표는 왼쪽 상단이 아닌 텍스트 기준선을 참조합니다. 이는 내장 5×7 폰트 동작과 다릅니다.
- 외부 폰트는 플래시(PROGMEM)에 저장됩니다. 기존 Uno(32KB 플래시)와 같은 메모리 제한 보드에서는 신중하게 사용하세요. Arduino Uno R4는 더 많은 메모리를 가지고 있어 더 유연하게 사용할 수 있습니다.
Arduino Uno R4에서 SSD1309 OLED 문제 해결
스케치를 업로드한 후 2.42인치 SSD1309 OLED가 빈 화면으로 남아 있는 경우 다음 진단 단계를 수행하세요:
- 연결 확인 — SDA, SCL, VCC, GND가 올바른 Arduino Uno R4 핀에 연결되어 있는지 확인합니다.
- 드라이버 칩 확인 — 이 라이브러리는 SSD1309용으로 설계되었습니다. 모듈이 다른 컨트롤러(예: SH1106)를 사용하는 경우 올바르게 응답하지 않습니다.
- I2C 주소 확인 — 대부분의 SSD1309 모듈의 기본 주소는 0x3C이지만 일부는 0x3D를 사용합니다. 아래 I2C 스캐너 스케치를 실행하여 실제 주소를 감지합니다:
SSD1309가 감지될 때 예상되는 시리얼 모니터 출력:
- display()가 호출되었는지 확인 — SSD1309는 프레임 버퍼를 사용합니다. 드로잉 함수는 RAM의 버퍼만 수정합니다. oled.display()를 호출해야 화면에 표시됩니다.
- 전원 공급 확인 — 2.42인치 모듈은 더 작은 OLED보다 더 많은 전류를 소비합니다. 전원 공급이 충분한 전류(전체 밝기에서 일반적으로 20~40mA)를 공급할 수 있는지 확인합니다.