![見出し画像](https://assets.st-note.com/production/uploads/images/57362082/rectangle_large_type_2_fb1d595bf92b440d0a39702466556b21.jpg?width=1200)
サーマルプリンターをpython-escpos経由でTouchDesignerから動かす(Mac)
サーマルプリンタを使ったライブパフォーマンスを実現するために、不慣れなりにサーマルプリンタをTouchDesignerで動かすことに挑戦したらうまくいったので、備忘録としてここに方法を記しておきます。この世のどこかに同じことをやりたい人がいると信じて・・・
プリンターとの通信にはESC/POSというコマンドを利用するのですが
難しいところはpython-escposくんが全部やってくれるのでとても簡単に接続することができます。またドライバーを介して印刷すると生じる、コマンド送信から印刷までの待機時間が無いため、ライブパフォーマンスに用いるにはうってつけでした。
タッチは使うけど間にArduinoとか挟む場合やラズパイを使ってやる場合はこちらを参照ください。
環境
MacOS (Big Sur 11.4)
サーマルプリンター(Symcode 58MM USB サーマルレシートプリンター)
TouchDesigner (2021.14360)
TouchDesignerと連携するPython環境を構築する
やっとるわい、できるわいという方は読み飛ばしてください。
Pythonを入れることは簡単ですが、外部のライブラリをTouchDesignerで使えるようにするのはプログラミング弱い勢には少しめんどくさいです。
環境構築には、この辺りのQiitaが役に立ちました。
また、比嘉了大先生がこちらにTouchDesignerで外部ライブラリを使うときのやり方をまとめているので、こちらに載っているvenvを用いる手順をそのままやるのも良いかもしれません。
自分は今回はpyenvで環境構築してます。
そして心が折れる前にとりあえずまずやること↓
・Homebrewを入れる
Homebrewってなに?ってとこから含め、ここなどを参照に
・Pythonを入れる(Qiita参照)
PythonにはPython2とPython3があり、TouchDesignerに使うのはPython3の方です。注意点として、ライブラリをインストールしたいPython3のバージョンを、TouchDesigner内部のPython3と同じ系(3.7.○○とか)に合わせる必要あり(TouchDesignerのTextPortを開くとバージョンを確認できます)
pyenvなりvenvなりを使って仮想環境を作ってそこに入れるのがあったかいですが、もう俺はタッチと同じバージョンでしかPythonを使わないぜって場合は仮想環境を作らなくてもいいかもしれません。
・Big Surを使いし者に現れる、謎エラーを倒す
後々詰むのでこれを解消する必要があります。倒し方は上記を参照にXcodeとCommand Line Toolsのアプデをする。Big Surじゃない人は多分大丈夫です。
これらが終わったら、いよいよライブラリを入れていきます。
python-escposのインストール/印刷
ターミナルから、
pip install python-escpos
を実行します。
また、python-escposを使うためにはpyusbとlibusbもインストールされている必要があります。
pip install pyusb
brew install libusb
こちらも実行します。
TouchDesigner側からUSBに刺さってるどれがプリンターか判別させるために、プリンターのベンダー(製造元)IDとプロダクト(製品)IDを探します。
プリンターを接続した上で、Macであれば、左上のりんごマークから「このMacについて」、「システムレポート」、「USB」からIDを確認します。
同じサーマルプリンタであれば、ベンダーIDは0x0416、プロダクトIDは0x5011になります。
![スクリーンショット 2021-07-23 20.30.55](https://assets.st-note.com/production/uploads/images/57382641/picture_pc_ee957753b3083ef8fcef6902fa8380b6.png?width=1200)
TouchDesignerに戻りまして、連携ができるか試してみます。
Text DATを立ち上げ、以下のコマンドを入力します。
from escpos.printer import Usb
p = Usb(0x0416, 0x5011, 0)
p.text("Hello World\n")
pは(ベンダーID,プロダクトID,0)なので、自分のプリンタに合わせて適宜変更してください。p.text()の中に印刷したいテキストを入力します。
コマンドを打ち込めたらcmd+Rなり何なりでスクリプトを実行します。
印刷できない場合は、python-escpos等の必要なライブラリがTDと連携しているPythonのsite-packageに格納されているか確認してみましょう。万一格納されてない場合、「pip install」を「pip3 install」にしてやってみるといける可能性あります。
印刷できた
勝ち組
![画像3](https://assets.st-note.com/production/uploads/images/57383567/picture_pc_22183ad79954b35eb8600a5ef48d0b0f.png)
おまけ TOPの画を小刻みに印刷していく方法(ゴリ押し)
サーマルプリンターで画像を印刷するとなった時、フィルムみたいに一コマ一コマがバーっと印刷されていくのではなく、じわじわと印刷されていったほうがなんとなくかっこいいしロール紙ならではの表現の幅も広がってfeel so goodですよね。
画像をバイトに変換して送っていく方法が正攻法なのだと思いますが、自分はパフォーマンスをお披露目するイベントが数日後に控えておりとにかく手っ取り早くやりたかったので、TouchDesignerのオペレーターを組み合わせて実現させました。
![スクリーンショット 2021-07-23 20.32.47](https://assets.st-note.com/production/uploads/images/57382679/picture_pc_99e3a73e64f81fd24357452936b9f0e8.png?width=1200)
RampにしたLFO CHOPの値をCrop CHOPの上下に割り当てて、入力画像を循環させる
一度に印刷したいサイズをConstant CHOPやConstant TOPなどを用いて定義し、それを元に入力画像をクロップ
Count CHOPとLimit CHOPを使い、クロップされた位置が、指定した縦幅(印刷したい間隔)だけ上に移動したタイミングで値が変わるパラメータを作り、CHOP Execute DATで値の変化をトリガーに画像を保存する
Info CHOPでMovie File Out TOPがフレームを保存したタイミングを計測し、Info CHOPの値の変動をトリガーに、CHOP Execute DATから保存した画像をプリンターで印刷させる
という流れです。わっかりづれ〜 また別の回で詳しく説明したほうがいいのかもしれません。
ゴリ押しなのであまり細かくクロップしすぎるとうまく印刷できなかったり色々と不具合はありますが、概ねこれで望んでいたようなパフォーマンスができて楽しかったです。
次はFAXでやってみたり、複数台のプリンターを連携してみたりできたらええなあ〜〜〜と思っております。
あと本当はプリンターで印刷された紙がそのままスキャナーへ吸い込まれる構造にしたかったのですが、スキャナーの仕様上簡単にはできないようになっているため今回は間に合わなかったのでいつかできるようにはしておきたい、、、
おまけ2 サーマルプリンタを用いたパフォーマンスについて
ところで、自分はIAMASという大学院に所属しており、プリンターを利用したパフォーマンスは、その院で行っている「NxPC.Lab」というクラブ・ライブ空間での体験を拡張するプロジェクトでのイベントにて行いました。
こちらにアーカイブが残っております。
皆各々の得意な分野を活かして面白いことをやっているのでぜひご覧ください、、!
パフォーマンス冒頭でかけた曲はKlahrk - Two Modesです。このパフォーマンスにすると決めてすぐに頭にかけるのはこれしかないと思いました
Little Snakeとかも好きなんですが、この熱いけど暗い感じが超ツボで大好きです。
サーマルプリンターを使った芸術作品は色々な人が作ってきていて、有名なところでいえば、1985年にUeli Fuchserが企画し、ヨーゼフ・ボイス、東山魁夷、アンディ・ウォーホルが制作した、Faxを用いた作品などがあります。
なぜそんな昔の技術や手法を現代に引っ張り出してくるのかというと、個人的なビジュアルの好みもありますが、それに加え、この色々な形で現代に普及しきった技術と、そのアート的な文脈が、現在のクリエイターに対して自分が思う問題や疑問を露わにしてくれるような気がしているからです。
自分のnoteで以前紹介し、まだ後半の記事が書けていない(すみません・・・)NFTなんかの話題も、ここに関連してくると思っています。
長く話すと主題と関係なくなるのでほどほどにしますが、この話題は後日まとめたり、今後の自分の作品制作の中でもっと盛り込めたりできたらいいなと思っています。
ぜひ今後も注目していただけると幸いです!
おわり
この記事が気に入ったらサポートをしてみませんか?