BLOGTIMES
2019/04/09

Raspberry Pi を使ってレシートプリンタから印刷してみる

  raspberrypi  python  printer 
このエントリーをはてなブックマークに追加

Symcode 58MM USB サーマルレシートプリンター ESC/POS プリント指令セットと両立コクヨ 感熱ロールペーパー ハンディターミナル用 20m 幅58×直径40mm RP-TH584H
サーマルプリンタによる印刷 - Raspberry Pi を使ってレシートプリンタから印刷してみる

今日はラズパイを使ってレシートプリンタの制御に挑戦してみました。

今回は Amazon で売っていた中国製の「Symcode 58MM USB サーマルレシートプリンター ESC/POS」安いプリンタを使います。この手のレシートプリンタは ESC/POS というエプソンが作ったプロトコルに対応したものが多いようです。ドットインパクトの ESC/P などと同じく、EPSON の規格がデファクトスタンダードなんですね。

まずは udev の設定から

USB 接続ですが Linux だと自動的に認識されないので、lsusb を見てみます。

pi@raspi:~$ lsusb Bus 001 Device 006: ID 0416:5011 Winbond Electronics Corp. Virtual Com Port Bus 001 Device 005: ID 04ca:005a Lite-On Technology Corp. Bus 001 Device 004: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

このプリンタはどうやら ID 0416:5011 で認識されているものみたいですね。
一般ユーザーからもこのデバイスにアクセスできるように udev にルールを追加して、udev のルールを読み込ませてやります。

sudo tee -a /etc/udev/rules.d/99-usbescpos <<EOS SUBSYSTEM=="usb", ATTRS{idVendor}=="0416", ATTRS{idProduct}=="5011", MODE=="0666" EOS sudo udevadm control --reload-rules sudo udevadm trigger

python-escpos を使ってみる

今回は Python から ESC/POS を話すことができる python-escpos*1 を使います。

インストールは pip で一撃です。

pip install python-escpos

python-escpos では通常の状態では日本語が出ないので、Pillow*2 と TTF フォントを使って、日本語の入った画像を生成し、これをプリンタから出力させてみます。
このあたりの処理はグラフィック液晶で日本語を描画するのと同じような要領ですね。

今回のフォントは Circle M+ 1m*3 を使っています。

サンプルとしてはこんな感じのプログラムになりました。

escpostest.py

from escpos.printer import Usb from escpos import * from PIL import Image from PIL import ImageDraw from PIL import ImageFont width = 500 height = 250 image = Image.new('1', (width, height), 255) draw = ImageDraw.Draw(image) font = ImageFont.truetype('circle-mplus-1m-regular.ttf', 50, encoding='unic') draw.text((0,0), "日本語も出るよ"+" ", font=font, fill=0) font = ImageFont.truetype('circle-mplus-1m-regular.ttf', 28, encoding='unic') draw.text((0,82), "abcdefghijklmnopqrstuvwxyz", font=font, fill=0) draw.text((0,112), "ABCDEFGHIJKLMNOPQRSTUVWXYZ", font=font, fill=0) draw.text((0,142), "1234567890"+" ", font=font, fill=0) draw.text((0,172), "!\"#$%&'()=~|+*<>?_{}"+" ", font=font, fill=0) p = Usb(0x0416, 0x5011, 0) p.text(" Hello World\n") p.image(image) p.cut()

これでラズパイの活用の幅もさらに広がりそうです。


トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10886
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン