본문 바로가기
코딩/아두이노

waveshare 전자잉크 폰트크기 변경하는 방법

by DIYver 2022. 9. 7.

외주 개발 의뢰로 접하게된 waveshare 의 전자잉크 디스플레이...
폰트 사용에 있어서 문제가 있는 것을 확인했다...

기존의 유명한 U8glib 으로 waveshare 의 디스플레이 지원이 공식적으로 되지 않기에
waveshare 에서 제공한 라이브러리로 개발을 진행중에 있다.

 

https://diyver.tistory.com/198

 

ESP32 에서 waveshare 전자잉크 디스플레이 사용하는 방법

이번에 외주 개발 의뢰를 받았다. waveshare 사의 EPD 즉 전자잉크 디스플레이를 사용한 제품 개발이었어서 처음사용해보는 김에 정리를 해보려 한다. 일단 ESP32 나 ESP8266 이나 아두이노등 대부분의

diyver.tistory.com

waveshare EPD(전자잉크 디스플레이) 처음 사용기를 다룬 이전 포스트

 

사용중에 큰 문제가 있는게, 너무나도 지원하는 폰트가 없다는 것이다.

영어 폰트도  8, 12, 16, 20, 24 밖에 없어서 글자가 작은것 밖에 출력이 안되는 것이다.

폰트가 얼마 없을 수 있는 점, 백번 양보해서 이해가 된다.
그런데 폰트 크기를 키울 수가 없다.
제공되는 기본 함수들을 보면 폰트를 몇배 더 키워서 출력하는 함수는 없었다.

U8glib 처럼 unifont 로 지원을 해줬으면 좋겠는데,
이 기본 라이브러리는 문제가 좀 있는 것 같다.

이러면 한글폰트 사용도 힘들 것으로 보여진다.
어떻게든 U8glib 을 적용시킬 방법을 고민해 봐야하는 상황이다.

 

아무튼 한글은 둘째 치고, 알파벳과 숫자라도 크기를 키워서 사용을 해보도록 하자.

제공된 라이브러리의 폰트 파일중 16pixel 폰트 파일을 열어본다.


코드를 살펴보면 이런 식으로 데이터가 저장되어있다.
아스키 코드 순서대로 해당 데이터가 위치해 있다.

0x00 ~ 0xFF 까지
이진 비트로 표현 하면 0000 0000  ~ 1111 1111  이렇게 된다.

주석에서 보면 1인 부분만 #으로 표현해놓은 것을 볼 수 있다.

즉 0이면 해당 pixel 소자가 off 되고
1이면 해당 pixel 소자가 on 되는 방식이다.
(반대로도 가능하다)

코드의 마지막을 보면

이렇게 글자 하나의 가로 세로 pixel 크기를 지정하는 설정이 있다.

가로 11, 세로 16pixel 의 크기를 갖고 있다.

위의 코드를 보면 한줄에 16bit, 즉 16pixel을 표현할 수 있지만,
그중에서 앞에서부터 11bit 만 사용한다는 뜻이다.
나머지는 잘라낸다는 뜻이 된다.
해당 값을 줄이면 자간이 좁아지게 된다.
(해당 폰트는 한줄에 8bit + 8bit 이므로, width값이 9보다 작아지면 안된다.)

세로는 16pixel로 고정된 값이다. 
해당 값을 변경하면 제대로된 출력이 되지 않는다.

 

즉 구동방식을 보면 해당 폰트 파일의 데이터 배열을 일정하게 나누어서
아스키 코드값에 대응 시킨 것이다.

 

해당 내용을 토대로 나만의 폰트를 만들어 볼 수 있다.

필자의 경우 서울남산체를 이용했으며,
실제 폰트 크기는 36pixel 이지만, 상하 여백을 주어 48pixel로 만들었다.

 

해당 폰트의 가로 세로 크기를 지정하는 설정하는 부분에서는

해당 폰트는 가로 33, 높이 48 pixel 로 설정을 해주었다.
폰트 한줄이 8bit + 8bit + 8bit + 8bit + 8bit 로 구성되어 있기 때문에
한줄에 최소 33bit 가 되어야 구역을 나눔에 있어서 문제가 생기지 않기 때문이다.

폰트 이름도 Font48r 로 변경해주었고,
폰트 파일 이름도 변경해준다.

 

그리고 동일 폴더 내에 있는 fonts.h 헤더파일을 열어주고
extern sFont Font48r; 
을 추가해주어 폰트 등록을 완료시켜준다.

 

이렇게하면 이제 큰 글자도 출력이 가능해지게 된다.

 

위의 80810015 는 24pixel,
Hyundai 는 20pixel,
표시해둔 A21 는 직접 제작한 폰트파일의 36pixel 폰트로 출력이 되는 것을 확인할 수 있다.

중앙에 C2352 가 서울남산체 36pixel 폰트이다.
확실히 선명하고 글자가 크게보인다.

확실히 여럿이서 사용하는 디스플레이가 아니다보니 정보가 너무 부족한 것이 많고,
지원되는 기능이 너무 적은 점이 아쉬운 디스플레이가 아닌가 생각든다.

제조사 개발팀에서 계속 꾸준히 지원을 해주고 업그레이드를 해주어야 하지 않나 싶다.

 

************************************************************

폰트 cpp 파일 제작은
jinhyeong0618@naver.com 메일로 
폰트ttf 파일로 제공시 cpp파일로 제작해드리며
비용은 1만원 발생합니다.

*************************************************************

댓글