OLED 디스프레이를 위해서 구매를 했다.

 

인터넷을 검색해 보니 I2C 의 속도가 느려서 SPI를 추천한다고 해서 SPI 방식으로 구매했다.

 

구매사이트는 인터넷 가장 싼곳으로 당연히 메뉴얼도 존재 하지 않는 사이트...ㅠㅠ

 

일단 아두이노에 라이브러리를 선택 했다.

여러가지 라이브러리중 업그레이드가 가장 많이 된것 같은 U8G2를 선택 했다.

다른사람들 평에는 속도빠르고 버퍼를 작게 먹는 다고 되어 있어서 선택의 폭을 줄일수 있었다.

 

사이트는  : https://github.com/olikraus/u8g2

 

설치는 아래와 같은 방법으로 진행 했다.

 

 

 

 

케이블 연결을 위해 자료 조사를 진행 했다.

 

참고 사이트 :  https://github.com/jandelgado/arduino/wiki/SSD1306-based-OLED-connected-to-Arduino

 

참고로 사진상의 내용과 같이 저항 연결에 따라 I2C, SPI 모드 선택이 가능하다.

 

 

사이트에서 추천한 PIN 연결은 아래와 같았다.

 

 

 

하지만 위와 같이 연결할경우 기존에 사용중이던 소스에서 D0 (LED) 가 겹쳐서 해당 PIN 을 변경 했다.

처음 봤을때는 SPI를 하드웨어로 동작하는걸로 생각했는데 결국은 GPIO 제어가 되어야하는 것으로

보여서 아무생각없이 PIN MAP 을 변경 했다.

 

SSD1306

 

 

nodeMCU

특징

1

GND

 

GND

전원

2

VDD

 

3.3V

전원

3

SCK(D0)

 

D5(GPIO14)

CLOCK

4

SDA(D1)

 

D7(GPIO13)

DATA(MOSI)

5

RES

 

D1(GPIO5)

RESET

6

DC

 

D4(GPIO2)

DATA/COMMAND

7

CS

 

D8(GPIO15)

CHIP SELECT

 

 

연결 회로도는 아래와 같다.

 

 

참고고 OLED 회로도는 아래와 같다.

 

 

 

소스는 예제 소스 기준으로 작성 하였다. (기존 소스에 그대로 사용했다.)

 

좋은 점은  한글 출력이 가능 하다는 점이다.  ( setup에 테스트 코드만 넣어서 해당 코드만 올림)

 

------------------------  소스 --------------------------

 

#include <ESP8266WiFi.h>
#include <Ticker.h>

 

#include <Arduino.h>
#include <U8g2lib.h>
//#include <U8x8lib.h>


#define LED     D0    //LED PIN define
#define KEY_IN  D3    //Flash key pin define
#define ANALOG_IN A0  //analog in define

#define OLED_PCLK     D5
#define OLED_PDATA    D7
#define OLED_PRESET   D1
#define OLED_PCMD     D4
#define OLED_PCS     D8

 

//GIPO롤 출력하는 가장 기본 적인 설정

U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ OLED_PCLK, /* data=*/ OLED_PDATA, /* cs=*/ OLED_PCS, /* dc=*/ OLED_PCMD, /* reset=*/ OLED_PRESET);

 

 

// the setup function runs once when you press reset or power the board
void setup() {
  Serial.begin(115200);
  delay(10);
 
  Serial.println("Start..");

  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED, OUTPUT);
  pinMode(KEY_IN, INPUT);   // == pinMode(KEY_IN, INPUT);

  
  u8g2.begin();
 
  u8g2.clearBuffer();          // clear the internal memory
  u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
  u8g2.drawStr(0,10,"Hello World!");  // write something to the internal memory
  u8g2.sendBuffer();          // transfer internal memory to the display

  delay(1000);

 

  u8g2.clearBuffer();          // clear the internal memory
  u8g2.setFontDirection(0);
  u8g2.setFont(u8g2_font_inb24_mf);
  u8g2.drawStr(0, 30, "U");
 
  u8g2.setFontDirection(1);
  u8g2.setFont(u8g2_font_inb30_mn);
  u8g2.drawStr(21,8,"8");
     
  u8g2.setFontDirection(0);
  u8g2.setFont(u8g2_font_inb24_mf);
  u8g2.drawStr(51,30,"g");
  u8g2.drawStr(67,30,"\xb2");
 
  u8g2.drawHLine(2, 35, 47);
  u8g2.drawHLine(3, 36, 47);
  u8g2.drawVLine(45, 32, 12);
  u8g2.drawVLine(46, 33, 12);

  u8g2.sendBuffer();

 
  delay(1000);
 
  u8g2.clearBuffer();          // clear the internal memory

  u8g2.enableUTF8Print();    // enable UTF8 support for the Arduino print() function
  u8g2.setFont(u8g2_font_unifont_t_korean1); 
  u8g2.setFontDirection(0);

 

  //u8g2.firstPage();
  u8g2.setCursor(0, 15);
  u8g2.print("Hello World!");
  u8g2.setCursor(0, 35);
  u8g2.print("안녕 세상");    // Korean "Hello World"

  u8g2.setFont(u8g2_font_unifont_t_korean2); 
  u8g2.setFontDirection(0);

  u8g2.setCursor(0, 55);
  u8g2.print("안녕 세상");    // Korean "Hello World"

 

  u8g2.sendBuffer();

 
}

 

 

// the loop function runs over and over again forever
void loop() {
}

 

----------------------------------------------------------

 

 

출력 화면 예 입니다.

 

   

 

 

 

 

 

 

 

 

 

'공부 > arduino' 카테고리의 다른 글

nodeMCU에 ST7735 Tft Lcd 연결  (0) 2018.03.26
nodeMCU oled 드라이브 Adafruit  (0) 2018.03.26
nodeMCU web 따라하기 3  (0) 2018.03.12
nodeMCU Web 따라하기 2  (0) 2018.03.12
nodeMCU web 따라하기  (0) 2018.03.12

+ Recent posts