아두이노 시스템의 모니터 역할을 수행하는 디스플레이 모듈(Display Module) 제어 기법을 학습합니다.
1. 디스플레이 주요 용어 사전 (Glossary)
- Character LCD: 정해진 규격의 텍스트 글자(예: 16열 2행)만 전용으로 표시하는 LCD입니다.
- I2C Serial Interface Adapter: LCD의 16개 복잡한 핀을 단 2개의 I2C 핀(SDA, SCL)으로 변환해주는 초소형 보드(PCF8574 칩 사용)입니다.
- OLED (Organic Light Emitting Diode): 자발광 유기 발광 다이오드로, 백라이트 없이 대비가 뛰어나고 전력 소비가 적은 정밀 그래픽 디스플레이입니다.
- Frame Buffer (프레임 버퍼): OLED에 표시할 전체 그래픽 화면의 비트맵 데이터를 렌더링하기 위해 SRAM에 마련하는 가상 메모리 공간입니다.
2. I2C Character LCD (16x2) 실전 사용법
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// I2C 주소 0x27 (모듈에 따라 0x3F일 수 있음), 16열 2행 설정
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init(); // LCD 초기화
lcd.backlight(); // 백라이트 LED ON
lcd.setCursor(0, 0); // (열, 행) 커서 위치 0, 0 지정
lcd.print("DAVHAVE EDU HUB");
lcd.setCursor(0, 1);
lcd.print("Arduino Ch06 OK!");
}
void loop() {
// 1초마다 업타임(초) 업데이트
lcd.setCursor(12, 1);
lcd.print(millis() / 1000);
}
3. 0.96인치 I2C OLED (SSD1306) 그래픽 렌더링
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1);
void setup() {
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
for(;;); // OLED 시작 실패 시 무한 루프
}
display.clearDisplay(); // 프레임 버퍼 비우기
// 도형 그리기
display.drawRect(0, 0, 128, 64, WHITE); // 테두리 사각형
display.fillCircle(30, 32, 15, WHITE); // 채워진 원
// 글자 출력
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(60, 25);
display.println("DAVHAVE");
display.display(); // 실제 OLED 화면으로 렌더링 갱신!
}
void loop() {}
4. 자주 묻는 질문 (Q&A)
Q. OLED 라이브러리를 쓰니까 "Not enough memory" 컴파일 경고가 떠요.
A. SSD1306 OLED 라이브러리는 $128 \times 64$ 비트맵 프레임 버퍼를 위해 아두이노 SRAM 메모리의 약 1KB(전체 2KB의 50%)를 차지합니다. 다른 변수 사용을 줄이거나 Serial.println(F("문자열")) 처럼 F() 매크로를 사용하여 문자열을 플래시 메모리에 배치하세요.