본문 바로가기
IT관련/ESP32

[ESP32] I2C OLED 한글출력

by TODORO 2019. 11. 14.

Smart home system에 사용할 controller로 ESP32를 정하고 준비중입니다.

이전에는 SPIFFS Web Server를 올려 보았습니다.

각종 html및 Java library와 이미지들을 SPIFFS에 올려 놓고 서비스하는 것입니다.

생각보다 동작은 잘 했습니다만 아무래도 어마무시 쌈박하게 빠르지는 않아서 파일 받아오는 동안 굼뜨는 것은 어쩔수가 없습니다.

결국 HTML5에 추가된 manifest cache 기능을 이용할려고 했으나 크롬에서는 동작을 하지 않더군요.

HTTP에서는 보안문제 때문에 지원을 하지 않고 manifest파일은 무시를 해버리는 것 같습니다.

대신 MS의 에지에서는 정상적으로 동작을 하더군요.

manifest파일을 발견하면 다시 읽어서(꼭 다시 읽을 필요는 없을텐데 이미 읽어가놓고..)캐시를 해놓고 다음부터는 읽지않고 케시에 있는 것을 사용하더군요.

케시를 지우거나 manifest file의 내용을 변경하면 새로 리프레시가 됩니다.

하지만 크롬에서는 동작을 하지 않아서 사용이 어렵게 되었습니다.

크롬에서 사용하려면 HTTPS로 통신을 해야 하는데 ESP32의 경우 아직 라이브러리가 초기 단계인 것 같습니다.

겨우 SSL로 통신해서 기본 컨셉만 시험하는 상태인 것 같습니다.

하지만 HTTP는 보안 문제 때문에 대부분 HTTPS로 이전하는 추세이므로 조만간 HTTPS라이브러리들도 정리가 되지 않을까 기대해 봅니다.

{ 참고로 HTTPS는 HTTP프로토콜에서 데이터를 암호화 해서 주고 받는 프로토콜입니다. }

ESP32 에 SSD1306 OLED 연결

오늘은 SSD1306을 드라이버로 사용하는 OLED를 ESP32에서 시험해 보았습니다.

이놈은 I2C로 연결을 합니다.

OLED 라이브러리들은 널려 있지만 디스플레이 라이브러리들의 가장 큰 문제는 안타깝게도 한글이 지원되지 않는 것 입니다.

해외 엔지니어들이 한글까지 구현해 주기를 기대하는 것은 너무 염치 없기 때문이지요.

다행이 이전에 Arduino mega와 ESP8266용으로 포팅해 놓은 것이 있어 ESP32에도 시험해 보았습니다.

I2C는 핀 두개만 사용하는 지라 딱히 호환성에는 문제가 없습니다.

그래서 싱겁게 바로 동작이 되네요..

초기화 하고 Wi-Fi 연결해서 DHCP에서 IP받아온 상태 입니다.

콘솔로 디버깅 메세지 쵸시할수 있지만 이렇게 Display하나 달아놓으면 Self로 동작시킬때 아주 편합니다.

최대 ESP32에서는 최대 클럭이 800K 까지 되는데 I2C는 역시 느립니다

이전 TFTLCD의 SPI는 클럭이 40Mhz였습니다.

SPI모드 OLED를 찾아봐야 겠습니다.

해상도가 너무 작아 참 거시기 합니다. ^^

그래도 가격이 싸니 간단한 Display가 필요하면 요긴하게 쓸수 있을 것 같습니다.

핀도 2개 밖에 안쓰고 I2C라서 여러가지 디바이스를 멀티로 병렬로 물려도 되기 때문입니다.

한글 출력 입니다.

Arduino IDE에서는 에디터에서 UTF code를 사용해서 한글을 3Byte로 표현 합니다.

처음에 이거 몰라 엄청 삽질 했었네요.



외부에서 받은 자료는 대부분 euc-kr (KSC5601) 2byte code를 사용하므로 이 코드 문자열 출력 함수도 만들어 두었습니다.

화면이 작아서 8x8 영문포트도 추가 했습니다.

기본은 8x16 영문과 한글과 특수문자는 16x16 폰트를 사용합니다.

쓸일이 있을까 싶지만...

그래도 점찍기 함수,.

선긋기 함수,

박스 그리기 및 채운 박스그리기 함수

원그리기 및 채운 원그리기 함수

타원 함수 및 채운타원 함수

HW 스크롤기능 (LEFT)

HW 스크롤기능 (RIGHT)

그래도 간단한 표시는 가능 할 것 같습니다.

ESP32에서 OLED 구동하는 것은 이정도면 될것 같습니다.

이번주에는 manifest Cache기능이 크롬에서 안된다는 것 알아내려고 이틀이나 삽질 했었네요.

그래도 2~3초 로딩시간 한번 기다리고 Ajax와 JSON을 사용해서 가능하면 화면 Refresh 없이 사용해서 커버를 할 생각 입니다.

그러면 위와 같은 java library들을 SPIFSS에 넣고 사용할 수 있을 것 같습니다.

그리고 인터넷이 연결되는 상황이라면 라이브러리 파일들을 CDN에서 받아오게 하면 되기 때문에 대부분의 경우 큰 문제는 없을 것 같습니다.

ESP32 SPIFSS에서 받아오는 경우는 인터넷이 안되거나 로칼서버를 운영하지 않거나

제품 초기 설정에서 SSID나 Password를 아직 입력하지 않은 상태일때 이 모드로 접속하면 손쉽게 네트웍에 동참 시키고 파라메터 설정이 가능하리라 생각합니다.

그리고 ESP32에서는 mDNS 도 포팅되어 있고 AP_MODE(Access Point mode) 와 Station Mode를 동시에 지원하기 때문에 잘 사용하면 설정시에 요긴하게 사용이 가능 하리라 생각합니다.

OLED는 개당 2$정도 면 구입할수 잇어서 가격이 크게 비싸지 않습니다.

추가회로도 거의 없기 때문에 하나씩 달아두면 내부 상태 표시하면 아주 좋을 것 같습니다.

{ 128x160 TFT LCD가 3$정도 하네요 차라리 이게 더 나을것 같아 주문해 두었습니다.

아무래도 SPI에 Color가 더 유용할것 같구 해상도도 조금은 더 커서 여유로울것 같습니다. }

다음에는 미뤄두었던 TFT LCD에 한글 출력 루틴을 추가하는 작업을 해야 할것 같습니다.

가능하면 원본 하위 라이브러리 의존성을 없에야 라이브러리 업데이트 대응이 쉬울 것 같은데 이번 부터는 구조를 잘 설계해봐야 겠습니다.

이렇게 해서 이번주도 홀러덩 지나가 버렸네요.

한글 출력 끝내면 OTA좀 연습해서 F/W업데이트를 무선으로 할수 있게 되면

커스텀 보드들 설계좀 해서 그간 만들지 않고 미뤄왔던 여러가지 것들을 만들어 보려고 합니다.

식물성장등, 집진기 컨트롤러, 화장실 조명 및 팬제어, 싱크대 조명 및 팬제어, 자작 공기청정기 콘트롤러 등등등 그간 마땅한 컨트롤러가 없어서 미뤄두었던 것들을 일거에 이놈을 사용해서 해결하면 될 것 같습니다.

가장 큰 덩치가 BLE 인데 이경우 H/W는 손댈것 없고 SW만 구현하면 되므로 HW설계에 큰 영향은 주지 않을 것 같기 때문입니다.

그리고 OTA로 연결해서 웹상에서 FW 업데이트 하면 되므로 대부분은 케이스 분해하거나 통신선 연결할 필요 없이 F/W 업데이트가 되므로 이점도 무척 편할 것 같습니다.


'IT관련 > ESP32' 카테고리의 다른 글

[ESP32] LCD Nixie module #2  (0) 2019.11.18
[ESP32] SPIFFS 를 사용한 WebServer  (0) 2019.11.13
[ESP32] LCD Nixie module #1  (0) 2019.11.13
[ESP32] JPG Image 출력 시험  (0) 2019.11.13
[ESP32] LCD 드라이버 선택(TFT_eSPI)  (0) 2019.11.09

댓글