본문 바로가기
컴퓨터/아두이노 라즈베리파이

ESP WROOM32로 OLED 제어하기 (128x64 OLED)

by 우유식빵 2021. 9. 24.

ESP WROOM32로 OLED를 제어해보고자한다.

 

내가 사용한 OLED는 아래와 같다.

https://www.devicemart.co.kr/goods/view?no=1384209 

 

128x64 OLED 디스플레이 블루 [DO1286496BY]

아두이노 호환 OLED display / 백라이트 없이 작동 / 대각선 화면 크기 : 0.96' / 픽셀 수 : 128 x 64 / 작동 전압 : 3.3 ~ 5V DC / 인터페이스 : I2C

www.devicemart.co.kr

 

1. 라이브러리 설치

먼저 OLED를 제어하기 위해서 필요한 라이브러리를 설치해야한다. 

라이브러리를 추가해주기 위해 라이브러리 관리에 들어간다.

ssd1306을 검색하고 adafruit에서 만든 것을 선택한다. 대충 최신 버전을 설치해준다.

gfx를 검색하고 역시 adafruit의 Adafruit GFX Library를 설치한다. 

 

Arduino IDE에서 ESP WROOM 32를 제어하는 환경설정은 아래 게시글을 참고하면 된다.

https://waytocse.tistory.com/51

 

ESP WROOM 32 아두이노IDE에서 사용하는 법

아두이노 IDE에서 환경설정에 들어간다. (Mac: Arduino > Preference, Win: File > Preference) 추가적인 보드 매니저 URLs에 https://dl.espressif.com/dl/package_esp32_index.json을 입력해준다. 그 후 툴 >..

waytocse.tistory.com

 

 

2. ESP WROOM 32와 OLED회로 연결하기

출처: https://randomnerdtutorials.com/esp32-ssd1306-oled-display-arduino-ide/

위와 같이 연결하면 된다. OLED가 I2C인경우 SDA가 GPIO21, SCL이 GPIO22에 연결되어야 한다. 

 

3. Hello, World!로 OLED 작동 확인하기

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com  
*********/

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

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(115200);

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000);
  display.clearDisplay();

  display.setTextSize(5);
  display.setTextColor(WHITE);
  display.setCursor(0, 10);
  // Display static text
  display.println("Hello, world!");
  display.display(); 
}

void loop() {
  
}

위와 같은 코드로 ESP WROOM 32를 연결해서 실행한다. 

 

위와 같이 업로드가 완료됐다. 모습을 살펴보자

다음과 같이 나타난다. 

폰트 크기가 너무 작은 것 같아서   display.setTextSize(5);로 바꾸고 실행했더니

이번에는 너무 크다. 그래서 3으로 바꿨더니

이번에도 너무 크다. 그래서 2로 바꾸니 딱 적당했다. 

 

나는 OLED를 통해 온습도 값을 보여주고자 하므로 println값을 바꾸어서 이렇게 나타나도록 했다.

 

온습도 값과 토양 습도 값을 센서를 통해 받은 후 OLED로 보여주고 싶기 때문에 

값을 업데이트 할 때마다 OLED로 업데이트 하는 모습을 보여줄 수 있는 지 확인 할 필요가 있었다. 

그래서 loop()문에다 display코드를 짠 후 print할 string값을 유동적으로 바꾸는 식으로 시험삼아 코드를 작성해보았다. 

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 
#define SCREEN_HEIGHT 64

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

int temp = 29;
int humi = 45;
int soil = 23;

void setup() {
  Serial.begin(115200);

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
}

void loop() {
  delay(2000);
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0, 10);
  display.println("T:"+(String)temp+"C ");
  display.println("H:"+(String)humi+"% ");
  display.println("S:"+(String)soil+"% ");
  display.display(); 
  temp = temp + 1;
  humi = humi + 1;
  soil = soil + 1;
}

그 결과

 

 

 

참고한 게시글.

https://randomnerdtutorials.com/esp32-ssd1306-oled-display-arduino-ide/

 

ESP32 OLED Display with Arduino IDE | Random Nerd Tutorials

This guide shows how to use the 0.96 inch SSD1306 OLED display with ESP32 using Arduino IDE. Learn how to write text, set different fonts, draw shapes and display bitmaps images.

randomnerdtutorials.com

 

댓글