E-Ink 전자종이 디스플레이 연결로 저전력 정보판 만들기

저전력 디스플레이 기술의 대표 주자인 E-Ink 전자종이 디스플레이는 잉크 기반의 화면으로, 전력 소모가 매우 적고 시야각이 넓어 장시간 정보 표시용으로 이상적입니다. 카페 메뉴판, 공지사항, 날씨 정보, IoT 센서 출력 등 다양한 용도로 활용할 수 있으며, 특히 배터리 기반 장치나 라즈베리파이 프로젝트에서 높은 효율을 제공합니다. 이번 글에서는 E-Ink 디스플레이를 라즈베리파이와 연결하고, 저전력 정보판으로 활용하는 방법을 단계별로 정리했습니다.

E-Ink 전자종이 디스플레이란

E-Ink(Electronic Ink)는 전자 잉크 기술을 이용해 종이에 인쇄된 것과 유사한 화질을 구현하는 디스플레이입니다. 전력 소모가 낮아 화면 갱신 시에만 전류를 사용하고, 유지 상태에서는 전력이 거의 필요하지 않습니다.

E-Ink의 주요 특징은 다음과 같습니다.

  • 저전력: 정적 화면에서는 전력 소모 거의 없음
  • 높은 가독성: 직사광선에서도 선명하게 표시
  • 넓은 시야각: 180도 이상에서도 동일하게 가독
  • 다양한 크기: 1.54인치에서 7.5인치 이상까지 선택 가능
  • 단색 또는 컬러 모델: 일반적으로 흑백 모델이 보급형, 일부 컬러 지원

준비물

E-Ink 정보판 프로젝트를 위해 필요한 준비물은 아래와 같습니다.

  • 라즈베리파이 4 또는 3B+
  • E-Ink 디스플레이 모듈 (예: Waveshare 2.13인치, 2.7인치, 7.5인치)
  • GPIO 점퍼 케이블
  • MicroSD 카드 32GB 이상
  • 전원 어댑터 (5V 3A 이상 권장)
  • Python 3 환경 및 관련 라이브러리

Waveshare 모듈은 SPI 또는 HAT 형태로 제공되며, Raspberry Pi와 직접 연결 가능하여 코드 실행이 용이합니다.

E-Ink 디스플레이 연결

  1. HAT 형태 모듈 사용 시
    라즈베리파이 GPIO 핀에 바로 장착 가능하며, 추가 배선 없이 SPI 통신과 전원이 자동 연결됩니다.
  2. SPI 모듈 연결 시
    SPI 인터페이스를 통해 연결하며, 주요 핀 구성은 아래와 같습니다.
    • VCC → 3.3V
    • GND → GND
    • DIN → MOSI(GPIO10)
    • CLK → SCLK(GPIO11)
    • CS → CE0(GPIO8)
    • DC → GPIO25
    • RST → GPIO17
    • BUSY → GPIO24

연결 완료 후 SPI 인터페이스가 활성화되어야 합니다.

sudo raspi-config

Interface Options → SPI → Enable 선택 후 재부팅합니다.
정상적으로 활성화되었는지 확인하려면:

ls /dev/spidev*

/dev/spidev0.0/dev/spidev0.1가 출력되면 SPI 장치가 인식된 것입니다.

Python 환경 설정

E-Ink 디스플레이를 제어하기 위해 Python 라이브러리를 설치합니다.

sudo apt update
sudo apt install python3-pip python3-pil python3-numpy
pip3 install RPi.GPIO spidev

Waveshare 모듈용 Python 드라이버를 공식 GitHub에서 다운로드 후 설치합니다.

git clone https://github.com/waveshare/e-Paper.git
cd e-Paper/RaspberryPi_JetsonNano/python
sudo python3 setup.py install

이제 Python에서 디스플레이를 제어할 준비가 완료되었습니다.

E-Ink 정보판 실습 코드

아래는 간단한 텍스트 정보판 예제입니다. 온도, 습도, 공지 사항 등 실시간 정보를 갱신할 수 있습니다.

import epd2in13_V2
from PIL import Image, ImageDraw, ImageFont
import time

# 디스플레이 초기화
epd = epd2in13_V2.EPD()
epd.init()
epd.Clear(0xFF)

# 이미지 캔버스 생성
image = Image.new('1', (epd.height, epd.width), 255)  # 흰색 배경
draw = ImageDraw.Draw(image)

# 폰트 설정
font = ImageFont.load_default()

# 정보 표시
draw.text((10, 0), 'Raspberry Pi E-Ink Info', font=font, fill=0)
draw.text((10, 20), 'Temperature: 25.3 C', font=font, fill=0)
draw.text((10, 40), 'Humidity: 60%', font=font, fill=0)

# 디스플레이에 출력
epd.display(epd.getbuffer(image))
epd.sleep()

이 코드를 실행하면 디스플레이에 지정한 텍스트가 표시되며, E-Ink의 특성상 전력 소모는 화면 갱신 시에만 발생합니다.

실시간 정보 업데이트

실시간 데이터를 갱신하려면 주기적으로 화면을 업데이트하는 루프를 구성하면 됩니다. 예를 들어 DHT22 센서와 연동해 온도·습도를 표시할 수 있습니다.

import Adafruit_DHT

DHT_SENSOR = Adafruit_DHT.DHT22
DHT_PIN = 4

while True:
    humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
    if humidity is not None and temperature is not None:
        draw.rectangle((0, 0, epd.height, epd.width), fill=255)  # 화면 초기화
        draw.text((10, 0), 'Raspberry Pi E-Ink Info', font=font, fill=0)
        draw.text((10, 20), f'Temperature: {temperature:.1f} C', font=font, fill=0)
        draw.text((10, 40), f'Humidity: {humidity:.1f} %', font=font, fill=0)
        epd.display(epd.getbuffer(image))
        epd.sleep()
    time.sleep(60)  # 1분마다 업데이트

E-Ink는 잦은 갱신이 화면에 부담을 줄 수 있으므로, 최소 30초~1분 간격으로 업데이트하는 것이 좋습니다.

프로젝트 확장 아이디어

  • 스마트 공지판: 학교, 카페, 사무실 등에서 메뉴, 일정, 공지사항 표시
  • 날씨 정보판: OpenWeatherMap API 연동으로 실시간 날씨 표시
  • 저전력 IoT 디스플레이: 배터리 기반 센서 데이터 출력
  • 예약 안내판: 회의실, 강의실 스케줄 표시

E-Ink는 정적 화면 유지에 최적화되어 있어, 장기간 배터리 운영이 가능한 저전력 장치로 활용할 수 있습니다.

성능 및 안정성 팁

  • 전원 안정성 확보: 전압 변동이 심하면 화면 깜박임이나 초기화 오류 발생
  • 업데이트 최소화: 화면 잦은 갱신은 수명을 줄일 수 있음
  • SPI 연결 확인: 연결 불량 시 데이터 전송 오류 발생
  • LCD 대비 느린 화면 반응 고려: 애니메이션보다는 텍스트, 그래프 등 정적 정보 표시에 적합

마무리

E-Ink 전자종이 디스플레이는 저전력, 고가독성, 장시간 표시 가능이라는 장점으로 다양한 정보판 프로젝트에 적합합니다. 라즈베리파이와 간단히 연결해 센서 데이터, 공지사항, 날씨 정보 등 실시간 정보를 표시할 수 있으며, 전력 효율이 중요한 IoT 장치에도 최적화되어 있습니다.

이 글에서 소개한 SPI 연결, Python 라이브러리 활용, 실시간 데이터 갱신 방법을 기반으로 자신만의 저전력 E-Ink 정보판을 손쉽게 구현할 수 있습니다. 다양한 API와 센서와 연동해 활용 범위를 넓히면, 사무실, 가정, 공공장소 등에서 실용적인 디지털 디스플레이로 활용할 수 있습니다.

Similar Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다