이 블로그는 애드센스 수익으로 운영되고 있습니다.
광고차단앱을 해제해주시면 블로그 운영에 큰 도움이 됩니다.
Please disable Adblock?
본문 바로가기
정보, 기술/개발 모음

전자종이 디스플레이에 이미지 변환해서 표시하기 | 라즈베리파이 활용

by 킨쨩 2021. 8. 22.
반응형

전자종이 디스플레이에 이미지 변환해서 표시하기 | 라즈베리파이 활용

 이번 게시글에서는, 지난 게시글들을 참고하면, 실제로 내가 원하는 이미지를 표시할 수 있는 단계까지 다루어 보았다. 전자 잉크 디스플레이를 구매할 때, 컨트롤러를 함께 구매하지 않고 직접 코딩을 진행해볼 생각이었던 나와 같은 사람들에게 도움이 되기를 바라며 적어보았다. 결코 어려운 내용은 아니니 차근차근 따라가 보도록 하자.


목차

샘플 코드, 라이브러리 설치하기

표시할 흑백적 이미지 만들기

코드 살펴보기 - 화면 갱신용 코드

여담


샘플 코드, 라이브러리 설치하기

 지난 게시글을 참고로, 일단 데모가 제대로 나오는 상황까지 만들어 주자.

https://kin-archive.tistory.com/528

 

전자 잉크 디스플레이 제어하는 방법 | 라즈베리파이 활용

전자 잉크 디스플레이 제어하는 방법 | 라즈베리파이 활용  이번 게시글에서는 waveshare사의 전자 잉크 디스플레이(전자 종이) 제품의 데모, 샘플 코드를 실행시키는 방법에 대해서 알아보도록

kin-archive.tistory.com


표시할 흑백적 이미지 만들기

 이미지를 표시하는 방법에 대해서 위에서 간단히 알아보았다. 그렇다면, 넣어줄 이미지는 어떤 식으로 만들어 내야 할까?

 이 제품의 경우, 빨간색과 검은색을 각각의 파일로 나타내어서 하나로 합쳐주는 형식이다. 다음의 그림을 보면 이해하기 쉬울 것이다.

 원래의 이미지를 2개의 레이어로 나누어주는 것이다. 다만, 검은색 부분이 색이 들어가는 부분이며, 빨간색 레이어를 빨간색으로 나둔채로 넣을 경우, 좀 연하게? 나오기 대문에, 검은색으로 변경해줄 필요가 있다. 

 

 구체적인 방법의 경우, 아래의 포스팅을 참고하도록 하자.

https://kin-archive.tistory.com/536

 

전자잉크 디스플레이용 흑백적(RBW) 이미지 만들기 | 라즈베리파이 활용

전자잉크 디스플레이용 흑백적(RBW) 이미지 만들기 | 라즈베리파이 활용  이번 게시글에서는, 전자잉크 디스플레이를 활용해서 이미지를 표현하기 위한 처리에 대해서 알아보도록 하겠다.

kin-archive.tistory.com


코드 살펴보기 - 화면 갱신용 코드

 examples라는 폴더 안에서 내 디스플레이에 해당하는 파일을 먼저 찾아주자. 해당 파일을 참고로 직접 이것저것 좌표를 찍어주면서 그려나갈 수도 있다. 하지만, 직접 이미지를 넣어서 갱신하는 쪽이 편하므로, 관련이 없는 코드를 싹 다 지운 다음, 다음과 같은 코드를 만들어보았다.

#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import os
picdir = "/home/kimdongsik/e-Paper/RaspberryPi_JetsonNano/python/pic"
libdir = "/home/kimdongsik/e-Paper/RaspberryPi_JetsonNano/python/lib"
if os.path.exists(libdir):
    sys.path.append(libdir)

import logging
from waveshare_epd import epd2in66b
import time
from PIL import Image,ImageDraw,ImageFont
import traceback

logging.basicConfig(level=logging.DEBUG)

try:
    logging.info("epd2in66 b Demo")
    
    epd = epd2in66b.EPD()
    logging.info("init and Clear")
    epd.init()
    epd.Clear()

    logging.info("Read bmp file")
    HBlackimage = Image.open(os.path.join(picdir, 'maki_test0.bmp'))
    HRYimage = Image.open(os.path.join(picdir, 'maki_test1.bmp'))
    epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage))
    time.sleep(3)
    
    """        
    #logging.info("Clear...")
    #epd.Clear()
    """
    logging.info("Goto Sleep...")
    epd.sleep()
    
except IOError as e:
    logging.info(e)
    
except KeyboardInterrupt:    
    logging.info("ctrl + c:")
    epd2in66b.epdconfig.module_exit()
    exit()

차근차근 살펴보도록 하자.

필요한 라이브러리들을 임포트하고 초기화

#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import os
picdir = "/home/kimdongsik/e-Paper/RaspberryPi_JetsonNano/python/pic"
libdir = "/home/kimdongsik/e-Paper/RaspberryPi_JetsonNano/python/lib"
if os.path.exists(libdir):
    sys.path.append(libdir)

import logging
from waveshare_epd import epd2in66b
import time
from PIL import Image,ImageDraw,ImageFont
import traceback

logging.basicConfig(level=logging.DEBUG)

여기서 주의할 점은, 크게 두 가지가 있다.

picdir = "/home/kimdongsik/e-Paper/RaspberryPi_JetsonNano/python/pic"
libdir = "/home/kimdongsik/e-Paper/RaspberryPi_JetsonNano/python/lib"

 위의 두가지 경로가 자신의 것에 맞는지 확인하고, 다르다면 바꿔주도록 한다.

"pwd"라는 명령어를 통해서 경로를 확인할 수 있다.

from waveshare_epd import epd2in66b

 자신이 사용 중인 기종명으로 설정해주도록 하자.

 

실제 실행

try:
    logging.info("epd2in66 b Demo")
    
    epd = epd2in66b.EPD()
    logging.info("init and Clear")
    epd.init()
    epd.Clear()

    logging.info("Read bmp file")
    HBlackimage = Image.open(os.path.join(picdir, 'maki_test0.bmp'))
    HRYimage = Image.open(os.path.join(picdir, 'maki_test1.bmp'))
    epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage))
    time.sleep(3)
    
    """        
    #logging.info("Clear...")
    #epd.Clear()
    """
    logging.info("Goto Sleep...")
    epd.sleep()

 

 로그를 통해서 어디까지 진행되었는지 알 수 있게 표시하고 있다.

logging.info("epd2in66 b Demo")

 내가 원하는 방식으로 메시지를 바꾸어줄 수 있다.

 

초기화와 화면 클리어를 통해서 이미 표시되어 있는 내용을 지워준다. 지우지 않을 경우 잔상이 남게 된다.

    epd = epd2in66b.EPD()
    logging.info("init and Clear")
    epd.init()
    epd.Clear()

 

아래의 명령어로 이미지를 불러온다. bmp형식으로 검은 곳을 지정할 흑백 이미지와 빨간 곳을 지정할 흑백 또는 적백 이미지를 미리 준비하면 된다. 어떻게 만드는지는 아래에서 다루도록 하겠다.

    logging.info("Read bmp file")
    HBlackimage = Image.open(os.path.join(picdir, 'maki_test0.bmp'))
    HRYimage = Image.open(os.path.join(picdir, 'maki_test1.bmp'))
    epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage))
    time.sleep(3)

혹시 화면을 그대로 나 두고 싶다면 아래의 명령어를 그대로 주석으로 남겨두면 되지만, 다시 하얀 화면으로 초기화해두고 싶다면 아래의 명령어를 이용하도록 하자.

    """        
    #logging.info("Clear...")
    #epd.Clear()
    """

마지막으로 갱신을 마치고 종료하는 명령어이다.

    logging.info("Goto Sleep...")
    epd.sleep()

에러 처리 및 중지

except IOError as e:
    logging.info(e)
    
except KeyboardInterrupt:    
    logging.info("ctrl + c:")
    epd2in66b.epdconfig.module_exit()
    exit()

간단히 에러가 발생할 경우 에러 내용을 알려주며, ctrl + c를 누르면 중지해주는 내용의 코드이다. 제대로 세팅했다면 없어도 동작하긴 하지만 남겨두도록 하자.


여담

 이번 게시글의 내용을 충분히 잘 따라왔고, 적절한 이미지를 선택했다면 아래와 같이 예쁘게 잘 표시가 될 것이다.

위의 순서에 따라서 실제로 사진을 표시해본 모습

 

 참고로 전자 종이의 특징을 살린다면, 다음과 같은 것들을 표시하는 것이 재밌을 것 같다.

  • 달력
  • 시계
  • 일기예보
  • 할 일 관리
  • 온습도계

실제 알리 익스프레스의 상품 설명에 있는 활용 예시

 나의 경우, 위의 몇 가지 기능들을 합쳐서 직접 이런저런 정보를 표시해주는 디스플레이를 만들고, 향후 3D 프린터를 구매하여 라즈베리파이와 딱 붙여서 이용해볼 생각이다. 언젠가 프로젝트가 완수되면 그때 간단히 정보를 공유해보도록 하겠다. 


맺음말

 이번 게시글에서는 라즈베리파이와 전자 종이 디스플레이를 활용해서 화면에 표시하는 부분까지를 다루어 보았다. 나는 현재 2.66인치의 디스플레이를 이용하고 있는데, 간단한 이미지를 표시하는 스트랩 정도로 활용할 수 있을 것 같다. 아무튼, 전자 잉크 디스플레이를 활용하는 사람들에게 도움이 되기를 바라며 이만 글을 마친다.

밑에 공감 버튼 한 번씩 클릭 부탁드립니다! 
내용에 관한 질문이나 의견이 있다면 댓글로 남겨주세요.

인스타: @kkingchangg

크라우드픽: @Gehdtlr2547

 

일본 유학 KIN쨩 작가 - 크라우드픽의 사진, 이미지, 일러스트, 캘리그라피

저작권 걱정 없는 상업용 이미지 서비스 크라우드픽에서 일본 유학 KIN쨩 작가의 이미지를 무료로 사용해보세요

www.crowdpic.net

Copyright 2021 KIN All rights reserved. 
KIN

 

반응형

댓글