아두이노 코딩-109: WeMos LOLIN 보드의 I2C lcd 및 OLED 디스플레이 출력

codingart(66)
Published in
#kr
Words
398
Reading
2 min
Listen
Play
8y

noname01.png

아두이노 우노 보드에서 I2C 인터페이스를 사용하여 I2C 1602 lcd 디스플레이 하는 방법을 일전에 상세하게 게재했었다. 아래 사이트를 참조하자

Reposting: 초보자를 위한 아두이노 코딩 입문-14: I2C인터페이스 1602 LCD 디스플레이 출력
https://steemit.com/kr/@codingart/steemit

아두이노 보드에서는 아날로그 핀 A5(SCL) 와 A4(SDA)를 I2C 인터페이스를 위해 사용한다. 아두이노 우노의 PINOUT 다이아그램을 보면 I2C 인터페이스가 두군데 있음을 알 수 있다. 사용자는 어느 쪽을 사용해도 무방하므로 배선의 편의성을 감안하면 된다.

noname02.png

마찬가지로 WeMos LOLIN 보드의 PINOUT 다이아그램에서 I2C인터페이스 핀들의 위치를 찾아보자. WeMos LOLIN 보드 자체이 PINOUT 다이아그램에서는 I2C 핀 정보가 없으므로 대신 ESP32 칩의 PINOUT 다이아그램을 참조하여 guessing 하여 찾도록 하자. ESP 다이아그램에서 Wire SCL, Wire SDA를 찾을 수 있으며 각각 GPIO 22번과 GPIO 21번으로 지정되어 있다. GPIO 란 General Purpose Input Output의 약어로 1970년대부터 반도체 설계에서 사용하는 일종의 표준으로서 특히 호환형 반도체 칩을 만들어 사용할 경우에 중요한 핀 번호이다.

noname03.png

이 정보를 바탕으로 아래와 같이 LOLIN 보드 뒷면에서 SCL과 SDA 핀을 찾도록 하자.

noname04.png
아래에 첨부된 I2C lcd 디스플레이 테스트해볼 코드는 아주 간단하다. I2C 인터페이스를 사용하므로 헤더 영역에 Wire.h 라이브러리와 아울러 I2C 1602 lcd를 지원하는 LiquidCrystal_I2C.h 라이브러리를 불러 온다.

LiquidCrystal_I2C 클라스 선언에서 lcd 의 address 즉 0x3F 와 한 줄 당 문자수 16, 줄 수 2 를 부여한다. 파일을 저장하고 컴파일 업로딩해 보자.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(2,0);
lcd.print("Hello, LOLIN!");
}
void loop() {
}//끝

컴파일 업로딩해 본 결과 경고 메시지와 함께 아두이노 칩인 AVR 과 LOLIN의 ESP32 아키텍처 차이로 인해 분하게도 제대로 출력이 되지 않았다. 아쉽지만 안된다는 결론이다. 이와 같이 실패하는 단계에서 느끼는 좌절감 자체는 오히려 많이 해본 사람들이 초보자 보다 훨씬 크다.

noname05.png

그렇다고 여기에서 끝낼 수는 없다. 재미를 가지고 하는 아두이노 코딩은 당장 좌절감을 줄 정도로 어려움이 있더라도 또 다른 방법을 찾아 계속되어야 한다. 그래서 지난번에 WeMos 보드에 인터페이스 헸던 0.96 인치 OLED 디스플레이로 바꿔서 시도해 보기로 한다. ESP8266 WeMos 보드에서의 설치 및 코딩은 아래 사이트를 참조하기 바란다. ssd1306 라이브러리를 설치하는 방법을 참고하기 바란다.

아두이노 코딩-40: weMOS D1(Retired) 시계 0.96 모노크롬 OLED 디스플레이
https://steemit.com/kr/@codingart/40-wemos-d1-retired-0-96-oled

여기에서는 SSD1306 라이브러리를 WeMos LOLIN 보드에 적용해 보기로 하자.
배선 구조 자체는 커버 사진에서처럼 동일하게 가져간다.

단 코딩에서 주의할 점은 ESP8266 WeMos에서는 핀 번호앞에 알파벳 D를 붙였으나 LOLIN 보드에서는 그냥 핀 번호 숫자를 쓰도록 하자.

SSD1306 display(0x3c, D14, D15); //SDA,SCL, ESP8266 WeMos 보드
SSD1306 display(0x3c, 21, 22); //SDA,SCL, WeMos LOLIN 보드

컴파일 업로딩하여 커버 사진과 같이 성공적인 출력을 확인해 보자.

//WeMos_lolin_oled_01
#include <Wire.h>;
#include <SSD1306.h>
SSD1306 display(0x3c, 21, 22); //SDA,SCL

void setup() {
Serial.begin(115200);
display.init();
display.flipScreenVertically();
}

void loop() {
display.clear();
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_24);
display.drawString(0, 10, "Steemit!");

display.drawString(0,36,"LOLIN");
display.display();
delay(10);

}//끝