レシートプリンターを買った。理由は秋の学祭で使うためだが、それはそうとあったら面白いので買った。

ReceiptLine
ちょうと知人からReceiptLineというものを聞いたところで、これをやってみる。 ReceiptLineっていうのはMarkdownみたいな軽量マークアップ言語のことで、SVG画像やプリンターのコマンドに 変換できるらしい。
できることは以下が詳しい。
機種選び
ReceiptLineに対応してたらいいやと思って機種を選ぶことにした。 とりあえずReceiptLineのリポジトリをDeepWikiに調べてもらって、対応している機種を教えてもらう。

これを見ながらメルカリでいろいろ見ていたところ、まだ生産終了していないTM-T70IIがよさそう。

結局ロール紙をおまけしてくれるということで6000円で買った。
やって来た・受難

1日後、まだ勢いも冷めぬまま家にレシートプリンターがやってきた。 箱を開けてコードをつないでみるも、思ってたEthernetポートがない...
どうやらTM-T70IIには数種類バリエーションがあるようで、このバリエーションにはEthernetポートもBluetoothも無線LANもないようだった。 LAN越しに制御することを目論んでいたので残念。
あきらめてUSB接続でMacやLinuxに接続してみるも、どうやら独自規格のデバイスとして認識されるようで使えそうもない。
プリンターにする
諦めて唯一デバイスドライバが提供されているWindowsに接続してみたところ、USBクラスを変更する設定があるじゃん、ってなった。

これをベンダークラスからプリンタークラスに変更することで、無事プリンターとして認識されるようになった。変更中はどうやらROMを弄っているようで、緊張感ある時間が3分くらいつづいた。
変更後、macに接続してプリンターキューにデータを積んでみたところ、
taiseiue@lily infra % sudo lpadmin -p tmt70ii -E \ -v 'usb://EPSON/TM-T70II-JPN?serial=544443460114230000' \ -m raw lpadmin: RAWキューはmacOSでは現在サポートされていません。
いつからかRAWキューは使えなくなったらしい。
RaspberryPiをプリントサーバーにする
家に転がってたRaspberryPiをプリントサーバーにすることにした。
まず接続を確認
taiseiue@recipt:~ $ lsusb | grep -i epson `Bus 003 Device 002: ID 04b8:0e12 Seiko Epson Corp. TM-T70II`
うまく行ってそう。
試しにCLIから印刷をやってみたところうまくいった。
printf '\x1b@Hello TM-T70II\n\n\n\x1dV\x00' | sudo tee /dev/usb/lp0 > /dev/null

それからはとんとん拍子で、ブラウザ越しに印刷するための画面を用意して、Node.jsで印刷するようにした。 ReceiptLineがNodeで動いているのでそのまま使わせてもらった。

ただ一点、私のレシートプリンターは横幅が58mmだったようで、AIが言うには30mm幅でレンダリングしないといけないようだった。

いろいろ遊んでみる

ほかにもいろいろ出してみたけど、遊ぶのに夢中で写真を撮り忘れてしまった。 さっきのレシート印刷くんは公開APIになっているので、ここにPOSTを投げればいつでも誰でもレシートを印刷できる。友達(AIも)とか、Webhookとか無限の活用方法があるのでいろいろ遊んでいきたいと思う。
学祭に使う用の用紙はその前に尽きてしまいそうなのでロール紙は追加で発注することにした。