아두이노

I2C OLED 디스플레이 출력하기 – SSD1306 & U8g2 라이브러리 완전 활용법

게임교수 2025. 4. 21. 07:53
반응형

I2C OLED 디스플레이 출력하기 – SSD1306 & U8g2 라이브러리 완전 활용법

SSD1306 I2C OLED 디스플레이를 아두이노에 연결하여 텍스트와 그래픽을 출력하는 과정을 설명한 인포그래픽. 회로도, U8g2 설정 흐름, 텍스트 출력 결과 등이 시각적으로 정리되어 있음. 출처: ythouse.tistory.com

작고 가벼우며 전력 소모도 적은 OLED 디스플레이는 아두이노 사용자에게 매우 유용한 출력 장치입니다. 특히 0.96인치 SSD1306 I2C OLED 모듈은 저렴하면서도 활용도가 높아 센서값 출력, UI 시각화, 메시지 알림 등에 널리 쓰입니다.

이번 글에서는 SSD1306 OLED 모듈을 아두이노와 I2C 방식으로 연결하고, U8g2 라이브러리를 이용해 다양한 텍스트와 그래픽을 출력하는 과정을 실전 위주로 상세히 다룹니다.


📦 1. 준비물

  • 아두이노 Uno 또는 Nano
  • 0.96인치 OLED 디스플레이 (SSD1306, I2C 방식)
  • 점퍼 케이블
  • Arduino IDE
  • U8g2 라이브러리

🔌 2. 회로 연결 방법

이 OLED 모듈은 I2C 통신을 사용하므로 총 4핀만 연결하면 됩니다.

OLED 핀 아두이노 연결

VCC 5V
GND GND
SCL A5
SDA A4

📌 Mega 보드 사용 시 SCL/SDA는 20번, 21번 핀입니다.


📥 3. U8g2 라이브러리 설치

U8g2는 폰트, 한글, 다양한 그래픽까지 지원하는 강력한 OLED 라이브러리입니다.

  1. Arduino IDE 실행
  2. 상단 메뉴 → [스케치] → [라이브러리 포함하기] → [라이브러리 관리]
  3. "U8g2" 검색 → "U8g2 by olikraus" 설치

💻 4. 기본 텍스트 출력 예제 코드

#include <Wire.h>
#include <U8g2lib.h>

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);

void setup() {
  u8g2.begin();
}

void loop() {
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_ncenB08_tr);
  u8g2.drawStr(10, 30, "Hello, OLED!");
  u8g2.sendBuffer();
  delay(1000);
}

이 코드는 OLED에 "Hello, OLED!"를 표시하는 기본 예제입니다.


🎨 5. 다양한 그래픽 출력

U8g2는 텍스트뿐 아니라 박스, 원, 프레임 등 다양한 그래픽 그리기도 지원합니다.

u8g2.drawBox(5, 5, 30, 10);       // 사각형
u8g2.drawCircle(60, 30, 10);      // 원
u8g2.drawFrame(10, 40, 50, 20);   // 테두리

한글 출력도 지원하며 폰트 설정만 바꾸면 됩니다:

u8g2.setFont(u8g2_font_unifont_t_korean);

📌 RAM 사용량이 늘어날 수 있으니, 코드 최적화 필요


🔧 6. 실전 예제: 센서 데이터 시각화

#include <DHT.h>
#include <U8g2lib.h>

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);

void setup() {
  dht.begin();
  u8g2.begin();
}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_ncenB08_tr);

  u8g2.setCursor(0, 20);
  u8g2.print("Temp: "); u8g2.print(t); u8g2.print(" C");
  u8g2.setCursor(0, 40);
  u8g2.print("Humi: "); u8g2.print(h); u8g2.print(" %");

  u8g2.sendBuffer();
  delay(2000);
}

이 예제는 온도, 습도 데이터를 2초 간격으로 OLED에 출력합니다.


📊 7. 활용 아이디어

  • 실시간 데이터 모니터링 (DHT11, MQ2, 초음파 등)
  • 미니 UI 만들기 (메뉴 전환, 선택 항목 출력)
  • 상태 알림 (WiFi 연결 상태, 배터리 잔량 등)
  • 시계, 타이머, 알람 인터페이스

✅ 8. 마무리하며

I2C 방식의 SSD1306 OLED 디스플레이는 간단한 회로 연결과 강력한 라이브러리 덕분에 매우 활용도 높은 출력 장치입니다. U8g2는 폰트, 그래픽, 한글까지 다양한 표현이 가능해 초보자에게도 적극 추천할 수 있습니다.

앞으로 센서값 그래프화, 터치 UI 대응 등 고급 응용 예제도 다뤄보겠습니다. 댓글이나 메일로 원하는 기능도 제안해 주세요!

📌 출처: ythouse.tistory.com

반응형