13주차_참고 : 이미지를 OLED에 출력 - dhryu60/SmartDevice_2025-1 GitHub Wiki

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
  • I2C 통신을 위한 Wire 라이브러리, 그래픽 처리를 위한 Adafruit_GFX, OLED 제어를 위한 Adafruit_SSD1306 라이브러리를 포함한다.
#include "images.h"  // 이미지 파일을 포함하는 헤더 파일
  • images.h는 미리 준비한 이미지 데이터를 C 배열 형태로 포함하는 헤더 파일이다. 여기에는 VeryGood, Good, Bad, VeryBad 배열이 정의되어 있다.
#define SCREEN_WIDTH 128  // OLED 디스플레이의 너비 (픽셀 단위)
#define SCREEN_HEIGHT 32  // OLED 디스플레이의 높이 (픽셀 단위)
  • OLED 디스플레이의 해상도를 정의한다. 이 프로젝트에서는 128x32 OLED를 사용한다.
#define OLED_RESET -1  // 리셋 핀 번호 (아두이노 리셋 핀을 공유하는 경우 -1)
#define SCREEN_ADDRESS 0x3C  // I2C 주소: 128x64는 0x3D, 128x32는 0x3C
  • OLED 디스플레이의 I2C 통신 주소와 리셋 핀을 설정한다.
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
  • 지정한 해상도와 Wire(I2C) 객체, 리셋 핀으로 OLED 디스플레이 객체 display를 생성한다.

setup() 함수

void setup() {
  Serial.begin(115200);
  • 시리얼 모니터를 위한 통신 속도를 115200bps로 설정한다.
  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;)
      ;  // OLED 초기화 실패 시, 무한 루프로 진행 정지
  }
  • OLED 디스플레이를 초기화한다. SSD1306_SWITCHCAPVCC는 내부 3.3V 전원으로 공급하고, 지정된 I2C 주소로 통신한다. 초기화 실패 시 시리얼 모니터에 에러 메시지를 출력하고 무한 루프에 빠지게 한다.
  display.display();
  delay(2000);  // 2초간 Adafruit 스플래시 화면 표시
  • 초기 화면(Adafruit 로고 등)을 표시하고 2초간 대기한다.
  display.clearDisplay();  // OLED 디스플레이를 지운다
  • 디스플레이 내용을 지운다.

이미지 출력

  display.drawBitmap(
    0, 0,
    VeryGood, 32, 32, 1);  // (0,0) 좌표에 VeryGood 이미지를 출력
  • images.h에서 정의한 VeryGood 이미지를 좌측 상단 (0,0) 좌표에 출력한다. 크기는 32x32, 색상은 흰색(1)으로 지정한다.
  display.drawBitmap(
    32, 0,
    Good, 32, 32, 1);  // (32,0) 좌표에 Good 이미지 출력
  • Good 이미지를 x=32, y=0 위치에 출력한다.
  display.drawBitmap(
    64, 0,
    Bad, 32, 32, 1);  // (64,0) 좌표에 Bad 이미지 출력
  • Bad 이미지를 x=64, y=0 위치에 출력한다.
  display.drawBitmap(
    96, 0,
    VeryBad, 32, 32, 1);  // (96,0) 좌표에 VeryBad 이미지 출력
  • VeryBad 이미지를 x=96, y=0 위치에 출력한다.
  display.display();  // 디스플레이에 출력된 내용을 갱신하여 표시한다
  • 버퍼에 그려진 이미지를 OLED 화면에 실제로 표시한다.

loop() 함수

void loop() {
}
  • 본 예제에서는 루프에서 반복 동작을 하지 않는다. 즉, setup()에서 한 번 이미지를 그리고 끝난다.

요약

  • 역할: ESP32로 공공데이터(미세먼지 등) 아이콘을 OLED에 출력하는 기본 코드이다.
  • 포인트: I2C 통신으로 SSD1306 OLED 초기화, images.h의 C 배열 이미지 출력, 초기화 실패 대비 루프 처리.
⚠️ **GitHub.com Fallback** ⚠️