우유식빵 2021. 11. 15. 06:40

아두이노 우노(Arduino UNO R3)를 기준으로 작성했다.

아두이노 메가를 기준으로 하고싶다면 이 글을 따라하고 아래 게시글의 문제해결 2번을 참고하면 된다.

https://waytocse.tistory.com/77

 

아두이노 메가와 OLED, BLE(HM-10) 연동 오류 해결

전에 아두이노 우노에서 oled와 블루투스 모듈을 한번에 사용하려고 했다가 메모리 문제로 인해 동시 사용을 못하게 된 후 (바로 그 문제를 직면했던 날 게시글) https://waytocse.tistory.com/76 [아두이

waytocse.tistory.com

 

OLED을 통해 원하는 문구나 그림을 표시할 수 있다.

내가 사용한 OLED는 전에 ESP로 OLED동작시켰을 때와 같은

[ELECROW] 128x64 OLED 디스플레이 블루 [DO1286496BY]를 사용했다.

 

이녀석은 3.3v~5v사이 전압을 주면된다. 3.3v라고 코드에 써두긴했는데

문제없이 5v도 잘돌아간다.  

//sda - a4
//scl - a5
//3.3v
#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);

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

void setup() {
  Serial.begin(9600);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    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;
}

위 코드는 2초 간격으로 temp,humi,soil이라는 변수 값을 증가시켜가며

OLED에 표시하는 코드이다. 

 

SCL,SDA에 유의해서 회로연결을 해준 후 

실행시켜보면

 

이렇게 2초간격으로 값이 증가되어 값을 다르게 표시하는 모습을 볼 수 있다.