본문 바로가기

🎟Esp32

연구실 프로젝트 - Esp32 u8g2

반응형

이번에는 최근에 다시 개 노가다를 하고있는 U8g2에 대해서 써볼까 한다.

U8g2는 OLED 패널에 그림을 구현할 수 있게 해주는 좋은 라이브러리이다 !

하드웨어통신과 소프트웨어 통신이 있다는데

하드웨어 통신이 더 빠르고 정확해서 대부분 그렇게 사용하고 나도 그렇게 사용하고있다.

얘는 한국에서는 잘 안다뤄지고있는지 관련 자료가 한국어로는 많이 없다..

그래서 외국 자료들과 Git , Stackoverflow, ArduinoForum 등 수없이 많은 자료들을 찾아봤다.

아래에 링크를 올릴테니 참고 바람~!

ESP32 OLED Display with Arduino IDE | Random Nerd Tutorials 

 

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

이 자료는 U8g2 기본 사용법에 대해 간략하게 소개해주는 사이트 인 것 같다. 

 

u8g2reference · olikraus/u8g2 Wiki (github.com)

 

GitHub - olikraus/u8g2: U8glib library for monochrome displays, version 2

U8glib library for monochrome displays, version 2 - GitHub - olikraus/u8g2: U8glib library for monochrome displays, version 2

github.com

이 Git 사이트는 u8g2 라이브러리의 모든 함수에 대해 적혀있다 매우 유용함ㅋㅋ

 

그럼 이제 내 프로젝트를 보면서 소개를 하도록 하겠다 ! 

 

반응형

선언부부터 보면, u8g2와 연결하기 위한 헤더파일들이다.

이 u8g2 라이브러리는 기본 제공 라이브러리가 아니라 설치를 해야 사용 가능하다.

 

아래 U8G2_SH1106~는 OLED 패널의 종류에 따라 다르다.

저거 그대로 구글에 치면 모델에 따른 SSID가 다르기 때문에 찾아보면 된다.

내 OLED 패널은 SH1106을 사용했다.

비트들은 이해를 돕기위해 선언해주었다.

char로 선언된 괴상한 16진수 파일들은 

실제로 화면에서 변환하면 이렇게 도트로 찍혀서 나온다. (일일이 노가다해야함)

캡쳐에있는 16진수들은 일부만 써놨고(디자인팀에서 찍어준 도트라서 함부로 올릴 수 없음 ㅠㅠ)

Online XBM editor (jazzychad.net) 

 

Online XBM editor

 

xbm.jazzychad.net

이 사이트에서 본인이 그리고싶은 그림을 그리면 16진수로 변환해주기 때문에 사용하면 된다.

 

 

 

 

이어서 setup에서는 u8g2를 시작하고,

통신속도를 조절했고,

clearBuffer를 통해 화면을 초기화시켰다.

그러고 LOGO파일(이것도 Char형태의 16진법 배열)을

drawXBM이라는 함수로 표현했는데 함수의 파라미터 설명은

(그림그릴 x축좌표, 그림그릴 y축좌표, 가로길이, 세로길이, 그릴 그림의 배열) 순서이다.

그니까 저 위의 LOGO는 OLED패널의 1,40 좌표에 62*55 사이즈의 LOGO를 그린것이다.

이후에 sendBuffer를 해주면 데이터가 화면에 표시된다! >> 이거 안하면 OLED 패널에 안나옴니당

delay는 저거 로고 1.2초동안 띄우는거.. 안하면 setup이라서 로고 뜨고 바로 사라짐(사실상 못볼수도)

그리고 간단한 함수와 loop이다

루프를 돌면서 chrg_state가 참이면 저 화면을 돌리게 했는데

저 state는 원하는 상태에 따라서 올리고 내려서 화면을 보이게 할 수 있다.

chrg_draw가 되면 do while문을 통해서 chrg_screen이 돌아가는데

저 do문안에 다른 screen 함수를 넣으면 두개 한번에 같이 띄울 수 있음!!

 

chrg_screen은 내 프로젝트가 언어를 한국어, 영어 둘다 지원하는데 

비트를 다르게해서 drawXBM으로 한글과 영어 그림을 띄워준다.

참고로 drawXBM 가로사이즈랑 세로사이즈는 저 char 배열의 사이즈랑 일치해야 원하는 그림으로 나온다

배열 사이즈랑 가로세로길이 잘 맞춰서 하시길 바란다.

아래는 위의 배열을 oled에서 띄운 화면이다

뭐 없네.. 

근데 u8g2는 사실 한 번 띄우기만 성공하면 나머지

x좌표 y좌표 그림은 노가다기 때문에.. 뭐 없긴 하겠따~ 

 

빨리 퇴근하고 시온이네 커플이랑 수란잔 해야지 ㅋㅋ 

오늘은 여기서 끝~ 

반응형