概要
- Xteink X3 を使った電子ペーパーのプリンター化体験記
- IPPプロトコル によるMacBookからの直接印刷実現
- メモリ制約 を解決するための独自画像処理パイプライン構築
- BonjourやmDNS を活用したドライバレスプリンター発見
- 印刷結果は SDカード保存 と画面表示に対応
Xteink X3をプリンター化するまで
- Xteink X3 は完全プログラマブルなe-inkディスプレイデバイス
- CrossPoint firmware に独自機能(ブートアニメーション、サイコロ、QRコード)追加
- ファイル転送は ホットスポット経由のWebアップロード で手間がかかる仕様
「紙のように使いたい」発想とIPP探索
- 紙のような操作感 を求め、MacBookから印刷する方法を模索
- Internet Printing Protocol (IPP) を調査し、プリンターとして認識される要件を分析
- モノクロ出力・300dpi・片面印刷 などの機能をアドバタイズ
- Apple rasterとPWG raster 形式をサポート、Mac側で画像変換
BonjourとmDNSによるプリンター発見
- Bonjour で_ipp._tcpサービス名「penguin」としてネットワークに公開
- 対応フォーマットやアドレス もアドバタイズに含める
- macOSのドライバレス発見 には_universalサブタイプ追加が必要
- ESP-IDFのmDNS APIを直接利用し、Arduinoラッパーを回避
メモリ制約と画像処理パイプライン
- Letterサイズ・300dpi画像 は約8.4MB、X3のRAMは400KB
- Wi-Fiやプリンタサーバー も同時稼働のため、RAM残量は6.8KB
- SDカードをmmapのように使う案 は不採用、C3のメモリマッピングはフラッシュ専用
- ディスプレイRAMをバッファとして活用 し、画像を逐次処理
- 受信した画像を行単位で縮小・ディザリングし、即座にディスプレイへ転送
- 完全なページが到着するまで、作業領域を再利用
実際の印刷体験と成果
- Previewでpenguinがプリンタ一覧に表示
- Mushoku Tenseiのマンガ画像 を印刷し、Xteinkに即時表示
- 印刷速度は約1秒 で完了、画質も良好
- プリンタサーバーはX3本体で動作、Wi-Fiネットワーク参加や独自ホットスポット「literate-penguin」起動も可能
保存・閲覧機能と成果物
- 印刷済みページはSDカードにBMP形式で保存
- 本体から印刷履歴の閲覧も可能
- 出力トレイは「フォルダ」 として実装
- CrossPoint forkに全コード公開、プリンター実装も含む
ついにスタートレックのPADDが手に入ったね!