ESP32 한글 폰트 - ESP32 hangeul ponteu

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

*169편 후반에 실패했던 사물인터넷 보드 wemos d1r1에서 lcd(ili9341)에 한글 띄우는 부분은 170편에서 간략하게 보충하며 마무리 하였습니다~~~!
LCD에 한글을 사용해보자! 녹칸다의도전 SD카드모듈&2.4인치 LCD쉴드(SPDF5408)
-(초고난이도)이번 내용은 강의라기 보다는 녹칸다의 개인적인 도전이다!
-향후 강의에서 LCD화면에 한글이 나왔으면 좋겠는데 아직 개인적인 예제를 가지고 있지 않기에 한번 구현해보도록 한다!
-다양한 방식이 있겠지만 그냥 녹칸다만의 아이디어를 이용해서 구현해볼 계획이다!
-일단 대략 살펴보기로 아두이노에서 한글을 3bytes UTF8로 인코딩 하는 것 같다!
-즉 한글 하나의 문자가 3bytes를 차지하게 되는데 3bytes hex code를 파일명으로 해서 SD카드에 txt파일을 만들어볼 생각이다!
-한글 하나의 문자에 대해서 txt파일이 하나씩 만들어지게 될것이고 파일안 내용은 해당 한글을 표현하기 위한 mono bitmap이 들어갈 예정이다!
-임의의 한글 string이 입력되었을때 문자를 하나씩 쪼개고 hex code로 변환한다음 SD카드에 해당되는 bitmap을 lcd에 드로잉하는 것이 목표이다!

녹칸다 예제의 중간 결과물~~!

SD카드에서bitmap을읽어서드로잉하는부분.txt

0.00MB

한글과아스키코드를분해하는코드.txt

0.00MB

녹칸다가 만든 한글폰트~~~!(16x16, 24x24)

nock16.zip

1.86MB

nock24.zip

2.01MB

한글폰트에 자음(ㄱ,ㄴ,ㄷ....ㅍ.ㅌ.ㅎ) 단모음(ㅏㅑㅓㅕ....ㅡㅣ) 추가한 폰트파일(2021.01.14)

nock16.zip

1.86MB

nock24.zip

2.01MB


예제169-1 2.4인치 LCD쉴드(SPFD5408)에 한글을 띄워보자!(버전1)
 * 마이크로 SD카드모듈을 내장하고 있으므로 SD카드에 녹칸다 폰트를 집어넣고 활용하면 됩니다~~!
 * 속도가 시원찮긴 한데 녹칸다 만의 방식으로 한글을 디스플레이 하는 것을 목표로 합니다~~!  
 * 버전1 예제에서는 한글을 sram에 저장해놓고 쓸때 string으로 간단하게 활용하는 예제입니다!
 * 생각을 못하고 이후에 개선해서 버전2개 만들어졌는데 그냥 같이 예제 코드로 업로드 합니다~~!

169-1.txt

0.01MB


예제169-2 2.4인치 LCD쉴드(SPFD5408)에 한글을 띄워보자!(버전2)
 * 한글 mono bitmap을 sram에 올려놓고 쓸때 byte array로 저장하는 방식입니다!
 * 버전1 대비 저장공간이 1/2로 줄어드는 효과가 있습니다~!

169-2.txt

0.01MB


예제 169-3 온습도센서가 달려있다고 가정하고 데이터를 디스플레이해보자!
 * 한글을 불러오는데 시간이 꽤나 걸리므로 setup에서 배경화면처럼 띄워놓고 화면에서 변경되는 값인 온도와 습도값만 클리어하면서 한글을 다시 띄우는데 필요한 시간을 최소화 하는 예제~!

169-3.txt

0.01MB


예제 169-4 한글에서 아주 소량의부분에 한해서 계속 다시 그려질 필요가 있을때 적용할만한 예제!
 * 예제는 온습도센서가 있다고치고 구현함!

169-4.txt

0.01MB


예제 169-5 한글을 sram에 올려놓고 쓸때 메모리 최대 범위를 확인해보는 예제!
 * 16x16폰트는 12개쯤 사용할 수 있고 24x24폰트는 8개쯤 사용가능한 것 같다!
 * 그러나 최적화는 하지 않았기에 조금만 신경쓰면 더 가능할 것 같다!

169-5.txt

0.01MB

관련라이브러리(SPFD5408)

//github.com/JoaoLopesF/SPFD5408

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프로토콜에서 데이터를 암호화 해서 주고 받는 프로토콜입니다. }

오늘은 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 폰트를 사용합니다.

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

그래도 점찍기 함수,.

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 업데이트가 되므로 이점도 무척 편할 것 같습니다.

Toplist

최신 우편물

태그