1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

サーマルプリンタ を AirPrint 化する

Posted at

はじめに

数年前の記事で使った サーマルプリンタ(DP-EH600) を、AirPrint化して iPhone や Mac からお手軽に印刷できる環境を作りたいと思い立ち、今回の記事に至りました。

Thermal-Printer.png

当初は、DP-EH600 を USBシリアル経由で Macに接続し、Python を使い Mac から出力していました。が、これでは AirPrint で出力できないため、ESP32 の UART に接続して、ESP32 に AirPrint のプロトコルを実装しようと考え、AirPrintプロトコルをネットで探しました。

すると、『Raspberry Pi 4 に サーマルプリンタ を接続し、ローカル&ネットワークプリンタ として設定する方法を説明したサイト』を発見しました。
さらに、『Raspberry Pi 4 に接続した ローカルプリンタを AirPrint化 する動画』を発見しました。
と、いうことは、この両者を組み合わせることで、Raspberry Pi 4 に 接続した サーマルプリンタ を AirPrint化できるということです。

本稿はこれについて、まとめたものです。

サーマルプリンタ について

当時、DP-EH600 を Amazonで 4500円で購入しました。しかし、現在は販売されていません。同様なインタフェースを持つ HS-QR71 や CSN-A2 サーマルプリンタは、Aliexpressなら今でも3000円程度で購入できるようです。

出典

今回参考にした サイト・動画 は、次の通りです。


以下、設定方法を順を追って説明します。

設定方法

  • 今回使用した Raspberry Pi 4 は 次の通り
    $ ./rev.py
    Revision: c03112
    	Model: 4B
    	Revision: 1.2
    	Memory Size: 4GB
    	Processor: BCM2711
    	Manufacturer: Sony UK
    

現時点の最新OSをインストールした。
( 64ビット Raspberry Pi OS(bookworm)Desktop 版 )

$ cat /sys/firmware/devicetree/base/model
Raspberry Pi 4 Model B Rev 1.2 

$ cat /etc/debian_version
12.12

$ cat /etc/issue
Debian GNU/Linux 12 \n \l

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 12 (bookworm)
Release:	12
Codename:	bookworm

$ uname -a
Linux raspberrypi48 6.12.34+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.34-1+rpt1~bookworm (2025-06-26) aarch64 GNU/Linux

$ cat /proc/version
Linux version 6.12.34+rpt-rpi-v8 (serge@raspberrypi.com) (aarch64-linux-gnu-gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Debian 1:6.12.34-1+rpt1~bookworm (2025-06-26)

Networked Thermal Printer using Raspberry Pi and CUPS

サーマルプリンタを Raspberry Pi 4 のローカル/リモートプリンタとする方法です。

1. OS のシリアルポートを有効にする

今回使用した DP-EH600 サーマルプリンタは、TTLシリアル接続タイプです。

  • raspi-config を起動し、シリアルポートを有効化する

    $ sudo raspi-config
    

  • 「3. Interface Option」を選択

raspi1.png
  • 「I6 Serial Port」を選択
raspi2.png
  • 「Would you like a login shell to be accessible over serial?」に「No」を選択
raspi3.png
  • 「Would you like the serial port hardware to be enabled?」に「Yes」を選択
raspi4.png
  • 「Ok」を選択
raspi5.png
  • 「Finish」を選択(raspi-config を終了)
raspi6.png
  • 「Reboot」する
    (再起動すると、シリアルポートが有効化する)

2. プリンタの接続と設定

  • サーマルプリンタの電源を接続する
    5V2A〜3Aの電源が必要。5V電源の電流実測値は 2A弱でした(Raspbrry Pi 4 の電源とは別で)

  • サーマルプリンタの GND / RX / TX を、Raspberry Pi の GPIOヘッダーに刺す
    GndTxRx.png GndTxRx2.png

( XON / XOFF による(ソフトウェア)フロー制御を使用するため、RTS 信号の接続は不要 )

3. プリンタについて知る

フィードボタンを押したままサーマルプリンタに電源を接続すると、テストページが印刷される。そこのVersionを確認する。今回使用した DP-EH600 は、以前に「爆速化」済み(115200bps)であり、「VERSION 2.69」でした。

ver.png

19200 や 9600 のモノでも問題ない。

プリンタのボーレートに置き替える
$ stty -F /dev/serial0 115200
$ echo -e "This is a test.\\n\\n\\n" > /dev/serial0

サーマルプリンタに「This is a test.」が出力される。(下の写真の上側)

IMG_0295.png

もし、出力されない場合は、次の点を確認してください。

  • プリンタは5V、2A以上の電源に接続していますか?
  • プリンタの LED が 時々 点滅しますか?
  • 感熱紙 が取り付けられていますか?
  • TX/RXピンは Pi と プリンタ の間で接続されていますか?
    クロスしていますか? (つまり、プリンタ の TX は Pi の RXD に接続する必要がある)
  • プリンタ と Pi の間で、GND は接続されていますか?
  • シリアルコンソールオプションを 無効にして、シリアルポートハードウェアを 有効にしましたか? raspi‑config で確認する

4. 主要なインストールを開始

プリンタが 上記の基本テストに合格したら、ソフトウェアに移ります。

パッケージデータベースが最新であることを確認してから、いくつかのパッケージをインストールします

$ sudo apt update
$ sudo apt install -y libcups2-dev libcupsimage2-dev git build-essential cups system-config-printer

(古い Raspberry Pi をお使いの場合は、インストールに15分ほどかかる場合があります)

サーマルプリンタ用の CUPSフィルターをダウンロードしてインストールします

$ git clone https://github.com/adafruit/zj-58
$ cd zj-58
$ make
$ sudo ./install

コンパイル時にいくつか警告メッセージが表示されますが、これは無視してください。エラーが発生するとコンパイルが停止します。

残りの手順

サーマルプリンタのファームウェアのバージョンに関係なく、このセットアップの残りの部分は同じです。

  • Pi メニュー Preferences → Print Settings を選択
menu1.png

「Print Settings」メニューが表示されない場合は、ZJ-58CUPSフィルターがインストールされていません。上記の手順を確認して、もう一度お試しください。
 

  • 「Print Settings」ダイアログで「Add」ボタンをクリック
    pr0.png
     

  • 「Serial Port #1」を選択し、ボーレート(テストページに合わせて115200)とフロー制御(XON/XOFF(Software))を設定、「Forward」ボタンをクリック

pr2.png
  • 次のフォームで、「Select printer from database」をクリックし、リストの一番下までスクロールして「Zijiang」を選択
pr4.png
  • もう一度「Forward」をクリックし、次のフォームで「Zijiang ZJ-58」ドライバーを選択
pr5.png
  • もう一度「Forward」をクリックすると、プリンタに名前を割り当てるオプションが表示される
    または、デフォルトの ZJ-58をそのまま使用
pr6.png
最後に「Apply」をクリック

(テストページを印刷するか聞かれましたが、今回はキャンセルしました)
pr7.png

  • すると、リストに ZJ-58プリンターが表示されます
pr8.png
  • ZJ-58アイコンを 右クリックし、メニューから「Properties」を選択
pr10.png

-「Printer Options」の「印刷後の送り距離」を「12mm送り」に設定
pr11.png

-「Settings」の「Device URI」文字列の最後を確認し、もし「+flow=soft」で終わっていない場合は、その右横の「Change...」をクリック
pr20.png

  • 「Current device (Current)」の「Flow Control」で「XON/XOFF(Software)」を選択して「Apply」をクリック
pr21.png
  • 最後に、「Print Settings」ダイアログの「OK」クリックし閉じる

「OK」をクリックすると、プリンタは「lp」サービスを介して Raspberry Pi で完全に動作するはずです。

試してみましょう!

  • ターミナルウィンドウに戻って
$ echo "This is a test." | lp

これにより、「This is a test.」という文字列が再度印刷されるはずです(下の写真の下側)。ただし、最初のテストとは異なり、このテストではプリンターの内部フォントが使用されていないことがわかります。実際にはテキストがラスタライズされており、サイズなどの設定を微調整できます。
(下の写真の上側は、プリンタ内のフォントで印刷したもの)

IMG_0295.png
  • ビットマップの印刷も試すことができます。
$ lp -o fit-to-page /usr/share/raspberrypi-artwork/raspberry-pi-logo.png
lp-o.png

上部が少し欠けて印刷された。fit-to-pageオプションを消しても欠ける。原因がわからない。

ほとんどのラスター形式がサポートされており、ベクター形式の場合はPDFがあります。
SVGは直接サポートされていません。LibreOffice Drawで印刷するか、SVGファイルをPDFとして保存し、印刷します。

5. ネットワーク印刷の設定

同じネットワーク上の他のシステムからプリンターにアクセスするには、あと数回操作が必要です。

  • ZJ-58アイコンを 右クリックし、メニューから「Properties」を選択
pr10.png
  • 「Polices」セクションで、「Shard」がチェックされていることを確認して、「OK」をクリック
net1.png
  • メインの「Print Settings」フォームに戻り、メニュー「Server」→「Settings...」を選択
net2.png
  • 「Publish shared printers connected to this system」チェックボックスをオンにして、「OK」をクリック
net3.png

これで、このプリンターは他のシステムからもアクセスできるようになりました。Windows または MacOS を実行しているLinux以外のコンピューターからもアクセスできるようになります。

たとえば、Macでは、システム環境設定「プリンタとスキャナ」に移動し、「プリンタ、スキャナ、またはファックスを追加...」ボタンをクリックすると、利用可能なネットワークプリンタが表示されます。

net5.png
  • 「ZJ-58 @ Hostname」を選択して、「追加」をクリック
net6.png
  • ZJ-58 リモートプリンタが追加されました
net7.png
  • その後、任意のアプリケーションからサーマルプリンタに印刷できるようになります
net8-1.png

Airprint with Rapsberry Pi

これまでの手順にて、Rapsberry Pi にローカルプリンタの設定が完了しているとして、後半の AirPrint化について説明します。

1. ターミナルで次のコマンドを実行

$ sudo apt install -y cups
$ sudo apt install -y printer-driver-gutenprint

$ sudo usermod -a -G lpadmin <your_pi_username>
 # ex, sudo usermod -a -G lpadmin piuser

$ sudo cupsctl --remote-any

$ sudo reboot

(再起動します)
 

2. ブラウザを起動し、http://localhost:631 を開く

cu1.png

Macのブラウザで開く場合は、Rapsberry Pi の IPアドレス:631 を入力する。
(なぜか日本語になった)
cu-mac.png

ここでは、Rapsberry Pi のブラウザで作業を続ける想定で説明する(Macで行うことも可能)。

  • Administration タブをクリック
cu2.png
  • 「Add Printer」ボタンをクリック
    Sing inを求められたら、Rapsberry Pi の ユーザ名・パスワードを入力して「Sing in」をクリック
cu3.png
  • Local Printersで「Serial Port #1」(サーマルプリンタ)をクリック
cu5.png
「Continue」ボタンをクリック
  • ボーレートに 115200、フロー制御に XON/XOFF(Software) を選択
cu6-1.png
「Continue」ボタンをクリック
  • Name, Description, Locationを入力する
    (使用できない文字に注意する)
cu7.png
「Continue」ボタンをクリック
  • Makeのリストを最後までスクロールして Zijiang を選択
cu8.png
「Continue」ボタンをクリック
  • Modelのリストで Zijiang ZJ-58 を選択
cu9.png
「Add Printer」ボタンをクリック

プリンタが追加されました。

  • 「Set Printer Options」ボタンをクリック
cu10.png
  • Media Sizeを選択
cu11.png
「Set Default Options」ボタンをクリック
  • Connection文字列の最後を確認する
cu13.png

+flow=softになっていれば問題なし

cu12-1.png
  • もし、+flow=noneの場合は、左から2番目の「Administration」ドロップダウンから Modify Printer をクリック
cu14.png
  • Current Connection を選択し、「Continue」ボタンをクリック
cu15.png
  • Baud Rate に 115200、Flow Control に XON/XOff(Software) を選択し、「Continue」ボタンをクリック
cu16.png
  • 変更がなければ「Continue」ボタンをクリック
cu17.png
  • Current Driver を選択し、「Modify Printer」ボタンをクリック
cu18.png
  • Connection文字列の最後が+flow=softになっていることを確認する
cu19.png

3. テストプリントを実行

左側の「Maintenance」ドロップダウンから Print Test Page をクリック
cu20.png

少し処理が走って、サーマルプリンタ からテストページが出力されれば設定成功。ゴミが出力される場合は、ボーレート、フロー制御の設定を見直してください。

(右側はフロー制御の設定ができておらず、ゴミを出力した例)

IMG_0297.png

なお、Printer Options の Media Size で、縦幅に 210mm を指定している場合は、テストページも 210mm 印刷されます。故障ではありません。

4. AirPrint の設定

  • ターミナルで次のコマンドを実行
$ sudo apt install -y avahi-daemon

$ sudo reboot
  • 再起動すると、avahi-daemonが有効になる

これで、iPhone / iPad の AirPrint から サーマルプリンタが見える。
(ネットワークプリンタである ZJ-58 も見えている)

IMG_5844.PNG IMG_5845.PNG

用紙サイズの設定で縦幅を 短くできます。

カラー画像は 自動的に 白黒ディザリングされます。
iPhone出力した結果は、下の写真の上側。欠けずに印刷できています。
(下側は、lpコマンドで出力した 同じPNGファイル)
IMG_0299.png

おわりに

無事にAirPrint化できたことにより、iPhoneで写真を撮って すぐに サーマルプリンタで出力できるようになりました。

サーマルプリンタも、Raspberry Pi 4 も、手持ちで使っていなかったモノだったことで、これによる追加の出費はありませんでしたが、Raspberry Pi 4 を使うことになり、システム全体のコストは そこそこ高いです。

また、サーマルプリンタと、Raspberry Pi 4 の両方の電源の合計は、5A〜7A必要となるため、電源を準備するコストもそれなりに高いです。
(市販のフォトプリンタの方が安いかも)

Macから ちょっとしたメモを出力するにも重宝しています。
最後に、サーマルプリンタ と Raspberry Pi 4 を一つに収めるケースを作成して完成にしようと思います。




以上

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?