0. 前回までのあらすじ
サーマルプリンタをLinuxから印刷できるようにセットアップし、Raspberry Piから文字、画像をテスト印刷しました。
これまでの記事については『目次』をご覧ください。
1. 印刷サービスをセットアップする
Python、CUIツールから画像を印刷できるようになったので、今度はWebサービスとして「印刷サービス」を構築しました。
印刷サービスは、Docker、Python 3などを使って実装しています。ソースコードは https://github.com/nayutaya/thermal-printer/tree/master/service/printing を参照ください。
# thermal-printerリポジトリをclone済みの場合は、以下の3行は不要です。
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 pull
pi@raspi-3bp$ git checkout service-printing-v1.0.0
pi@raspi-3bp$ git branch -v
* (HEAD detached at service-printing-v1.0.0) 2f45e48 Merge pull request #7 from nayutaya/issue#2_printing_service
master 2f45e48 Merge pull request #7 from nayutaya/issue#2_printing_service
pi@raspi-3bp$ cd ~/repo/github.com/nayutaya/thermal-printer/service/printing/
pi@raspi-3bp$ ./build_image.sh
pi@raspi-3bp$ ./run_service.sh
pi@raspi-3bp$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3798bbbc7239 thermal-printer/service/printing "uwsgi --module=app …" 8 seconds ago Up 6 seconds 0.0.0.0:3030->8080/tcp thermal-printer_service_printing
印刷サービスの起動に成功すると、バージョン番号、日時などがサーマルプリンタから印刷されます。記事の先頭にある写真のうち、上の用紙がその印刷結果です。
2. 印刷サービス経由で印刷する
印刷サービスはWebサービスとして動作しており、3030/tcp
(サーマルサーマル)で待機しています。GET /
を送信することで動作を確認することができます。
pi@raspi-3bp$ curl http://localhost:3030/
{"Service":{"Name":"Printing Service","Version":"1.0.0"},"Time":"2018-11-08T15:25:28.387769"}
POST /print
に対して画像(PNG)を送信することで印刷することができます。
pi@raspi-3bp$ cd ~/repo/github.com/nayutaya/thermal-printer/service/printing/
pi@raspi-3bp$ curl \
--request POST \
--header "Content-Type: image/png" \
--data-binary @hello.png \
http://localhost:3030/print
{"Service":{"Name":"Printing Service","Version":"1.0.0"},"Time":"2018-11-08T15:25:06.839144"}
記事の先頭にある写真のうち、下の用紙がこのコマンドの印刷結果です。