아두이노 우노 R4 - OLED 128x32

이 튜토리얼은 OLED 128x32 I2C 디스플레이와 함께 Arduino UNO R4를 사용하는 방법을 보여줍니다. 당신은 다음을 배울 것입니다:

아두이노 UNO R4 OLED I2C 디스플레이

Hardware Preparation

1×Arduino UNO R4 WiFi Amazon
1×Arduino UNO R4 Minima (Alternatively) Amazon
1×USB Cable Type-C 쿠팡 | Amazon
1×SSD1306 I2C OLED Display 128x32 Amazon
1×Jumper Wires Amazon
1×(Recommended) Screw Terminal Block Shield for Arduino UNO R4 쿠팡 | Amazon
1×(Recommended) Breadboard Shield For Arduino UNO R4 쿠팡 | Amazon
1×(Recommended) Enclosure For Arduino UNO R4 Amazon
1×(Recommended) Power Splitter For Arduino UNO R4 Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

OLED 디스플레이 소개

I2C OLED 디스플레이 핀아웃

  • GND 핀: Arduino UNO R4의 접지에 연결해야 합니다.
  • VCC 핀: Arduino UNO R4의 5볼트 핀에 연결하는 디스플레이의 전원 공급 장치입니다.
  • SCL 핀: I2C 인터페이스의 직렬 클록 핀입니다.
  • SDA 핀: I2C 인터페이스의 직렬 데이터 핀입니다.
OLED 핀아웃

※ NOTE THAT:

OLED 모듈의 핀 배열은 제조업체와 모듈의 모델에 따라 다를 수 있습니다. 항상 OLED 모듈의 라벨을 확인하고 따르세요. 주의하세요!

이 가이드는 SSD1306 I2C 드라이버를 사용하는 OLED 디스플레이를 위한 것입니다. 우리는 DIYables의 OLED 디스플레이와 함께 테스트했습니다. 문제 없이 완벽하게 작동합니다.

Wiring Diagram

아두이노 UNO R4 OLED 128x32 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

다른 유형의 Arduino UNO R4를 사용할 경우, 핀 레이아웃이 Uno와 동일하지 않을 것입니다. 다른 Arduino UNO R4 모델에 대한 정보는 아래 표를 참조하세요.

128x32 OLED Module Arduino UNO R4
Vin 5V
GND GND
SDA A4
SCL A5

Arduino UNO R4에서 OLED 사용하는 방법

SSD1306 OLED 라이브러리 설치

  • Arduino IDE의 왼쪽에 있는 Libraries 아이콘으로 이동하세요.
  • 검색 상자에 "SSD1306"을 입력하고 Adafruit에서 만든 SSD1306 라이브러리를 찾으세요.
  • Install 버튼을 눌러 라이브러리를 추가하세요.
아두이노 UNO R4 OLED 라이브러리
  • 추가적인 라이브러리를 설치해야 합니다.
  • Install All 버튼을 클릭하여 필요한 모든 라이브러리를 설치하세요.
Arduino UNO R4 Adafruit GFX 센서 라이브러리

OLED 프로그래밍 방법

  • 라이브러리를 포함합니다.
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>
  • 화면 크기를 OLED 123x32로 설정합니다.
#define SCREEN_WIDTH 128 // OLED 디스플레이의 너비를 픽셀 단위로 정의 #define SCREEN_HEIGHT 32 // OLED 디스플레이의 높이를 픽셀 단위로 정의
  • SSD1306 OLED 항목을 생성합니다.
// I2C 통신을 위한 Adafruit SSD1306 디스플레이 객체 초기화 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
  • setup() 함수에서 OLED 화면을 설정합니다.
// 특정 I2C 주소(0x3C)로 OLED 디스플레이 시작, 128x32 해상도 if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); // 초기화 실패 시 오류 메시지 출력 while (true); // 추가 실행을 중단하기 위해 무한 루프에 진입 }
  • 그런 다음 텍스트, 그림을 보여주고 선을 그릴 수 있습니다.

Arduino UNO R4 코드 - OLED에 텍스트 표시

/* * 이 Arduino UNO R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-oled-128x32 */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels // declare an SSD1306 display object connected to I2C Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Serial.begin(9600); // initialize OLED display with address 0x3C for 128x32 if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); while (true); } delay(2000); // wait for initializing oled.clearDisplay(); // clear display oled.setTextSize(1); // text size oled.setTextColor(WHITE); // text color oled.setCursor(0, 10); // position to display oled.println("Hello World!"); // text to display oled.display(); // show on OLED } void loop() { }

여기 OLED에 텍스트를 표시할 때 사용할 수 있는 몇 가지 기능이 있습니다:

  • oled.clearDisplay(): 모든 픽셀을 끕니다.
  • oled.drawPixel(x, y, color): x, y 좌표에 픽셀을 그립니다.
  • oled.setTextSize(n): 텍스트 크기를 1부터 8까지 선택할 수 있도록 변경합니다.
  • oled.setCursor(x, y): 텍스트 시작 지점을 설정합니다.
  • oled.setTextColor(WHITE): 텍스트 색상을 흰색으로 설정합니다.
  • oled.setTextColor(BLACK, WHITE): 텍스트 색상을 검정색, 배경을 흰색으로 설정합니다.
  • oled.println("message"): 텍스트를 표시합니다.
  • oled.println(number): 숫자를 표시합니다.
  • oled.println(number, HEX): 숫자를 16진수 형식으로 표시합니다.
  • oled.display(): 변경 사항으로 디스플레이를 업데이트합니다.
  • oled.startscrollright(start, stop): 텍스트를 왼쪽에서 오른쪽으로 이동합니다.
  • oled.startscrollleft(start, stop): 텍스트를 오른쪽에서 왼쪽으로 이동합니다.
  • oled.startscrolldiagright(start, stop): 텍스트를 왼쪽 아래에서 오른쪽 위로 대각선으로 이동합니다.
  • oled.startscrolldiagleft(start, stop): 텍스트를 오른쪽 아래에서 왼쪽 위로 대각선으로 이동합니다.
  • oled.stopscroll(): 모든 스크롤 텍스트를 중지합니다.

아두이노 UNO R4 코드 - OLED에 그리기

/* * 이 Arduino UNO R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-oled-128x32 */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels // declare an SSD1306 display object connected to I2C Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Serial.begin(9600); // initialize OLED display with address 0x3C for 128x32 if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); while (true); } delay(2000); // wait for initializing oled.setCursor(0, 0); } void loop() { // draw rectangle oled.clearDisplay(); oled.drawRect(0, 15, 60, 40, WHITE); oled.display(); delay(2000); // fill rectangle oled.clearDisplay(); oled.fillRect(0, 15, 60, 40, WHITE); oled.display(); delay(2000); // draw the round rectangle oled.clearDisplay(); oled.drawRoundRect(0, 15, 60, 40, 8, WHITE); oled.display(); delay(2000); // fill the round rectangle oled.clearDisplay(); oled.fillRoundRect(0, 15, 60, 40, 8, WHITE); oled.display(); delay(2000); // draw circle oled.clearDisplay(); oled.drawCircle(20, 35, 20, WHITE); oled.display(); delay(2000); // fill circle oled.clearDisplay(); oled.fillCircle(20, 35, 20, WHITE); oled.display(); delay(2000); // draw triangle oled.clearDisplay(); oled.drawTriangle(30, 15, 0, 60, 60, 60, WHITE); oled.display(); delay(2000); // fill triangle oled.clearDisplay(); oled.fillTriangle(30, 15, 0, 60, 60, 60, WHITE); oled.display(); delay(2000); }

Arduino UNO R4 코드 – 이미지 표시

OLED 화면에 이미지를 표시하려면 먼저 이미지를 비트맵 배열로 변환해야 합니다. 이 온라인 도구를 사용하여 변환할 수 있습니다. 아래 이미지를 참조하여 이미지를 비트맵 배열로 변경하는 방법을 확인하세요. 저는 Arduino 아이콘을 비트맵 배열로 변경했습니다.

이미지를 비트맵 배열로 변환

새 배열 코드를 복사하여 아래 코드의 Arduino 아이콘 배열에 업데이트하세요.

아래 비디오는 OLED 128x64 디스플레이와 Arduino Uno 및 Arduino 아이콘을 사용하는 방법을 보여줍니다.

Arduino Uno R4 및 OLED 128x32와 함께 작동하도록 유사하게 수행할 수 있습니다. 아래 코드는 OLED 128x32에 DIYables 아이콘을 표시합니다.

/* * 이 Arduino UNO R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-oled-128x32 */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels // declare an SSD1306 display object connected to I2C Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // bitmap of DIYable-icon image int bitmap_width = 72; // MUST match to bitmap image size int bitmap_height = 32; // MUST match to bitmap image size const unsigned char bitmap_DIYables [] PROGMEM = { // 'DIYables Icon', 72x32 0x00, 0x0f, 0xff, 0xff, 0x8f, 0xf8, 0x07, 0x38, 0x07, 0x00, 0x0f, 0xff, 0xff, 0x8f, 0xfe, 0x07, 0x1c, 0x0e, 0x00, 0x0f, 0xff, 0xff, 0x8f, 0xff, 0x07, 0x1c, 0x1c, 0x00, 0x0f, 0xff, 0xff, 0x8e, 0x07, 0x87, 0x0e, 0x1c, 0x00, 0x0f, 0xff, 0xff, 0x8e, 0x03, 0xc7, 0x0f, 0x38, 0x00, 0x0f, 0xff, 0xff, 0x8e, 0x01, 0xc7, 0x07, 0x38, 0x00, 0x0f, 0xff, 0xff, 0x8e, 0x01, 0xc7, 0x03, 0xf0, 0xf0, 0x0f, 0xff, 0xff, 0x8e, 0x01, 0xc7, 0x03, 0xe0, 0xfc, 0x0f, 0xff, 0xff, 0x8e, 0x01, 0xc7, 0x01, 0xe0, 0xfe, 0x0f, 0xff, 0xff, 0x8e, 0x03, 0xc7, 0x01, 0xc0, 0xff, 0x8f, 0xff, 0xff, 0x8e, 0x03, 0x87, 0x01, 0xc0, 0xff, 0x8f, 0xff, 0xff, 0x8e, 0x0f, 0x87, 0x01, 0xc0, 0xff, 0xcf, 0xff, 0xff, 0x8f, 0xff, 0x07, 0x01, 0xc0, 0xff, 0xef, 0xff, 0xff, 0x8f, 0xfc, 0x07, 0x01, 0xc0, 0xff, 0xef, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfc, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x0e, 0x0c, 0x0c, 0xc3, 0x07, 0xff, 0xef, 0xff, 0xfe, 0x0f, 0xec, 0xec, 0x99, 0x7f, 0xff, 0xef, 0xff, 0xfe, 0x0f, 0x04, 0xe4, 0x81, 0x0f, 0xff, 0xcf, 0xff, 0xfc, 0x0e, 0x32, 0xe4, 0x9f, 0xc7, 0xff, 0x8f, 0xff, 0xf8, 0x0e, 0x32, 0x4c, 0x9b, 0x67, 0xff, 0x0f, 0xff, 0xf0, 0x0e, 0x04, 0x0c, 0xc3, 0x0f, 0xfe, 0x0f, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0f, 0xff, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff }; void setup() { Serial.begin(9600); // initialize OLED display with address 0x3C for 128x32 if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); while (true); } delay(2000); // wait for initializing } void loop() { oled.clearDisplay(); // display bitmap to the center int x = (SCREEN_WIDTH - bitmap_width) / 2; int y = (SCREEN_HEIGHT - bitmap_height) / 2; oled.drawBitmap(x, y, bitmap_DIYables, bitmap_width, bitmap_height, WHITE); oled.display(); delay(2000); }

※ NOTE THAT:

  • 그림 크기는 화면 크기와 같거나 더 작아야 합니다.
  • OLED 128x32에 주어진 코드를 사용하려면 이미지를 크기에 맞게 조정하고 oled.drawBitmap(); 함수에서 너비와 높이를 조정해야 합니다.

OLED에서 텍스트/숫자를 세로 및 가로 중앙 정렬하는 방법

/* * 이 Arduino UNO R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-oled-128x32 */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // // create SSD1306 display object connected to I2C void setup() { Serial.begin(9600); // initialize OLED display with address 0x3C for 128x32 if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); while (true); } delay(2000); // wait for initializing oled.clearDisplay(); // clear display oled.setTextSize(2); // text size oled.setTextColor(WHITE); // text color oled.setCursor(0, 10); // position to display } void loop() { // display string String text = "DIYables"; oledDisplayCenter(text); delay(2000); // display number int number = 21; String str = String(number); oledDisplayCenter(str); delay(2000); } void oledDisplayCenter(String text) { int16_t x1; int16_t y1; uint16_t width; uint16_t height; oled.getTextBounds(text, 0, 0, &x1, &y1, &width, &height); // display on horizontal and vertical center oled.clearDisplay(); // clear display oled.setCursor((SCREEN_WIDTH - width) / 2, (SCREEN_HEIGHT - height) / 2); oled.println(text); // text to display oled.display(); }

OLED 문제 해결

OLED 화면에 아무것도 표시되지 않으면 다음 단계를 따르십시오.

  • 배선을 올바르게 했는지 확인하세요.
  • I2C OLED에 SSD1306 드라이버가 장착되어 있는지 확인하세요.
  • 아래의 I2C 주소 스캐너 코드를 사용하여 Arduino UNO R4에서 OLED의 I2C 주소를 확인하세요.
// I2C address scanner program #include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("I2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address < 16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknown error at address 0x"); if (address < 16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found"); else Serial.println("done"); delay(5000); // wait 5 seconds for next scan }

시리얼 모니터의 출력:

COM6
Send
Scanning... I2C device found at address 0x3C ! done Scanning... I2C device found at address 0x3C ! done
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!