

Swift5、CoreBluetoothを使い、Bluetooth接続のサーマルプリンタをコントロールしようとしています。

そのプリンタとのBluetooth接続（ペアリング）までは成功していますが、プリンタにデータを出力する方法がわかりません。

メーカーのドライバーやライブラリがないと無理でしょうか？  
それともCoreBluetooth、その他の汎用的なライブラリで可能なことでしょうか。

プリンタ等、外部のハードウェアとの接続についてあまり理解していないため、どのような観点で調べたり考えていけば良いか、何か参考になる情報をいただければと思います。

●●●解決した方法●●●  
ご回答いただいた皆さん、ありがとうございます。  
質問後、自分の調査で見つけたライブラリのソースコードから、ひとまずの解決を得ましたので、参考までに情報を残しておきます。

このライブラリを参考にして、出力できました。  
内容的にはCoreBluetoothのみで実装されたもののようです。  
<https://github.com/KevinGong2013/Printer>

自分にとって必要だったポイントは・・・  
（１）スキャンで得たプリンタのUUID情報のうち、適切なService UUID、Characteristic
UUIDを選べていなかった。（これは基本的にプリンタメーカーの情報が必要だと思いますが、自分は目星をつけつつUUIDを切り替えながら試してみました）

（２）データの出力は、CoreBluetoothのwriteValue(_:for:type:)を使う。  
これも試していたのですが、（１）の関係で何も反応がなかったため、わかりませんでした。

その他、ライブラリを使った方が良さそうな部分は、下記のソースコード群にあるようなもろもろの処理です。  
中身はちゃんと理解してないのですが、こういった処理をかまさないと綺麗に出力できないようです。  
画像ファイルから動画ファイルを作成する際の処理と似てるかもしれません。  
<https://github.com/KevinGong2013/Printer/tree/master/Printer/Source/Ticket>

（１）はともかく、（２）についてはこのライブラリを組み込むと簡単にプリンタに出力できそうです。


CC BY-SA 4.0
2020-12-18T12:03:50.293
72748
2020-12-20T05:55:27.857
2020-12-20T05:25:54.750
35922
35922
question
swift bluetooth
Bluetooth接続のサーマルプリンタをコントロールするには？


**結果内容に対応して先頭に挿入：**

その辺の諸々のライブラリは、通常の印字可能文字や改行とか、位置揃えといったよく使われている機能は問題ないけれども、コードページを切り替える、フォントを切り替える/拡大するとか、イメージ/バーコードを印刷するといった際に微妙に出来なかったりする場合があります。

使っている制御コード/コマンドの体系は、EPSON由来のESC/P,ESC/POSが多いのですが、ベンダーによっては独自に拡張して細かい所に互換が無い場合も多いのです。

あとは海外主体のベンダー(Zebraとか)は、その会社独自の制御コード/コマンドの体系を使っていたりします。

何か文字の装飾とかレイアウトを細かく制御したい場合には、ベンダーの提供しているコマンドリファレンスをじっくり読む必要があるでしょう。

* * *

使おうとしているプリンタのベンダーからSDK等が出ているでしょう。  
有名どころは以下ですが、一つのベンダーから複数手段出ていることもあり得ます。  
[レシートプリンター｜開発支援ツールのご紹介](https://partner.epson.jp/support/small_printer/develop/devkit.htm)  
[StarwebPRNT ブラウザー](https://www.star-m.jp/products/s_print/webprnt.html)  
[SDKダウンロード](https://www.citizen-
systems.co.jp/printer/download/sdk/?p=CMP-30II)  
[リンク OS マルチプラットフォーム SDKのダウンロードおよびサポート](https://www.zebra.com/jp/ja/support-
downloads/printer-software/link-os-multiplatform-sdk.html)

これら以外でも用意はされている場合があります。  
プリンタベンダーに問い合わせてみてください。

業者横断的な共通仕様もあります。(モバイルに対応しているかは微妙ですが)  
[ReceiptLineとは](http://www.ofsc.or.jp/receiptline/)

他にnpmとかGitHub等で公開されているライブラリもありますので、お好みで探すのも良いでしょう。

* * *

いずれにしろ、ベンダーやモデルを問わず使えるソリューションというのは無いと思われます。  
使おうとしているプリンタのベンダーやモデルを質問に記載すると、具体的な助言や回答が得られる可能性が高まります。

ただし、日本語でのこうしたQ&A記事はほとんど見かけないのであまり期待は出来ないかも。  
[iPadでの印刷](https://ja.stackoverflow.com/q/60292/26370)

StackOverflowの英語版だと、パラパラといくつかの質問が出ています。  
[Brother Labelprinter. Bluetooth vs AirPrint
[closed]](https://stackoverflow.com/q/61676487/9014308)  
[iOS send file to printer using
bluetooth](https://stackoverflow.com/q/55807223/9014308)  
[Change font size programmatically on thermal Bluetooth
Printer](https://stackoverflow.com/q/53769188/9014308)  
[How to connect Thermal Bluetooth Printer to iOS
devices](https://stackoverflow.com/q/47056562/9014308)


CC BY-SA 4.0
2020-12-18T12:33:32.017
72749
2020-12-20T05:55:27.857
2020-12-20T05:55:27.857
26370
26370
72748
answer


> メーカーのドライバーやライブラリがないと無理でしょうか？

無理とまでは言いませんが、基本的には各種プリンターのメーカーから提供されている仕様を参照することになるでしょう。

[Star webPRNT
SDK](https://www.star-m.jp/products/s_print/sdk/webprnt/manual/ja/index.htm)
のようにメーカーから Bluetooth 経由での印刷用のライブラリが提供されている場合もあれば、プリンターの仕様から自作できる場合もあります。

多くの種類のプリンターで使える共通の仕様といったものは私の知る限り現状無いので、プリンターを問わず便利に使える OSS
のライブラリはあまり期待できない……はずです（この点についてはあくまで私の経験上の話なので、もしあればすいません）。

> どのような観点で調べたり考えていけば良いか、何か参考になる情報をいただければと思います。

という訳で Bluetooth での印刷について調べるには、まずはお使いのプリンターのメーカーからの情報を参照すると良いと考えます。


CC BY-SA 4.0
2020-12-19T02:48:47.057
72754
2020-12-19T02:48:47.057
19110
72748
answer