質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • Raspberry Pi

    1044questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

  • コマンド

    249questions

    コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

  • Raspbian

    140questions

  • シリアルポート

    56questions

    シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Raspberry Piからサーマルプリンタに印刷命令を送りたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 518

otyappa_dev

score 6

Raspberry Pi使い始めでどう進めれば良いのかも分からない状態なので、調べ方や「自分ならこれを試してみる」といった情報でも頂けると嬉しいです。足りない情報がありましたら教えてください。

前提・実現したいこと

Raspberry piを買って、サーマルプリンタに繋ごうと試しているのですが、
lsusbコマンドでは認識されているのですが(Device 007)、ttyAMA0に印刷命令を出しても応答が無い状態です。
"This is a test"という文字列を印刷したいです。
Raspberry piとサーマルプリンタはUSBで接続しています。

発生している問題・エラーメッセージ

印刷命令を出しても応答が無い状態です。

該当のソースコード

pi@raspberrypi:~ $ lsusb
Bus 001 Device 007: ID 0416:5011 Winbond Electronics Corp. Virtual Com Port
Bus 001 Device 004: 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@raspberrypi:~ $ ls /dev
autofs           loop5               ram5     tty20  tty46      vc-mem
block            loop6               ram6     tty21  tty47      vchiq
btrfs-control    loop7               ram7     tty22  tty48      vcio
bus              mapper              ram8     tty23  tty49      vcs
cachefiles       mem                 ram9     tty24  tty5       vcs1
char             memory_bandwidth    random   tty25  tty50      vcs2
console          mmcblk0             raw      tty26  tty51      vcs3
cpu_dma_latency  mmcblk0p1           rfkill   tty27  tty52      vcs4
cuse             mmcblk0p2           serial1  tty28  tty53      vcs5
disk             mqueue              shm      tty29  tty54      vcs6
fb0              net                 snd      tty3   tty55      vcs7
fd               network_latency     stderr   tty30  tty56      vcsa
full             network_throughput  stdin    tty31  tty57      vcsa1
fuse             null                stdout   tty32  tty58      vcsa2
gpiochip0        ppp                 tty      tty33  tty59      vcsa3
gpiochip1        ptmx                tty0     tty34  tty6       vcsa4
gpiomem          pts                 tty1     tty35  tty60      vcsa5
hwrng            ram0                tty10    tty36  tty61      vcsa6
initctl          ram1                tty11    tty37  tty62      vcsa7
input            ram10               tty12    tty38  tty63      vcsm
kmsg             ram11               tty13    tty39  tty7       vhci
log              ram12               tty14    tty4   tty8       watchdog
loop-control     ram13               tty15    tty40  tty9       watchdog0
loop0            ram14               tty16    tty41  ttyAMA0    zero
loop1            ram15               tty17    tty42  ttyprintk
loop2            ram2                tty18    tty43  uhid
loop3            ram3                tty19    tty44  uinput
loop4            ram4                tty2     tty45  urandom
pi@raspberrypi:~ $ lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/3p, 480M
            |__ Port 1: Dev 4, If 0, Class=Vendor Specific Class, Driver=lan78xx, 480M
            |__ Port 3: Dev 7, If 0, Class=Printer, Driver=, 12M
pi@raspberrypi:~ $ sudo echo -e "This is a test" > /dev/ttyAMA0

試したこと

lsusb -tコマンドでDevice 007のdriverが表示されていないので、ドライバのインストールが必要なのかと思い、以下サイトからドライバーをダウンロードしてzip内のinstall58ファイルを実行しました。
ドライバダウンロードページ
するとusblpというドライバが表示されるようになりましたが、依然として印刷命令に対して反応がありません。

pi@raspberrypi:~ $ lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/3p, 480M
            |__ Port 1: Dev 4, If 0, Class=Vendor Specific Class, Driver=lan78xx, 480M
        |__ Port 2: Dev 9, If 0, Class=Printer, Driver=usblp, 12M
pi@raspberrypi:~ $ sudo echo -e "This is a test" > /dev/ttyAMA0

補足情報(FW/ツールのバージョンなど)

Raspberry Pi 3 Model B+
Symcode 58MM USB サーマルレシートプリンター ESC/POS

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

/dev/ttyAMA0 に直接、テキストを送ってもダメだと思います。
テキストや PDF などを、プリンターが解釈できるデータ(ESC/POS)に変換する必要があります。
それは、通常、CUPS などが行なうものです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+1

otyappa_devさん、

ドライバ入手先として書かれていたサイトからダウンロードした、58MMThermalrecieptprinter.zipの中の、/Linux Printer Driver Software/linux32bit/install58を見てみましたが、ここから、解凍されるドライバは、Intel CPUのもので、ARMのRaspberryPiでは使用できません。

$ file rastertozj
rastertozj: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.15, BuildID[sha1]=844905193e8c3faaac51a35b89572b2054ed4853, not stripped

また、/dev/ttyAMA0は、GPIOピンヘッダーのとこから出ているUART(シリアルポート)なので、USBで接続している、ということであれば、デバイス名が違います。

通常USBのシリアルポートは、/dev/ttyUSB0 というようなデバイス名になります。
上記のドライバをインストールする前に、そういったデバイスがありませんでしたか?

lsusbで表示されている、↓をみると、com portになるような感じがしますが、どうでしょう?

Bus 001 Device 007: ID 0416:5011 Winbond Electronics Corp. Virtual Com Port

うまくシリアル通信ができるようになれば、このサイトあたりを参考に、CUPSのドライバを入れてみるのはどうでしょうか。

ちなみに、似たようなサーマルプリンタで、AdafruitのMini Thermal Receipt Printerは、
RaspberryPiのGPIO PinのGND,TXD,RXDに接続して使用するので、/dev/ttyAMA0を使用して、通信するようです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/30 12:01

    回答ありがとうございます。

    > 通常USBのシリアルポートは、`/dev/ttyUSB0` というようなデバイス名になります。
    > 上記のドライバをインストールする前に、そういったデバイスがありませんでしたか?

    サーマルプリンタを接続した上で、`lsusb /dev -l`コマンドを実行してみましたが、`/dev/ttyUSB0`というデバイスは見つかりませんでした。

    ```CLI
    pi@raspberrypi:~ $ ls /dev
    autofs loop5 ram5 tty20 tty46 vc-mem
    block loop6 ram6 tty21 tty47 vchiq
    btrfs-control loop7 ram7 tty22 tty48 vcio
    bus mapper ram8 tty23 tty49 vcs
    cachefiles mem ram9 tty24 tty5 vcs1
    char memory_bandwidth random tty25 tty50 vcs2
    console mmcblk0 raw tty26 tty51 vcs3
    cpu_dma_latency mmcblk0p1 rfkill tty27 tty52 vcs4
    cuse mmcblk0p2 serial1 tty28 tty53 vcs5
    disk mqueue shm tty29 tty54 vcs6
    fb0 net snd tty3 tty55 vcs7
    fd network_latency stderr tty30 tty56 vcsa
    full network_throughput stdin tty31 tty57 vcsa1
    fuse null stdout tty32 tty58 vcsa2
    gpiochip0 ppp tty tty33 tty59 vcsa3
    gpiochip1 ptmx tty0 tty34 tty6 vcsa4
    gpiomem pts tty1 tty35 tty60 vcsa5
    hwrng ram0 tty10 tty36 tty61 vcsa6
    initctl ram1 tty11 tty37 tty62 vcsa7
    input ram10 tty12 tty38 tty63 vcsm
    kmsg ram11 tty13 tty39 tty7 vhci
    log ram12 tty14 tty4 tty8 watchdog
    loop-control ram13 tty15 tty40 tty9 watchdog0
    loop0 ram14 tty16 tty41 ttyAMA0 zero
    loop1 ram15 tty17 tty42 ttyprintk
    loop2 ram2 tty18 tty43 uhid
    loop3 ram3 tty19 tty44 uinput
    loop4 ram4 tty2 tty45 urandom
    pi@raspberrypi:~ $ lsusb -t
    /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
    |__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/3p, 480M
    |__ Port 1: Dev 4, If 0, Class=Vendor Specific Class, Driver=lan78xx, 480M
    |__ Port 3: Dev 5, If 0, Class=Printer, Driver=, 12M
    pi@raspberrypi:~ $ lsusb
    Bus 001 Device 005: ID 0416:5011 Winbond Electronics Corp. Virtual Com Port
    Bus 001 Device 004: 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
    ```



    > lsusbで表示されている、↓をみると、com portになるような感じがしますが、どうでしょう?

    comポートのことをよく分かっていないのですが、comポートだとttyUSBというデバイス名になるのでしょうか?

    > うまくシリアル通信ができるようになれば、[このサイト](http://scruss.com/blog/2015/07/12/thermal-printer-driver-for-cups-linux-and-raspberry-pi-zj-58/)あたりを参考に、CUPSのドライバを入れてみるのはどうでしょうか。

    サイトの紹介ありがとうございます。`ttyUSB0`はありませんでしたが、サイトに沿って進めてみます。

    完了したら結果をご連絡します。

    キャンセル

  • 2018/12/30 12:51

    紹介いただいたサイトの通りに進めたところテストページの印刷ができました!
    githubにドライバがあったんですね・・・
    分かっていない点も多いですが、一応問題は解決したので先に進もうと思います。
    ありがとうございました。

    キャンセル

  • 2018/12/30 17:38

    先に進めた、とのことで、なによりです。
    うまく動作できましたら、手順や動作の様子などをまとめて、ブログなどで公開されると、他の方々も参考にできると思います。

    キャンセル

同じタグがついた質問を見る

  • Raspberry Pi

    1044questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

  • コマンド

    249questions

    コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

  • Raspbian

    140questions

  • シリアルポート

    56questions

    シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。