아두이노 나노 ESP32 SSD1309 OLED 디스플레이 128x64 | 2.42인치 I2C OLED 튜토리얼
이 튜토리얼은 I2C 인터페이스와 DIYables_OLED_SSD1309 라이브러리를 사용하여 Arduino Nano ESP32에서 SSD1309 OLED 128×64(2.42인치 / 2.4인치)를 사용하는 방법에 대한 안내를 제공합니다. 자세히, 다음을 배울 것입니다:
- SSD1309 OLED 2.42인치를 I2C를 통해 Arduino Nano ESP32에 연결하는 방법
- SSD1309 OLED에 텍스트와 숫자를 표시하도록 Arduino Nano ESP32를 프로그래밍하는 방법
- SSD1309 OLED에서 텍스트를 수직 및 수평으로 가운데 정렬하는 방법
- SSD1309 OLED에 기하학적 도형을 그리는 방법
- SSD1309 OLED에 단색 비트맵 이미지를 표시하는 방법
- 네 방향 하드웨어 스크롤을 사용하는 방법
- 대비를 조정하고 디스플레이를 어둡게 하는 방법
- Adafruit GFX 폰트 컬렉션에서 커스텀 폰트를 사용하는 방법

준비물
| 1 | × | 아두이노 나노 ESP32 | 쿠팡 | 아마존 | |
| 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 | × | (추천) 아두이노 나노용 스크루 터미널 확장 보드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 나노용 브레이크아웃 확장 보드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 나노 ESP32용 전원 분배기 | 쿠팡 | 아마존 |
SSD1309 2.42인치 OLED 디스플레이에 대하여
SSD1309는 128×64 도트 매트릭스 패널용 단일 칩 CMOS OLED 드라이버 IC입니다. SSD1306과 레지스터 호환이 되므로, 많은 기존 코드 예제를 최소한의 수정으로 포팅할 수 있습니다. 주요 하드웨어 세부 사항:
- 내장 차지 펌프 없음 — SSD1309는 외부 VCC 레일이 필요하지만, 거의 모든 브레이크아웃 보드(2.42인치 모듈 포함)는 온보드 부스트 컨버터와 함께 제공되어 사용자에게 투명하게 처리됩니다.
- 높은 전압 허용 범위 — SSD1309는 최대 16V VCC를 허용하며, SSD1306의 약 4.2V 제한에 비해 높습니다.
I2C 통신은 두 개의 신호선(SDA 및 SCL)만 필요하며, 버스는 다른 I2C 주변 장치와 동시에 공유할 수 있습니다.
SSD1309 OLED 핀아웃 (I2C 모듈)
- GND 핀: Arduino Nano ESP32의 GND에 연결합니다.
- VCC 핀: 디스플레이의 전원 공급. 3.3V에 연결합니다.
- SCL 핀: I2C용 직렬 클록. A5에 연결합니다.
- SDA 핀: I2C용 직렬 데이터. A4에 연결합니다.

※ 주의:
- OLED 모듈의 핀 레이아웃은 제조사에 따라 다를 수 있습니다. 항상 모듈 자체에 인쇄된 레이블을 사용하세요.
- 이 튜토리얼은 DIYables의 SSD1309 I2C OLED를 사용하며, 테스트되고 작동이 확인되었습니다.
배선 다이어그램
- Arduino Nano ESP32와 SSD1309 OLED 128x64 간의 배선 다이어그램

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
Arduino Nano ESP32와 SSD1309 OLED 디스플레이 간의 배선 표:
| OLED Module | Arduino Nano ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | A4 |
| SCL | A5 |
SSD1309 OLED를 위한 Arduino Nano ESP32 프로그래밍 방법
DIYables_OLED_SSD1309 라이브러리 설치
- Arduino IDE 왼쪽 바의 Libraries 아이콘을 클릭합니다.
- DIYables_OLED_SSD1309를 검색한 다음, DIYables의 DIYables OLED SSD1309 라이브러리를 찾습니다.
- Install을 클릭하여 DIYables_OLED_SSD1309 라이브러리를 설치합니다.

- 라이브러리 의존성 설치 여부를 묻는 메시지가 표시됩니다.
- Install All을 클릭하여 필요한 모든 의존성을 설치합니다.

프로그래밍 단계
- 필요한 라이브러리 포함
- 화면 크기 정의
- 디스플레이 객체 선언
- setup()에서 OLED 초기화
- 콘텐츠 표시
Arduino Nano ESP32 코드 — SSD1309 OLED 헬로 월드
가장 간단한 시작점: 다양한 크기의 텍스트 몇 줄을 출력합니다.
Arduino Nano ESP32 코드 — SSD1309 OLED에 텍스트 표시
다음 예제는 더 많은 텍스트 기능을 보여줍니다 — 다양한 크기, 숫자 형식, RAM 절약을 위한 F() 매크로.
유용한 디스플레이 함수 참조
- oled.clearDisplay() — 프레임 버퍼를 지웁니다(모든 픽셀 끔).
- oled.display() — 버퍼를 OLED로 전송하여 변경 사항이 보이도록 합니다.
- oled.drawPixel(x, y, color) — 개별 픽셀을 설정하거나 지웁니다.
- oled.setTextSize(n) — 폰트를 *n* 배 크기로 조정합니다(1 = 6×8, 2 = 12×16, …).
- 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에서 텍스트를 수직 및 수평으로 가운데 정렬하는 방법
OLED에서 수직/수평 가운데 정렬하는 방법을 참조하세요.
Arduino Nano ESP32 코드 — SSD1309 OLED에 도형 그리기
DIYables_OLED_SSD1309 라이브러리는 Adafruit_GFX를 확장하여 픽셀, 선, 사각형, 채워진 사각형, 원, 채워진 원, 삼각형, 채워진 삼각형, 둥근 사각형 등 도형 그리기 기본 기능의 전체 세트를 제공합니다.
Arduino Nano ESP32 코드 — SSD1309 OLED 하드웨어 스크롤
SSD1309는 CPU 부하 없이 디스플레이 내용을 이동시키는 하드웨어 스크롤 엔진을 내장하고 있습니다. 네 가지 스크롤 방향이 가능합니다: 오른쪽, 왼쪽, 오른쪽 대각선, 왼쪽 대각선. 각 함수는 시작 및 종료 페이지 번호를 받습니다(페이지는 0–7로 번호가 매겨진 8픽셀 높이의 스트립입니다).
※ 주의:
스크롤을 시작하기 전에 display()를 호출하여 내용을 OLED로 전송하세요. 새 내용을 그리기 전에 stopscroll()로 스크롤을 중지하세요.
Arduino Nano ESP32 코드 — SSD1309 OLED에 비트맵 이미지 표시
비트맵을 표시하려면 먼저 이미지를 C 바이트 배열로 변환해야 합니다. 무료 image2cpp 온라인 도구를 사용하세요:
- 이미지(PNG, JPG, BMP 등)를 업로드합니다.
- 캔버스 크기를 128×64(또는 더 작게)로 설정합니다.
- 출력 형식으로 Arduino 코드를 선택합니다.
- 생성된 배열을 스케치에 복사합니다.

※ 주의:
- 비트맵 크기는 이 모듈의 경우 128×64를 초과하면 안 됩니다.
Arduino Nano ESP32 코드 — SSD1309 OLED 대비 및 밝기 조절
SSD1309는 256단계의 대비 수준(0–255)을 지원합니다. 미세한 제어를 위해 setContrast()를 사용하고, 최소 밝기와 이전에 설정된 수준 간에 빠르게 전환하려면 dim()을 사용합니다.
Arduino Nano ESP32 코드 — SSD1309 OLED 커스텀 외부 폰트
Adafruit GFX 라이브러리에는 수십 가지의 확장 가능한 FreeFont 서체(Serif, Sans, Mono — 일반, 굵게, 이탤릭체, 네 가지 크기)가 포함되어 있습니다. 해당 헤더를 포함하고 setFont()를 호출하여 활성화합니다.
※ 주의:
- 외부 폰트가 활성화되면, 커서 Y 좌표는 왼쪽 상단 모서리가 아닌 텍스트 기준선을 참조합니다.
- 외부 폰트는 플래시(PROGMEM)에 저장됩니다. Arduino Nano ESP32 플래시 예산 내에서 유지하도록 신중하게 사용하세요.
Arduino Nano ESP32에서 SSD1309 OLED 문제 해결
스케치를 업로드한 후 2.42인치 SSD1309 OLED에 아무것도 표시되지 않으면 다음 항목을 확인하세요:
- 배선 확인 — SDA→A4, SCL→A5, VCC→3.3V, GND→GND가 모두 올바르게 연결되어 있는지 확인합니다.
- 드라이버 칩 확인 — 이 라이브러리는 SSD1309를 대상으로 합니다. 다른 컨트롤러(예: SH1106)가 있는 모듈은 올바르게 응답하지 않습니다.
- I2C 주소 확인 — 대부분의 SSD1309 모듈은 기본적으로 0x3C를 사용하지만 일부는 0x3D를 사용합니다. 아래 I2C 스캐너 스케치를 사용하여 실제 주소를 찾으세요:
SSD1309가 감지될 때 예상되는 시리얼 모니터 출력:
- display() 호출 확인 — SSD1309는 프레임 버퍼를 사용합니다. 그리기 함수는 RAM만 수정합니다. oled.display()를 호출하기 전까지 화면에 아무것도 표시되지 않습니다.
- 전원 공급 확인 — 2.42인치 모듈은 더 작은 OLED보다 더 많은 전류를 소비합니다. 3.3V가 충분한 전류(일반적으로 전체 밝기에서 20–40 mA)를 공급할 수 있는지 확인합니다.