라즈베리파이 Waveshare e-Paper(e-ink) 사용하기

Updated:

라즈베리파이에서 e-paper 전자잉크를 사용하는 방법을 알아보도록 하겠습니다. 라즈베리파이 용 디스플레이로 LCD나 모니터, TV 등의 출력을 많이 사용하는데, 전자잉크(e-ink)도 사용할 수 있습니다. 프로젝트 활용 목적에 따라 전자잉크 장치가 유용하게 쓰일 수 있습니다.

그럼 라즈베리파이에서 전자잉크(e-Paper) 사용하기를 시작해봅니다.

1. 전자잉크란? (e-Papaer/e-ink)

라즈베리파이에서 사용할 수 있는 여러 디스플레이가 있습니다. LCD, OLED, 모니터, TV 등.. 그리고 전자잉크(e-paper/e-ink)가 있습니다. 본 글이 전자잉크를 본격적으로 소개하는 글이 아니므로 간략히 장단점만 위주로 소개하겠습니다. 전자잉크는 두 개의 패널 사이에 마이크로캡슐을 넣어두고 전기자극으로 캡슐을 상하단으로 이동시켜서 전자종이에 명암을 표시하는 방법입니다. 전자잉크의 큰 장점은 전력소모가 적다는 점입니다. 마이크로캡슐을 이동시키고 나면 전원이 차단되어도 표시된 글자나 그림을 유지하는게 가능합니다. 그리고 LCD 등과 다르게 빛에 강합니다. 밝은 태양광 아래서도 화면이 선명하게 보이며 반사광이 없습니다. 단점으로는 다양한 색상 표현이 힘들고, 보통 검은색이나 혹은 추가로 1~2개 색만 표현 가능한 패널로 구성됩니다. 그리고 대기 상태의 전력소모는 적지만, 화면 전환시에는 전력 소모가 많고 잔상이 남는 이슈가 있습니다. 화면 전환에 걸리는 시간이 긴 단점도 있습니다.

2. Waveshare 전자 잉크(e-Paepr) 패널 소개

라즈베리파이에 설치해 볼 전자 잉크는 Waveshare 사의 2.13inch e-Paper HAT 버전입니다. Waveshare 사는 임베디드 관련한 부품을 생산하는 중국 회사입니다. 라즈베리파이에 사용할 수 있는 부품도 많이 출시했습니다. e-Paper는 1.54인치부터 크게는 9.7인치 제품까지 생산합니다.

인터페이스는 SPI를 사용하는데, Module 버전, HAT 버전 그리고 raw panel 버전이 있습니다. HAT 버전은 라즈베리파이의 HAT에 바로 꼽으면 동작을 하기 때문에 편하고 초보자들에게 적합합니다. Module 버전은 SPI 인터페이스 연결을 전선으로 해주어야 합니다. raw panel 버전의 경우는 PCB가 없는 패널만 제공되는 모듈로 드라이버 모듈을 따로 구매하여야 합니다.

색상 별로는 Black/White만 표시가능한 것이 기본이고, 모듈에 따라 3색 버전이 있습니다. Black/White/Yellow나 Black/White/Blue 등의 구성이 있으므로, 용도에 따라 선택하시면 됩니다.

3. 전자 잉크(e-Paepr) 패널 장착하기

라즈베리파이 제로W에 e-Paper 패널을 장착해보겠습니다. 라즈베리파이3 모델 B+도 동일한 HAT 형식을 사용하기 때문에 장착 과정은 동일합니다. 제가 구매한 패널은 라즈베리파이 제로W와 사이즈가 같은 2.13인치의 HAT 버전으로 색상 구성은 Black/White입니다. 알X익스프레스에서 17달러에 구매했습니다.

박스 구성품입니다. HAT 버전의 e-Paper와 SPI 와이어도 같이 왔습니다. Module 버전인 경우는 이 SPI 와이어를 사용해서 라즈베리파이에 연결을 해야합니다. HAT 버전도 이 SPI 와이어를 사용할 수 있습니다만 저는 HAT을 사용해서 라즈베리파이에 연결할 계획입니다.

e-Paper 앞면입니다. 출고시에 세팅된 화면이 아직까지 표시되고 있습니다. e-Paper의 특성상 전원이 차단되도 디스플레이 상태를 유지합니다.

e-Paper 뒷면입니다. HAT 버전용 부품이 장착되어있습니다. 라즈베리파이 제로W HAT에 연결할 것입니다.

HAT에는 핀이 40개(20x2)로 구성되어 있기 때문에 장착이 생각보다 뻑뻑한 느낌입니다. HAT 장착이 처음이시면 일단 아래 모습처럼 핀 1~2개만 먼저 끼워보시기 바랍니다. 이렇게 끼워보면 핀이 어느 정도 들어가야 하는지 가늠이 됩니다.

그리고 긴 방향의 양 끝으로 힘을 번갈아주면서 살살 눌러주면 조금씩 들어가게 됩니다. 모듈이 부서지지 않도록 주의해야 합니다.

장착이 완료된 모습입니다. 혹시, HAT이 아니라 SPI 와이어를 직접 연결하시려면 Waveshare 사의 Hardware interface 정보를 참고하세요.

4. Raspberry Pi Configuration Tool (raspi-config) 설정

Raspberry Pi Configuration Tool를 실행하여서 SPI와 I2C 인터페이스가 enable 상태인지 확인합니다. GUI 메뉴에서 Tool을 실행하던지 쉘에서 rasp-config를 실행하면 됩니다.

메뉴 위치는 5 Interfacing Options Configure connections to peripherals -> SPI로 진입하여 enable 선택합니다. 같은 위치에 있는 I2C 인터페이스도 enable 선택합니다.

i2c 커널 모듈 로딩을 위해서 커널 모듈 설정 파일에 i2c-devi2c-bcm2708을 기재하여 줍니다. i2c-dev는 기본 로딩 상태이므로, i2c-bcm2708만 추가하면 됩니다.

pi@raspberrypi:~ $ sudo vi /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

i2c-dev
i2c-bcm2708

5. 라즈베리파이 라이브러리 설치하기

Waveshare 사에서 각 e-Paper 모듈 별로 데모 파일을 제공하고 있습니다. 2.13inch e-Paper 데모파일에서 가장 최신의 파일을 다운로드 받습니다. 다른 인치의 모듈을 선택하셨다면 해당 모듈의 파일을 다운로드 받습니다.

7zip 파일을 압축해제하면 아래와같은 폴더구성을 볼 수 있습니다. arduino 용 데모 코드도 있네요. 우리는 raspberrypi에 설치할 것이므로, 해당 폴더를 살펴보겠습니다. 데모는 bcm2835, python, wiringpi 3개 라이브러리(?) 형태로 구성되어 있습니다.

pi@raspberrypi:~ $ tree -dL 2 2.13inch_e-Paper_HAT-code
2.13inch_e-Paper_HAT-code
├── arduino
│   ├── epd2in13-demo
│   └── libraries
├── raspberrypi
│   ├── bcm2835
│   ├── python
│   └── wiringpi
└── stm32
    ├── BSP
    ├── Drivers
    ├── Fonts
    ├── Inc
    ├── MDK-ARM
    └── Src

14 directories
pi@raspberrypi:~ $

bcm2835, python, wiringpi 3개 데모 라이브러리는 모두 별개입니다. 3개 중에 하나만 선택하셔서 설치하고 e-Paper를 사용할 수 있습니다. bcm2835와 wiringpi는 C를 기반으로 한 라이브러리이고, python은 이름과 같이 python을 기반으로 하는 라이브러리입니다. 저는 개인적으로 초보자분들이 접근하기 쉬운 python 라이브러리를 추천합니다. C언어 기반의 코드 보다 이해하기도 쉽고 실행하기도 편하기 때문입니다. 따라서 python 라이브러리를 사용하는 방법을 주로 설명하고, bcm2835와 wiringpi는 설치 커맨드만 간단히 소개하도록 하겠습니다.

5.1 python 라이브러리 설치 및 데모 실행하기

e-Paper를 사용하기 위한 관련 python 라이브러리를 설치합니다. 설치할 목록은 python-dev, python-rpi.gpio, python-smbus, spidev, python-imaging, FreeMonoBold.ttf 입니다.

라이브러리 설치전 최신 apt 업데이트를 해줍니다.

#!/bin/bash
sudo apt-get update

python-dev, python-rpi.gpio, python-smbus , python-imaging 패키지 설치하기

#!/bin/bash
pi@raspberrypi:~ $ sudo apt-get install python-dev python-rpi.gpio python-smbus python-imaging
Reading package lists... Done
Building dependency tree
...
Setting up python-smbus:armhf (3.1.2-3) ...
Setting up i2c-tools (3.1.2-3) ...
Processing triggers for man-db (2.7.6.1-2) ...
pi@raspberrypi:~ $

SPI 인터페이스를 사용하기 위해 spidev 라이브러리를 설치합니다. spidev 다운로드 페이지에서 최신 버전의 압축파일을 다운로드 후 아래와같이 압축 해제 합니다.

#!/bin/bash
pi@raspberrypi:~ $ tar xvf spidev-3.2.tar.gz

압축이 해제 완료되면 해당 폴더로 이동 후에 install 명령을 실행합니다.

#!/bin/bash
pi@raspberrypi:~ $ cd spidev-3.2
pi@raspberrypi:~/spidev-3.2 $ sudo python setup.py install
running install
running build
...
running install_egg_info
Writing /usr/local/lib/python2.7/dist-packages/spidev-3.2.egg-info
pi@raspberrypi:~/spidev-3.2 $

마지막으로 데모 스크립트가 FreeMonoBold.ttf를 사용하기 때문에 해당 폰트 파일을 설치해야합니다. www.wfonts.com에서 zip 파일 다운로드하면 FreeMonoBold.ttf 파일이 포함되어 있습니다. FreeMonoBold.ttf 파일을 폰트 설치 경로에 복사만 하면 됩니다. 아래와같이 다운로드 후에 기재된 파일 경로로 옮겨주세요.

#!/bin/bash
pi@raspberrypi:~/ $ wget https://www.wfonts.com/download/data/2016/04/26/freemono/freemono.zip
pi@raspberrypi:~/ $ unzip freemono.zip
pi@raspberrypi:~/ $ sudo mkdir -p /usr/share/fonts/truetype/freefont/
pi@raspberrypi:~/ $ sudo cp FreeMonoBold.ttf /usr/share/fonts/truetype/freefont/

이제…python 데모 코드를 실행해봅니다. 데모 코드가 존재하는 파일 경로로 이동하여서 main.py 파일을 실행합니다.

#!/bin/bash
pi@raspberrypi:~/2.13inch_e-Paper_HAT-code/raspberrypi/python $ python main.py

모든 설치가 정상 완료되었으면, 변하는 화면을 볼 수 있습니다ㅎ

5.2 wiringpi 라이브러리 설치 및 데모 실행하기

wiringpi는 projects.drogon.net에서 다운로드와 설치 방법에 대해 소개되어있습니다. wiringpi는 C언어로 작성된 라이브러리로 간략히 설치 명령어만 나열하겠습니다.

#!/bin/bash
pi@raspberrypi:~ $ sudo apt-get install git-core
pi@raspberrypi:~ $ git clone git://git.drogon.net/wiringPi
pi@raspberrypi:~ $ cd wiringPi
pi@raspberrypi:~ $ ./build

이제 wiringpi 데모 코드가 있는 폴더로 이동해서, 데모 프로그램을 실행합니다.

#!/bin/bash
pi@raspberrypi:~ $ cd 2.13inch_e-Paper_HAT-code/raspberrypi/wiringpi/
pi@raspberrypi:~/2.13inch_e-Paper_HAT-code/raspberrypi/wiringpi $ ./epd

5.3 bcm2835 라이브러리 설치 및 데모 실행하기

bcm2835는 www.airspayce.com에서 다운로드와 설치 방법에 대해 소개되어있습니다. bcm2835 역시 C언어로 작성된 라이브러리로 간략히 설치 명령어만 나열하겠습니다.

#!/bin/bash
pi@raspberrypi:~ $ wget -P http://www.airspayce.com/mikem/bcm2835/bcm2835-1.57.tar.gz
pi@raspberrypi:~ $ tar xvf bcm2835-1.57.tar.gz
pi@raspberrypi:~ $ cd bcm2835-1.57/
pi@raspberrypi:~/bcm2835-1.57 $ ./configure
pi@raspberrypi:~/bcm2835-1.57 $ make
pi@raspberrypi:~/bcm2835-1.57 $ sudo make check
pi@raspberrypi:~/bcm2835-1.57 $ sudo make install

이제 bcm2835 데모 코드가 있는 폴더로 이동해서, 데모 프로그램을 실행합니다. bcm2835 라이브러리는 관리자 권한이 필요해서 꼭 sudo로 실행하여야 합니다.

#!/bin/bash
pi@raspberrypi:~ $ cd 2.13inch_e-Paper_HAT-code/raspberrypi/bcm2835/
pi@raspberrypi:~/2.13inch_e-Paper_HAT-code/raspberrypi/bcm2835 $ sudo ./epd

데모 라이브러리 3개 bcm2835, python, wiringpi를 모두 실행해보신 분들은 알아차리셨겠지만, 3개 데모 코드의 결과물(디스플레이 내용)은 모두 동일합니다. 같은 내용을 어떤 라이브러리를 사용했냐의 차이만 있을 뿐 입니다.

6. python 데모 코드 응용하기

이제 e-Paper 설치 과정은 완료되었습니다. python 데모 코드를 사용해서 간단히 bmp 이미지 파일을 출력해보겠습니다. 2.13inch_e-Paper_HAT-code/raspberrypi/python 데모 코드의 main.py 파일을 살펴보면 파이썬을 아시는 분들은 바로 어떤 식으로 동작하는지 파악하실 수 있을 것입니다.

데모 코드의 main.py 파일에서 이미 bmp 파일을 디스플레이 하는 코드가 있으니, 쉽게 이해가 될 것입니다. 모형을 그리거나 텍스트를 출력하는 부분은 주석처리하고 이미지 파일만 출력하게 남겨두었습니다. 이미지는 bmp 형식을 사용하여야 하고, 2.13인치 e-Paper는 128x250 pixel 사이즈 이미지 파일을 넣어줘야 합니다. 인치 별로 디스플레이 되는 pixel 사이즈가 다르니, 이 점은 장치별로 확인 바랍니다.

블로그 로고를 bmp 파일 형식으로 변환해서 e-Paper에 디스플레이 해보았습니다. 장치 해상도가 낮아서 그림이 많이 깨져보이네요.

python 데모 코드 사용을 추천한 이유 중 하나 사용하기 쉽다는 이유였는데요. python 데모 코드는 bmp 파일을 바로 디스플레이가 가능합니다. C언어로 작성된 bcm2835와 wiringpi는 Image2Lcd.exe라는 프로그램을 사용해서 bmp 파일 정보를 array 정보로 c file 형태로 변환해서 컴파일 하여야 합니다.

python 데모 코드를 살펴보면 bmp 파일로 그림을 그리거나 텍스트를 표시하는 방법을 금방 알 수 있습니다. 이를 이용해서 센서 정보를 받아 표시하거나 시계로 사용할 수 있습니다. 이제 어떻게 사용할지 아이디어를 생각해봐야겠네요.


더 많은 라즈베리파이 이야기 Pi Guide 보러가기


Leave a Comment