본문 바로가기

Arduino/[2] Arduino Module

#28. OLED 0.96인치 128x64 SPI 6핀 A37 디스플레이

728x90
반응형
아두이노 OLED 0.96인치 128x64 SPI 6핀 A37

OLED 0.96인치 128x64 SPI 6핀 A37 디스플레이

OLED 0.96인치 128x64 SPI 6핀 A37 디스플레이

 

최근 프로젝트에서 가장 많이 활용되는 디스플레이 중 하나가 바로 OLED 디스플레이다. 특히, 0.96인치 128x64 해상도의 SPI 기반 6핀 A37 디스플레이는 소형 프로젝트에 적합한 성능과 유연성을 제공한다. 이 글에서는 A37 모델의 특징과 하드웨어 연결 방법, 그리고 아두이노와의 통합 사용법을 살펴보겠다.


1. OLED A37 디스플레이의 주요 특징

  • 화면 크기 및 해상도: 0.96인치 크기에 128x64 픽셀의 해상도를 제공하며, 선명한 텍스트와 이미지를 표시할 수 있다.
  • 통신 방식: SPI(Serial Peripheral Interface)를 사용하여 빠른 데이터 전송이 가능하다.
  • 6핀 구성:
    • GND: 접지
    • VCC: 전원 (3.3V 또는 5V)
    • SCL: SPI 클록 신호
    • SDA: SPI 데이터 신호
    • RES: 디스플레이 리셋 신호
    • DC: 데이터/명령 제어 신호
  • 저전력 소비: OLED 기술은 백라이트 없이 픽셀 단위로 조명을 제어하므로 에너지 효율이 높다.
  • 호환성: 아두이노를 포함한 다양한 마이크로컨트롤러와 쉽게 통합할 수 있다.

2. 하드웨어 연결

A37 디스플레이는 6개의 핀으로 구성되어 있으며, 아두이노와의 연결은 다음과 같다:

GND GND 전원 접지
VCC 3.3V 또는 5V 전원 공급
SCL D13 SPI 클록 신호
SDA D11 SPI 데이터 신호
RES D9 디스플레이 리셋 신호
DC D8 데이터/명령 제어 신호

3. 아두이노와의 통합

3-1. 필수 라이브러리 설치

OLED 디스플레이를 사용하려면 다음 라이브러리를 설치해야 한다:

  1. Adafruit SSD1306: OLED 제어용 라이브러리
  2. Adafruit GFX: 그래픽 처리용 라이브러리

아두이노 IDE에서 Sketch > Include Library > Manage Libraries를 선택한 후, 위 두 라이브러리를 검색하여 설치하면 된다.

3-2. 코드 작성

다음은 OLED 디스플레이를 초기화하고 간단한 메시지를 표시하는 코드 예제다:

#include <Adafruit_GFX.h> // 그래픽 처리를 위한 Adafruit GFX 라이브러리 포함
#include <Adafruit_SSD1306.h> // OLED 디스플레이 제어를 위한 라이브러리 포함

#define SCREEN_WIDTH 128 // OLED 디스플레이의 가로 해상도 정의
#define SCREEN_HEIGHT 64 // OLED 디스플레이의 세로 해상도 정의

#define OLED_MOSI 11 // SPI 데이터 신호 핀 설정
#define OLED_CLK 13 // SPI 클록 신호 핀 설정
#define OLED_DC 8 // 데이터/명령 제어 핀 설정
#define OLED_CS 10 // 칩 선택 핀 설정
#define OLED_RESET 9 // 디스플레이 리셋 핀 설정

// Adafruit SSD1306 객체 생성, SPI 인터페이스와 핀 정보를 전달
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &SPI, OLED_DC, OLED_RESET, OLED_CS);

void setup() {
  Serial.begin(9600); // 시리얼 통신 초기화, 보드레이트는 9600bps로 설정

  // 디스플레이 초기화, 실패 시 에러 메시지 출력 후 무한 루프
  if (!display.begin(SSD1306_SWITCHCAPVCC)) {
    Serial.println(F("SSD1306 allocation failed")); // 초기화 실패 메시지 출력
    for (;;); // 무한 루프
  }

  display.display(); // 디스플레이 내용 표시
  delay(2000); // 2초간 대기
  display.clearDisplay(); // 디스플레이 화면 지우기

  display.setTextSize(1); // 텍스트 크기 설정
  display.setTextColor(SSD1306_WHITE); // 텍스트 색상 설정 (흰색)
  display.setCursor(0, 0); // 텍스트 커서를 화면 좌측 상단으로 설정
  display.println(F("Hello, OLED!")); // "Hello, OLED!" 메시지 출력
  display.display(); // 출력 내용을 디스플레이에 적용
}

void loop() {
  // 반복 작업 추가 가능
}

3-3. 코드 업로드 및 테스트

  1. 아두이노와 디스플레이를 연결한다.
  2. 위 코드를 아두이노 IDE에 복사한 후 업로드한다.
  3. 디스플레이에 "Hello, OLED!" 메시지가 표시되면 성공적으로 연결된 것이다.

4. 주의사항 및 팁

  • 전압 확인: OLED 디스플레이가 3.3V와 5V 모두 지원되는지 확인해야 한다. 잘못된 전압으로 연결하면 디스플레이가 손상될 수 있다.
  • 핀 연결 상태 확인: 핀이 올바르게 연결되지 않으면 디스플레이가 작동하지 않을 수 있다.
  • 라이브러리 업데이트: 최신 버전의 Adafruit SSD1306 및 Adafruit GFX 라이브러리를 사용하는 것이 좋다.

5. 활용 사례

  1. IoT 프로젝트: 온도 및 습도 센서 데이터 시각화.
  2. 시계 프로젝트: 실시간으로 시간을 표시하는 디지털 시계 구현.
  3. 메뉴 시스템: 버튼 입력과 결합하여 간단한 UI를 구현.

응용 : Arduino에서 비트맵 이미지를 출력

Arduino와 OLED 디스플레이를 사용해 원하는 비트맵 이미지를 출력하는 방법을 소개한다. 이를 통해 자신만의 이미지나 로고를 OLED 화면에 표시할 수 있다. 아래에서 단계별로 설명하겠다.


1. 준비 사항

  • Arduino 보드: 예) Arduino Uno, Mega 등
  • OLED 디스플레이: 0.96인치 128x64 해상도, SPI 인터페이스
  • 비트맵 이미지: 128x64 픽셀 크기의 흑백(B/W) 이미지
  • Arduino IDE: 코드를 작성하고 업로드하기 위한 소프트웨어
  • Python (선택 사항): BMP 이미지를 변환하는 데 사용

2. 비트맵 이미지 준비 및 변환

비트맵 이미지를 OLED 디스플레이에 출력하려면, 이미지를 Arduino 코드에서 사용할 수 있는 배열로 변환해야 한다.

2-1. BMP 파일 준비

  1. BMP 이미지를 128x64 픽셀 크기로 변경한다.
  2. 흑백 모드(1비트)로 저장한다.

예제 이미지

2-2. Python으로 변환

Python 스크립트를 사용해 BMP 파일을 Arduino용 배열로 변환할 수 있다. 아래는 변환 스크립트 예제다:

from PIL import Image

def bmp_to_array(filename, output_width, output_height):
    img = Image.open(filename).convert('1')
    img = img.resize((output_width, output_height))
    pixels = img.load()
    data = []

    for y in range(output_height):
        byte = 0
        for x in range(output_width):
            if pixels[x, y] == 0:
                byte |= (1 << (7 - (x % 8)))
            if x % 8 == 7:
                data.append(byte)
                byte = 0
        if output_width % 8 != 0:
            data.append(byte)

    return data

filename = "/path/to/image.bmp"
width, height = 128, 64
bitmap_array = bmp_to_array(filename, width, height)

print("const unsigned char bitmap[] PROGMEM = {")
for i, byte in enumerate(bitmap_array):
    print(f"0x{byte:02X}, ", end="")
    if (i + 1) % 16 == 0:
        print()
print("};")
실행 결과
const unsigned char bitmap[] PROGMEM = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x80, 0x0E, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFC, 0x33, 0xEC, 0xE1, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xFC, 0x01, 0xF3, 0xA5, 0x34, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0xE1, 0x1F, 0xAA, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x70, 0xE9, 0x07, 0xD6, 0x91, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xE0, 0x09, 0xA2, 0x75, 0x7E, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFC, 0xF0, 0xAA, 0x6D, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFD, 0x63, 0x95, 0x35, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xF0, 0x78, 0xE7, 0x0F, 0x8F, 0x37, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x89, 0xFF, 0xFF, 0x3D, 0x85, 0xF2, 0x72, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x89, 0xE1, 0xF9, 0x3E, 0x72, 0xE9, 0xB1, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBE, 0xC7, 0x0B, 0xF3, 0xAD, 0xAE, 0xBF, 0x37, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x1F, 0xD1, 0x79, 0x3B, 0xD6, 0xDF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8D, 0xEF, 0x7E, 0xE5, 0x88, 0x97, 0x39, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x9F, 0x8B, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8E, 0xA6, 0xAD, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x02, 0xB6, 0x00, 0x06, 0xDE, 0xB1, 0xE2, 0xFD, 0xBB, 0xD2, 0x48, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x13, 0xF9, 0xB4, 0x30, 0xFF, 0xF7, 0x59, 0x73, 0xE0, 0x00, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0x7C, 0x23, 0x86, 0x27, 0x4B, 0xEB, 0xBF, 0x0A, 0xB3, 0xC0, 0x00, 0x20, 0xFF, 0xFF, 0xFB, 0xFF, 0xE3, 0xF8, 0x2B, 0x55, 0xFF, 0xB6, 0x79, 0xE8, 0x9F, 0xC4, 0x00, 0xA0, 0x7F, 0xFF, 0xF8, 0x81, 0x81, 0x10, 0x63, 0x7A, 0xA6, 0xFF, 0x22, 0x3F, 0x2F, 0xF1, 0x20, 0x48, 0x9F, 0xFF, 0xF0, 0xC7, 0x83, 0xFF, 0xF3, 0xFF, 0xF5, 0xB6, 0x4D, 0xCF, 0x37, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xF7, 0xFA, 0x7A, 0xB0, 0xA2, 0xE6, 0x89, 0xE3, 0xFB, 0xC1, 0x03, 0x12, 0x2F, 0xE0, 0x00, 0x3E, 0x1F, 0xEA, 0x4F, 0x45, 0xA9, 0xE8, 0x5B, 0x9E, 0xE7, 0xF0, 0x40, 0x00, 0x87, 0xC0, 0x00, 0x03, 0x08, 0xD3, 0x14, 0xFC, 0xCB, 0x43, 0x57, 0x1A, 0x4F, 0xC0, 0x44, 0x00, 0x97, 0xC0, 0x7C, 0x1C, 0xD0, 0x81, 0xFB, 0xF4, 0xAA, 0xFF, 0xFB, 0xA3, 0x7F, 0xB0, 0x82, 0x8A, 0x0B, 0x9F, 0xE6, 0x9E, 0xE0, 0x91, 0xE2, 0xEF, 0x85, 0x7B, 0x8F, 0xE9, 0xF7, 0x80, 0x60, 0x00, 0x0B, 0xFF, 0xFF, 0xE9, 0x7F, 0xB6, 0xDE, 0xF4, 0xB5, 0xF4, 0xFF, 0xDB, 0x3F, 0xA0, 0x50, 0xC0, 0xA3, 0x80, 0x3E, 0x01, 0xEE, 0x5A, 0x76, 0x09, 0xFC, 0xEA, 0x5E, 0xBE, 0x7C, 0x40, 0x02, 0x00, 0x05, 0x87, 0xFF, 0xBF, 0x07, 0xFE, 0xA9, 0x3D, 0x6A, 0x93, 0x70, 0x67, 0xF8, 0x00, 0x04, 0x9C, 0x03, 0x9F, 0x01, 0xCD, 0xDF, 0xA2, 0xEE, 0x77, 0xEE, 0x06, 0x3D, 0xBF, 0xE4, 0x00, 0x6E, 0x21, 0x11, 0xFE, 0x01, 0xA7, 0xD1, 0xCB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x01, 0x05, 0xF2, 0x0D, 0xFC, 0x36, 0x23, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0x04, 0x21, 0x00, 0x08, 0x21, 0xFE, 0x04, 0x25, 0x6F, 0x5F, 0xD0, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x11, 0xC8, 0x1F, 0x1B, 0x02, 0x7E, 0x00, 0x00, 0x22, 0x00, 0x00, 0x50, 0x40, 0x12, 0x50, 0x89, 0x21, 0x9F, 0xFC, 0x7B, 0x61, 0xF8, 0x80, 0x20, 0x45, 0x00, 0x40, 0x09, 0x28, 0x00, 0x40, 0x21, 0x2B, 0x80, 0xDB, 0xED, 0x0B, 0xE0, 0x40, 0x04, 0x02, 0x02, 0x1C, 0x02, 0x02, 0x00, 0x80, 0x80, 0x61, 0xC5, 0x11, 0xF5, 0xB7, 0xC0, 0x00, 0x80, 0x00, 0x00, 0x01, 0x08, 0x40, 0x20, 0x00, 0x00, 0x23, 0xDF, 0x66, 0x3C, 0xDB, 0xC4, 0x12, 0x20, 0x00, 0x00, 0xC0, 0x03, 0x01, 0x02, 0x20, 0x00, 0x23, 0xF7, 0xB3, 0xB7, 0x3F, 0x84, 0x24, 0x01, 0x40, 0x00, 0x00, 0x0C, 0x08, 0x24, 0x10, 0x08, 0x17, 0xFE, 0xDE, 0xC3, 0xDB, 0x80, 0x00, 0x00, 0x02, 0x40, 0x4C, 0x00, 0x82, 0x08, 0x00, 0x40, 0x0F, 0xFE, 0xF9, 0xDA, 0xDF, 0x80, 0xA0, 0x19, 0x20, 0x10, 0x00, 0x88, 0x00, 0x20, 0x02, 0x22, 0x2F, 0xFE, 0xFC, 0xCD, 0xBF, 0x80, 0x01, 0x1A, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x10, 0x08, 0x1F, 0xFC, 0xED, 0x50, 0xE3, 0x82, 0x24, 0x01, 0xC0, 0x00, 0x40, 0x00, 0x81, 0x01, 0x04, 0x01, 0xFF, 0xFE, 0x24, 0xFB, 0x9B, 0xA0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x08, 0x84, 0x05, 0x0A, 0x7F, 0xFF, 0xF6, 0x97, 0x6B, 0x81, 0x90, 0x01, 0x30, 0x03, 0x44, 0x84, 0x14, 0x21, 0x00, 0x25, 0xFF, 0xFF, 0xFA, 0x8F, 0xFB, 0x86, 0x00, 0x01, 0x02, 0x80, 0x16, 0x02, 0x60, 0x08, 0x81, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x84, 0x22, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0x24, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x88, 0x06, 0x62, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x8C, 0x00, 0x22, 0x00, 0x02, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0x20, 0x10, 0x08, 0x00, 0x11, 0x17, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x86, 0x00, 0x09, 0x22, 0x20, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x50, 0x21, 0x30, 0x13, 0xF4, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x14, 0x82, 0x00, 0x00, 0x2F, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x20, 0x20, 0x5F, 0xFD, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x83, 0x92, 0x80, 0x25, 0x20, 0x3F, 0xFC, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x12, 0x80, 0x9F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x25, 0x00, 0x48, 0x00, 0x07, 0xE0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x05, 0x00, 0x20, 0x90, 0x02, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x48, 0x51, 0x00, 0x0A, 0x24, 0x20, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x84, 0x23, 0x08, 0x91, 0x23, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xC8, 0x15, 0x12, 0x44, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x08, 0x30, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, };

2-3. Image2Cpp로 변환 (대안)

  1. Image2Cpp 웹사이트에 접속한다.
  2. BMP 이미지를 업로드한다.
  3. 다음 설정을 적용한다:
    • Canvas size: 128x64
    • Output format: Arduino code
    • Draw Mode: Horizontal - 1 bit per pixel
  4. "Generate Code" 버튼을 클릭하고 생성된 코드를 복사한다.
혹은 아래 링크를 이용한다.
 

변환된 파일 — Convertio

전반적 변환 품질 평가 4.6 (26,081,250 표) 의견을 제공하려면 1 개 이상의 파일을 변환하여 다운로드해야합니다.!

convertio.co

 


3. Arduino 코드 작성

변환된 비트맵 배열을 Arduino 코드에 추가한다. 아래는 예제 코드다:

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

#define OLED_MOSI 11
#define OLED_CLK 13
#define OLED_DC 8
#define OLED_CS 10
#define OLED_RESET 9

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &SPI, OLED_DC, OLED_RESET, OLED_CS);

// 변환된 비트맵 데이터
const unsigned char bitmap[] PROGMEM = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x80, 0x0E, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFC, 0x33, 0xEC, 0xE1, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xFC, 0x01, 0xF3, 0xA5, 0x34, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0xE1, 0x1F, 0xAA, 0xDE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x70, 0xE9, 0x07, 0xD6, 0x91, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xE0, 0x09, 0xA2, 0x75, 0x7E, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFC, 0xF0, 0xAA, 0x6D, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFD, 0x63, 0x95, 0x35, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xF0, 0x78, 0xE7, 0x0F, 0x8F, 0x37, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x89, 0xFF, 0xFF, 0x3D, 0x85, 0xF2, 0x72, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x89, 0xE1, 0xF9, 0x3E, 0x72, 0xE9, 0xB1, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xBE, 0xC7, 0x0B, 0xF3, 0xAD, 0xAE, 0xBF, 0x37, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x1F, 0xD1, 0x79, 0x3B, 0xD6, 0xDF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x8D, 0xEF, 0x7E, 0xE5, 0x88, 0x97, 0x39, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x9F, 0x8B, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8E, 0xA6, 0xAD, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0x80, 0x02, 0xB6, 0x00, 0x06, 0xDE, 0xB1, 0xE2, 0xFD, 0xBB, 0xD2, 0x48, 0x3F, 0xFF, 
0xFF, 0xFF, 0xFF, 0xAF, 0x13, 0xF9, 0xB4, 0x30, 0xFF, 0xF7, 0x59, 0x73, 0xE0, 0x00, 0x0B, 0xFF, 
0xFF, 0xFF, 0xFF, 0x7C, 0x23, 0x86, 0x27, 0x4B, 0xEB, 0xBF, 0x0A, 0xB3, 0xC0, 0x00, 0x20, 0xFF, 
0xFF, 0xFB, 0xFF, 0xE3, 0xF8, 0x2B, 0x55, 0xFF, 0xB6, 0x79, 0xE8, 0x9F, 0xC4, 0x00, 0xA0, 0x7F, 
0xFF, 0xF8, 0x81, 0x81, 0x10, 0x63, 0x7A, 0xA6, 0xFF, 0x22, 0x3F, 0x2F, 0xF1, 0x20, 0x48, 0x9F, 
0xFF, 0xF0, 0xC7, 0x83, 0xFF, 0xF3, 0xFF, 0xF5, 0xB6, 0x4D, 0xCF, 0x37, 0xC0, 0x00, 0x00, 0x1F, 
0xFF, 0xFF, 0xFF, 0xF7, 0xFA, 0x7A, 0xB0, 0xA2, 0xE6, 0x89, 0xE3, 0xFB, 0xC1, 0x03, 0x12, 0x2F, 
0xE0, 0x00, 0x3E, 0x1F, 0xEA, 0x4F, 0x45, 0xA9, 0xE8, 0x5B, 0x9E, 0xE7, 0xF0, 0x40, 0x00, 0x87, 
0xC0, 0x00, 0x03, 0x08, 0xD3, 0x14, 0xFC, 0xCB, 0x43, 0x57, 0x1A, 0x4F, 0xC0, 0x44, 0x00, 0x97, 
0xC0, 0x7C, 0x1C, 0xD0, 0x81, 0xFB, 0xF4, 0xAA, 0xFF, 0xFB, 0xA3, 0x7F, 0xB0, 0x82, 0x8A, 0x0B, 
0x9F, 0xE6, 0x9E, 0xE0, 0x91, 0xE2, 0xEF, 0x85, 0x7B, 0x8F, 0xE9, 0xF7, 0x80, 0x60, 0x00, 0x0B, 
0xFF, 0xFF, 0xE9, 0x7F, 0xB6, 0xDE, 0xF4, 0xB5, 0xF4, 0xFF, 0xDB, 0x3F, 0xA0, 0x50, 0xC0, 0xA3, 
0x80, 0x3E, 0x01, 0xEE, 0x5A, 0x76, 0x09, 0xFC, 0xEA, 0x5E, 0xBE, 0x7C, 0x40, 0x02, 0x00, 0x05, 
0x87, 0xFF, 0xBF, 0x07, 0xFE, 0xA9, 0x3D, 0x6A, 0x93, 0x70, 0x67, 0xF8, 0x00, 0x04, 0x9C, 0x03, 
0x9F, 0x01, 0xCD, 0xDF, 0xA2, 0xEE, 0x77, 0xEE, 0x06, 0x3D, 0xBF, 0xE4, 0x00, 0x6E, 0x21, 0x11, 
0xFE, 0x01, 0xA7, 0xD1, 0xCB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x01, 0x05, 
0xF2, 0x0D, 0xFC, 0x36, 0x23, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0x04, 0x21, 0x00, 0x08, 0x21, 
0xFE, 0x04, 0x25, 0x6F, 0x5F, 0xD0, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x11, 
0xC8, 0x1F, 0x1B, 0x02, 0x7E, 0x00, 0x00, 0x22, 0x00, 0x00, 0x50, 0x40, 0x12, 0x50, 0x89, 0x21, 
0x9F, 0xFC, 0x7B, 0x61, 0xF8, 0x80, 0x20, 0x45, 0x00, 0x40, 0x09, 0x28, 0x00, 0x40, 0x21, 0x2B, 
0x80, 0xDB, 0xED, 0x0B, 0xE0, 0x40, 0x04, 0x02, 0x02, 0x1C, 0x02, 0x02, 0x00, 0x80, 0x80, 0x61, 
0xC5, 0x11, 0xF5, 0xB7, 0xC0, 0x00, 0x80, 0x00, 0x00, 0x01, 0x08, 0x40, 0x20, 0x00, 0x00, 0x23, 
0xDF, 0x66, 0x3C, 0xDB, 0xC4, 0x12, 0x20, 0x00, 0x00, 0xC0, 0x03, 0x01, 0x02, 0x20, 0x00, 0x23, 
0xF7, 0xB3, 0xB7, 0x3F, 0x84, 0x24, 0x01, 0x40, 0x00, 0x00, 0x0C, 0x08, 0x24, 0x10, 0x08, 0x17, 
0xFE, 0xDE, 0xC3, 0xDB, 0x80, 0x00, 0x00, 0x02, 0x40, 0x4C, 0x00, 0x82, 0x08, 0x00, 0x40, 0x0F, 
0xFE, 0xF9, 0xDA, 0xDF, 0x80, 0xA0, 0x19, 0x20, 0x10, 0x00, 0x88, 0x00, 0x20, 0x02, 0x22, 0x2F, 
0xFE, 0xFC, 0xCD, 0xBF, 0x80, 0x01, 0x1A, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x10, 0x08, 0x1F, 
0xFC, 0xED, 0x50, 0xE3, 0x82, 0x24, 0x01, 0xC0, 0x00, 0x40, 0x00, 0x81, 0x01, 0x04, 0x01, 0xFF, 
0xFE, 0x24, 0xFB, 0x9B, 0xA0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x08, 0x84, 0x05, 0x0A, 0x7F, 
0xFF, 0xF6, 0x97, 0x6B, 0x81, 0x90, 0x01, 0x30, 0x03, 0x44, 0x84, 0x14, 0x21, 0x00, 0x25, 0xFF, 
0xFF, 0xFA, 0x8F, 0xFB, 0x86, 0x00, 0x01, 0x02, 0x80, 0x16, 0x02, 0x60, 0x08, 0x81, 0x0F, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x84, 0x22, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0x24, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x88, 0x06, 0x62, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x8C, 0x00, 0x22, 0x00, 0x02, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0x20, 0x10, 0x08, 0x00, 0x11, 0x17, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x86, 0x00, 0x09, 0x22, 0x20, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x50, 0x21, 0x30, 0x13, 0xF4, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x14, 0x82, 0x00, 0x00, 0x2F, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x20, 0x20, 0x5F, 0xFD, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0x83, 0x92, 0x80, 0x25, 0x20, 0x3F, 0xFC, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x12, 0x80, 0x9F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x25, 0x00, 0x48, 0x00, 0x07, 0xE0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x05, 0x00, 0x20, 0x90, 0x02, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x48, 0x51, 0x00, 0x0A, 0x24, 0x20, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x84, 0x23, 0x08, 0x91, 0x23, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xC8, 0x15, 0x12, 0x44, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x08, 0x30, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
};

void setup() {
    if (!display.begin(SSD1306_SWITCHCAPVCC)) {
        for (;;);
    }
    display.clearDisplay();

    // 비트맵 이미지 출력
    display.drawBitmap(0, 0, bitmap, 128, 64, SSD1306_WHITE);
    display.display();
}

void loop() {
    // 추가 작업 없음
}

4. 업로드 및 테스트

  1. Arduino IDE에서 위 코드를 작성하거나 붙여넣는다.
  2. Arduino 보드와 OLED 디스플레이를 연결한다.
  3. 코드를 업로드하고 디스플레이에 이미지가 출력되는지 확인한다.

728x90
반응형

'Arduino > [2] Arduino Module' 카테고리의 다른 글

#30. ESP-01  (0) 2024.12.27
#29. L9110 미니팬  (0) 2024.12.26
#27. L293D 모터 드라이버 쉴드  (0) 2024.08.12
[Arduino Module] #26. ESP32 CAM  (0) 2024.07.12
[Arduino Module] #25. Wemos D1 R32  (1) 2024.04.08
댓글