3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

サーマルプリンタで印刷する: Raspberry Piからのテスト印刷編

Last updated at Posted at 2018-11-03

hello.jpg

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

記事の先頭にある写真が、実際の出力結果です。

4. 参考

3
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?