0. 前回までのあらすじ
サーマルプリンタ「MunByn ITPP068USE-BK」を「仮想COMモード」に変更し、Linuxから利用できる状態にしました。
その他、概要、構成、セットアップ手順については『セットアップ編』を参照してください。
これまでの記事については『目次』をご覧ください。
1. Raspberry Piのセットアップ
今回はサーマルプリンタを接続するマシンとして「Raspberry Pi 3 Model B+」を使用しました。
1.1. OSのセットアップ
OSには「Raspbian」を使用しました。詳細は以下の通りです。
pi@raspi-3bp$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
pi@raspi-3bp$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.4 (stretch)
Release: 9.4
Codename: stretch
pi@raspi-3bp$ uname -a
Linux raspi-3bp 4.14.71-v7+ #1145 SMP Fri Sep 21 15:38:35 BST 2018 armv7l GNU/Linux
RaspbianのセットアップについてはWeb上に情報が多くの情報が存在しますので、適宜そちらをご参照ください。
1.2. Dockerのセットアップ
環境の構築を容易にするためにDockerを使用しました。詳細は以下の通りです。
pi@raspi-3bp$ docker version
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:30:49 2018
OS/Arch: linux/arm
Experimental: false
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:26:32 2018
OS/Arch: linux/arm
Experimental: false
Raspberry PiへのDockerのインストールについては『Raspberry Pi 3 Model B(Raspbian)にDockerをインストールする - Qiita』などをご参照ください。
2. ttyデバイスの確認
サーマルプリンタを「仮想COMポート」モードに変更すると、LinuxからUSB/シリアルデバイスとして認識されます。
サーマルプリンタの接続前、接続後のlsusb
の結果は以下の通りです。Bus 001 Device 007: ID 1fc9:2014 NXP Semiconductors
が該当のデバイスです。
# サーマルプリンタ接続前:
pi@raspi-3bp$ lsusb
Bus 001 Device 005: ID 056e:001c Elecom Co., Ltd
Bus 001 Device 004: ID 413c:2003 Dell Computer Corp. Keyboard
Bus 001 Device 006: ID 0424:7800 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# サーマルプリンタ接続後:
pi@raspi-3bp$ lsusb
Bus 001 Device 005: ID 056e:001c Elecom Co., Ltd
Bus 001 Device 007: ID 1fc9:2014 NXP Semiconductors
Bus 001 Device 004: ID 413c:2003 Dell Computer Corp. Keyboard
Bus 001 Device 006: ID 0424:7800 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
pi@raspi-3bp$ lsusb -v -d 1fc9:2014
Bus 001 Device 007: ID 1fc9:2014 NXP Semiconductors
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 2 Communications
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x1fc9 NXP Semiconductors
idProduct 0x2014
bcdDevice 1.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 67
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 10mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 2 Communications
bInterfaceSubClass 2 Abstract (modem)
bInterfaceProtocol 0 None
iInterface 94
CDC Header:
bcdCDC 1.10
CDC Call Management:
bmCapabilities 0x01
call management
bDataInterface 1
CDC ACM:
bmCapabilities 0x02
line coding and serial state
CDC Union:
bMasterInterface 0
bSlaveInterface 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0010 1x 16 bytes
bInterval 2
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 10 CDC Data
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0
iInterface 94
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
正常に認識されると、/dev/ttyACM*
というttyデバイスが増えます。以下では/dev/ttyACM0
として認識されていますが、抜き差しすると/dev/ttyACM1
として認識されることもありました。固定化できると良いのですが。
pi@raspi-3bp$ ls -l /dev/ttyACM*
crw-rw---- 1 root dialout 166, 0 11月 4 00:28 /dev/ttyACM0
3. テスト印刷
nayutaya/thermal-printerリポジトリで公開している印刷ツールを使ってテスト印刷します。
3.1. Dockerイメージのビルド
上記の印刷ツールにはDockerfile
が用意されているため、それをビルドします。
pi@raspi-3bp$ git --version
git version 2.11.0
pi@raspi-3bp$ mkdir -p ~/repo/github.com/nayutaya
pi@raspi-3bp$ cd ~/repo/github.com/nayutaya/
pi@raspi-3bp$ git clone https://github.com/nayutaya/thermal-printer.git
pi@raspi-3bp$ cd ~/repo/github.com/nayutaya/thermal-printer/
pi@raspi-3bp$ git checkout tool-print-v1.0.0
pi@raspi-3bp$ git branch -v
* (HEAD detached at tool-print-v1.0.0) 51d10ed Merge pull request #6 from nayutaya/issue#1_print_tool
master 51d10ed Merge pull request #6 from nayutaya/issue#1_print_tool
pi@raspi-3bp$ cd ~/repo/github.com/nayutaya/thermal-printer/tool/print/
pi@raspi-3bp$ ./build_image.sh
ビルドしたDockerイメージには${USER}/thermal-printer/tool/print:latest
というタグが付いています。
3.2. 文字列と画像の印刷
ビルドしたDockerイメージを使って文字列と画像を印刷します。サンプル画像として同梱されているhello.png
を使用しました。
pi@raspi-3bp$ cd ~/repo/github.com/nayutaya/thermal-printer/tool/print/
pi@raspi-3bp$ ./run_bash.sh
root@ff877f47f4e9:/# echo $(ls /dev/ttyACM* | head -n 1)
/dev/ttyACM0
root@ff877f47f4e9:/# /root/main.py text $(ls /dev/ttyACM* | head -n 1) "Hello World"
device: /dev/ttyACM0
text: Hello World
Serial printer enabled
root@ff877f47f4e9:/# /root/main.py image $(ls /dev/ttyACM* | head -n 1) /root/hello.png
device: /dev/ttyACM0
path: /root/hello.png
Serial printer enabled
記事の先頭にある写真が、実際の出力結果です。