どのご家庭にもあるサーマルプリンタ…
細かいことは気にしないで行ってみましょうー!
ゴールはこんな感じです
#rikapro をつけてつぶやくと、Tweet内容のレシートが自動で印刷されるようになりました。 pic.twitter.com/XSjF6RtBpQ
— すずすけ@Type_T (@szsk_edu) 2019年11月27日
サーマルプリンタの入手
どうしてもサーマルプリンタが無いご家庭は、購入するところからだと思いますが、いろいろな接続方法があります。
今回はUSB接続モデルの「TM-T88V(ヤフオクで4000円くらい」で説明していきます!
ヤフオクで買うときは、ACアダプタ付きを買いましょうね!ACアダプタだけあとで買おうとすると、独自のピンで結構な値段するのでお得感ゼロになります。
Raspberry Piの入手
今回の目的だけでしたら、Raspberry Pi Zero WHで十分です。
サクッと設定をしてしまいましょう。
Beebotteの登録、IFTTTへのレシピ登録
Beebotteの登録については、以下のサイトが参考になりますし、1から解説しても同じ解説になりますので省略します。
IFTTTのレシピ登録については、私のレシピを載せておきます。
IFTTTの罠としては、escapeが "<<>>"って書いてあるのに、実際には"<<<>>>"じゃないとエスケープされないっていうことですかね…。
お察しの通り、Twitter検索はIFTTTで行いますので、タイムラグがあります。リアルタイムではありません。
印刷させる
こちらを参考にさせていただきました。
しかし、Twitterの発言は画像化するのがとても大変で、別の方法を使わないといけません。
短いワードでしたら、画像化でOKだと思いますが、Twitterの投稿は長い時もあり、短い時もあり。文字数を判別して改行入れて画像化…はちょっと骨が折れるので、直接プリンタにデータを送ってしまうことにしましょう。
参考にしたのはこちらです。
こちらに載っていた、日本語対応のpython-escposを入れます。
起動時に自動実行させるため、/etc/rc.local に記述するとなると、関連するライブラリはsudoして入れましょう。
pi@raspberrypi:~ $ lsusb
Bus 001 Device 002: ID 04b8:0202 Seiko Epson Corp. Receipt Printer M129C/TM-T70
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation root hub
こんな感じで、lsusbするとIDが04b8:0202となっているのを覚えておきます。
それで、こんな感じのPythonスクリプトを作ります。上記参考サイトのソースを参考にしています。
from escpos.printer import Usb from escpos import * import unicodedata import sys import io import subprocess import paho.mqtt.client as mqtt import json TOKEN = "YOURTOKENHERE" HOSTNAME = "mqtt.beebotte.com" PORT = 1883 TOPIC = "YOURTOPICHERE" #プリンタの初期設定(さっき調べたIDの最初に0xをつける) p = Usb(0x04B8, 0x0202) p.jpInit() #待受完了 def on_connect(client, userdata, flags, respons_code): print('status {0}'.format(respons_code)) client.subscribe(TOPIC) #Beebotteからのメッセージ受信時 def on_message(client, userdata, msg): print(msg.topic + " " + str(msg.payload)) data = json.loads(msg.payload.decode("utf-8"))["data"] #コンソールにも一応表示 print(data) #印刷させる p.jpText("Twitterの反応がありましたよ!\n") p.jpText(data) p.text("\n") #最後は用紙のカットを忘れずに p.cut() #待受動作 client = mqtt.Client() client.username_pw_set("token:%s"%TOKEN) client.on_connect = on_connect client.on_message = on_message #client.tls_set(CACERT) client.connect(HOSTNAME, port=PORT, keepalive=60) client.loop_forever()
Pythonあまり触っていないので、あっていない部分があるかもですが、一応動くのでいいかなーと。笑
最後に、このスクリプトを自動起動するように、/etc/rc.localに記述しておしまいです。
pi@raspberrypi:~ $ cat /etc/rc.local #!/bin/sh -e # # rc.local # /usr/bin/python3 /home/pi/tw2p.py & /usr/bin/python /home/pi/ip.py & exit 0
ip.pyは起動したらIPアドレスをFaebookメッセンジャーから教えてくれるスクリプトです。
こんな感じで、IFTTTでTwitterの投稿を検索→BeebotteからRaspiに通知→印刷の流れができました。
こうなりました!! pic.twitter.com/ve5LTom1FX
— すずすけ@Type_T (@szsk_edu) 2019年11月28日
今回、「こんな感じ」って言いすぎ…
得意分野以外の説明が下手すぎますね。精進します!