ESP32-C3 전자잉크 리더를 IPP 프린터로 만들어 맥의 인쇄 메뉴에서 직접 출력
- Xteink X3 전자잉크 리더에 IPP 서버를 넣고 Bonjour의
_ipp._tcp및_universal서브타입으로 알림으로써 macOS 인쇄 대화상자에서penguin프린터로 발견되게 함 - 프린터는 Apple Raster와 PWG Raster를 받아 맥이 문서를 픽셀로 변환하게 하고, 수신한 이미지를 화면 크기로 축소한 뒤 흑백 디더링해 전자잉크 화면에 출력함
- Letter 300dpi 페이지는 2,550×3,300픽셀, 무압축 그레이스케일 기준 약 8.4MB지만 ESP32-C3의 RAM은 캐시 예약분을 빼면 약 384KB여서 전체 페이지 버퍼를 둘 수 없었음
- 디코더와 스케일러가 완성한 행을 디스플레이 프레임버퍼에 즉시 기록하는 스트리밍 처리로 이미지 버퍼 사용량을 약 113KB에서 약 62KB로 낮춰 Wi-Fi 소켓 버퍼 공간을 확보함
- 완성된 출력물은 기존 스크린샷 저장 코드를 써서 SD 카드 BMP로 보관하고 리더에서 찾아볼 수 있으며, 구현 코드는 CrossPoint 포크의 IPP 디렉터리에 공개됨
Hacker News opinions
전자책 리더를 종이처럼 다루겠다는 발상이 정확히 맞아떨어짐. 스타트렉 PADD가 현실이 된 느낌임.
X3와 X4 중 뭘 살지 고민 중임. 이유는 딱히 없는데 전자잉크 기기에 중독돼서 그냥 갖고 싶음.
X4 Pro가 낫다고 봄. 백라이트가 있어서 이전 모델에서 아쉬웠던 점이 해결됨.
한 달 전 X4를 샀는데, 밖에서 심심할 때 휴대폰 대신 꺼내 읽게 돼서 만족함. Kobo가 읽기 경험은 더 좋지만 휴대성과 묘한 매력이 큼.
PDF로 보내면 되지 않나 싶었는데, RAM 400KB 장치에서 PDF 렌더러를 돌리기는 너무 무거움. PDF는 글꼴 4종, 이미지 형식 9종, 투명도와 색공간 등 처리할 게 많음.
일반 가정용 프린터도 보통 PDF를 직접 받으면 안 됨. AirPrint와 IPP Everywhere의 Apple Raster, PWG Raster는 프린터용 단순 래스터 입력이라 이 장치에 맞음.
목적을 이해 못 했는데, 원래는 기기 핫스팟에 접속해 브라우저 업로드 페이지를 열어야 했다는 게 문제였음. 맥의 인쇄 대화상자에서 바로 보내는 방식이 훨씬 자연스러움.
media-size-supported에 화면의 실제 크기를 om_NNNmmxYYYmm나 oe_NNNinxYYYin으로 선언하면 PC가 화면 크기에 맞춰 렌더링하므로 기기 쪽 축소 처리가 필요 없어짐.
PWG Raster와 Apple Raster는 1bpp도 지원함. print-color-mode-supported=bi-level과 urf-supported의 W1을 쓰면 현재 8bpp 입력보다 전송량을 8배 줄일 수 있음.
이런 작업이 좋은 이유는 낯선 분야에서 만든 결과물에, 그 분야를 아는 사람이 구체적인 IPP 개선안을 바로 붙여주기 때문임.
제목만 보고 잉크와 프린트헤드 얘기일 줄 알았는데, 결과적으로 '프린터처럼 행동하는 종이'를 만든 이야기라 더 재밌었음.