본문 바로가기
아두이노 디스플레이

[디스플레이/E-ink] 전자잉크 Heltec 2.13 inch E-ink display V2 (Waveshare 2.13 inch e-paper)

by 작동미학 2020. 7. 9.
반응형

 전자 잉크 디스플레이를 아두이노에 연결하여 작동시킨다. Heltec 2.13 inch e-ink display를 사용했으나 Waveshare 2.13 inch와 스펙이 거의 유사하므로 같다고 볼 수 있다. (단, Heltec은 Waveshare의 RST핀이 없다.)

 

▶ 이 가이드를 따라하면

- 아두이노를 통해 전자잉크 디스플레이를 구동할 수 있다.

 

▶ 부품 설명 및 회로 구성

 아두이노와 연결할 수 있는 다양한 디스플레이를 소개해왔는데, 이 녀석은 그중에서도 좀 독특하다. 아마존 패드에서나 들어봤던 전자잉크 디스플레이다. 중국산 부품으로는 WaveshareHeltec제품을 볼 수 있는데, 사실은 두 제품이 같은 스펙을 추구하는 것으로 보인다. 시중의 라이브러리가 호환된다. 다만, 아래 시험 결과로는 Waveshare가 조금더 비싸고 일반적인 기능을 지니는 것으로 추정된다. 한가지 유념해야 할 것은 두 제품 모두 3.3V에 기반하므로 5V기반 Arduino UNO에서 구동하기 위해서는 Level Converter가 필요하다. Level Converter는 5V의 데이터 핀을 3.3V로 변환해준다. 레벨 컨버터 사용방법은 어렵지 않아 각각 (3V,GND), (5V,GND)를 연결시키고, 양쪽 5V쪽 데이터 핀과 3V쪽 데이터 핀을 각기 1:1로 연결하면 되며 아 가이드(https://bbangpan.tistory.com/103) 를 참조하도록 하자. 이 Level Converter없이는 3.3V 기반 모듈들은 대개 오작동한다.

 여기서 소개할 전자잉크 디스플레이 특성을 잠깐 기술해보면, 신기하게도 전원이 꺼져도 디스플레이 내용을 유지한다는 것(메뉴얼에 의하면 4~6개월간)과 매우 밝은 빛 하에서도, 책 처럼 더 선명해지는 특성을 지닌다는 점이다. 발광으로 빛을 내는 것이 아니라 빛이 반사해서 인지되도록 디스플레이에 잉크를 뿌린듯이 작동하기 때문이다. 그리고 백라이트가 없으며, 내용을 바꿀때만 전력을 소모한다. 따라서 저전력으로 빛이 강한 곳에서 사용하기에는 좋은 조건의 디스플레이라고 생각한다. 다만, 예상할 수 있듯이 반응이 조금 느린 점이 흠이고, 내부적으로는 전원을 연결하여 디스플레이 내용을 바꾸고 다시 꺼지는 과정을 반복하듯이 작동한다. 리프레쉬 타임이 긴 것은 8초까지 된 제품이 있어서 이 부분은 잘 확인이 필요하다. (이 heltec 2.13inch 제품이 메뉴얼상의 리프레쉬 주기가 8초이다)

 

 아래가 heltec 2.13인치 디스플레이 모듈의 사진이다. 

[Heltec 2.13 inch e-ink display V2 – //적 색 지원 / 앞면]

[Heltec 2.13 inch e-ink display V2 – //적 색 지원 / 뒷면]

 

 처음 당혹스러웠던 것은 Heltec 의 공식 github에 있는 라이브러리가 제대로 작동되지 않는다는 점이다. 따라서 Waveshare를 지원하는 GxEPD 라이브러리를 사용했다. (Heltec github의 이슈 탭에에 어느 사용자가 친절하게 이를 가이드하고 있다) https://github.com/ZinggJM/GxEPD 사이트를 방문해 해당 라이브러리를 다운로드 받아, 아두이노 스케치 라이브러리에 등록해두자. (압축 zip으로 다운받아서 아두이노 스케치의 스케치/라이브러리 포함하기/.ZIP 라이브러리 추가 에서 해당 ZIP 골라 추가하자. 혹은 라이브러리 폴더에 압축을 풀어도 된다.)

그러면 파일/예제에 GxEPD의 예시들을 사용할 수 있다.

[GxEPD의 예시들]

 우선 연결을 위해 해당 라이브러리 가이드대로 핀을 연결하자. VCC->3.3V, GND->GND, DC -> D8, SDI->D11, CS->D10, CLS->D13, BUSY->D7에 연결한다. 잠시 후의 사진은 Level컨버터를 붙여서 배선이 복잡하지만 결국 위 연결을 그대로 따른다. 소스 코드의 핀 안내를 따라하면 ESP32등 다른 보드 사용도 가능하다.그리고 여기서는 맨 먼저 라이브러리 내의 GxEPD_Example 예시를 구동해보겠다.

[GxEPD의 보드별 핀 연결 가이드/보드 별로 연결 가이드가 존재한다]

실제 배선 그림은 아래와 같다. 결국 7개의 핀이 위 가이드한 3.3V, GND및 데이터 핀에 연결된다.

[2.13 e-ink display – Arduino UNO 배선, 레벨 컨버터가 중간에 있어서 다소 복잡하다]

[아두이노 보드쪽 핀 연결 확대. 5개의 데이터 핀이 연결된다.]

 배선 연결 후 컴파일 전에 해당 예시 코드의 include 선언을 하나 확정해줘야한다. 2.13 inch B/W/R 3색을 지원하는 아래 헤더의 맨 앞 주석만 하나 삭제해준다. 원래 개별 모듈별 include file 중 하나만 활성화해주면 된다.

[2.13인치 include 선언의 주석을 하나 삭제해서 활성화 시킨다]

 컴파일하여 업로드 하면 몇초간 번쩍거리며 초기화 되다가 꽃모양의 그림이 그려지는 것을 알 수 있다(꽃은 빨간색으로 변한다). 이때 특이하게도 아두이노 보드의 USB전원을 완전히 제거했다가 꼽아야만 작동한다. Waveshare보드에 있는 Reset핀이 Heltec에는 없는데 그 영향인지 모르겠다. 또 하나의 이 모듈의 이 라이브러리 상의 단점은, 처음 init하고 난 후 직후의 디스플레이 명령 한 그룹만 실행된다. 따라서 상기 예시에서도 맨 처음의 이미지 초기화 출력만 작동하고 이 부분을 주석처리하면 그 다음 코너 테스트 코드가 작동한다. 아마도 Waveshare 보드는 이런 작업 없이 잘 되리라 예측된다(단, Waveshare 보드들은 막상 라즈베리파이가 아니면 전용 연결핀을 지닌 별도 아두이노 보드가 필요해보인다.)

 상황은 열악하지만 텍스트 출력을 한번 해보자. 이번에는 PagedDisplayForSmallRam 예시를 선택하고 마찬가지로 하단과 같이 헤더 하나(2.13” b/w/r)만 주석처리를 푼다.

그리고 이번에는 앞서 설명한 것처럼, 이미지 출력 부분을 주석처리하고 텍스트만 출력하도록 한다. 하단 처럼 이미지 출력하는 부위 앞뒤에 주석 마크를 삽입한다. (그래서 init하고 난 후 곧바로 display.drawPaged(showFontCallback)으로 텍스트를 출력하는 부분을 바로 출력시키도록 한다.)

[이미지 출력 부분(노란색 영역)을 통째로 주석처리하였다]

역시 컴파일 업로드 후 아두이노 보드의 USB 전원을 완전히 제거했다가 다시 끼운다. 몇번 초기화 껌뻑이고 난 후 텍스트가 잘 출력됨을 알 수 있다. 맨 하단의 빨간색 글씨도 확인할 수 있다.

[텍스트 출력도 잘 된다]

 다만, 역시 원활한 사용을 위해서는 몇천원 비싸도, Waveshare의 제품을 구매하도록 가이드한다. 경험있는 분들의 이 모듈에 대한 댓글도 기대해본다. 혹시 Heltec이 완전히 잘 작동하는 별도 호환라이브러리가 있는지 필자도 궁금하다.

 

▶ 구매 가이드

2.13 e-ink : https://www.aliexpress.com/af/2.13-e%25252dink.html?d=y&origin=n&SearchText=2.13+e-ink&catId=0&initiative_id=SB_20200708083742 ($10전후)

 

강의 키워드

Waveshare 2.13 inch e-paper, Heltec 2.13 inch e-display V2, e-ink, Arduino, 아두이노, 전자잉크,GxEPD

반응형