![[作ってみた] レシートプリンター付きデバイスを使ってメモを出してみた](https://devio2024-media.developers.io/image/upload/v1751177910/user-gen-eyecatch/nso1641smcalsp5jcczd.jpg)
[作ってみた] レシートプリンター付きデバイスを使ってメモを出してみた
こんにちは、まるとです。
今回は比較的ポエムよりの記事です。
普段はガジェットオタクをしたり、コンサル部で AWS ソリューションアーキテクトをしています。
つい最近、↓のようなデバイスを手に入れました。
※ どう見ても業務用デバイスですが私物です。(クラメソステッカーは自分で貼りました)
何かというと、レシートプリンター機能がついた Android デバイスです。
よくお店でキャッシュレス決済をするときに見ることもあるのではないでしょうか。
なぜこの端末を買ったのかというと、最近やりたいこととして↓のようなものがありました。
- イベント会場など PC が広げにくい環境でも紙でメモを出力できるようにしたい
- ある程度プリセットを持ちつつ、必要なものをその場で印刷したい
- けどモバイルインクジェットプリンターまでは不要
- なるべくランニングコストを抑えたい
ある程度選択肢が限られたメモを出したい、というのが強く、買ってみました。
レシートに印刷するまで
任意の文字列を印刷するには、Android アプリの開発が必須となります。
ただ、印刷に必要なドキュメントやライブラリ自体は公式で提供しているため、かなり簡単に構築できます。
必要なもの
それでは実際に開発を行なっていく上で必要なものリストです。
- Android Studio
- デバッグ機能が有効な端末
- USBケーブル
1. 端末のデバッグ機能を有効化する
Android アプリの開発者だと多くの方がご存知だと思いますが、開発中アプリをインストールするために開発者向けオプションの有効化、USB デバッグの有効化が必要となります。
開発者オプションを有効化するには「設定」→「端末の状態」→「ビルド番号を連打」することで有効化可能です。
開発者オプションが有効化されると、設定に新しく「開発者向けオプション」という項目が追加されるので、開いた後「USBデバッグ」をオンにすれば完了です。
これで開発中アプリを実機にインストールし動作させることができます。
2. アプリを作る
それでは実際にアプリを作ります。
Android アプリの開発には Android Studio を使用します。
※ 本記事では Android Studio 自体の使い方は割愛します。
レシートに印刷するにあたり、デバイスのメーカーである Sunmi 社からライブラリが公開されているので、build.gradle
に以下の依存関係を追加して同期します。
dependencies {
implementation 'com.sunmi:printerlibrary:1.0.23'
}
ライブラリをインストールしたら実際にコードを書いたり、画面を作っていきます。
今回テスト用なので、画面にボタンを一つだけ置くシンプルなものとします。
それではコードを書いていきます。
今回は、ボタンが押されたら特定の文字列を印刷する、というのをゴールに行います。
まず、アプリを起動する際に内蔵プリンターと接続します。
必要なクラスをインポートします。
import com.sunmi.peripheral.printer.InnerPrinterCallback;
import com.sunmi.peripheral.printer.InnerPrinterException;
import com.sunmi.peripheral.printer.InnerPrinterManager;
import com.sunmi.peripheral.printer.SunmiPrinterService;
続いて、プリンターを操作するためのサービスを初期化しつつ、フィールドに保持します。
private SunmiPrinterService sunmiPrinterService;
@Override
protected void onCreate(Bundle savedInstanceState) {
try {
InnerPrinterManager.getInstance().bindService(this, innerPrinterCallback);
} catch (InnerPrinterException e) {
throw new RuntimeException(e);
}
}
private final InnerPrinterCallback innerPrinterCallback = new InnerPrinterCallback() {
@Override
public void onConnected(SunmiPrinterService service) {
sunmiPrinterService = service;
}
@Override
public void onDisconnected() {
sunmiPrinterService = null;
}
};
続いて、ボタンが押された時に印刷するように記述していきます。
Button printButton = findViewById(R.id.button);
printButton.setOnClickListener(v -> {
try {
if (sunmiPrinterService != null) {
sunmiPrinterService.setFontSize(50, null);
sunmiPrinterService.printText("Hello World!", null);
sunmiPrinterService.lineWrap(3, null);
} else {
Toast.makeText(this, "プリンター未接続です", Toast.LENGTH_SHORT).show();
}
} catch (RemoteException e) {
e.printStackTrace();
}
});
コードを見るとわかりやすいのですが、プリンターの操作自体は以下のような記述のみで行えます。
// フォントサイズの指定
sunmiPrinterService.setFontSize(50, null);
// 文字列の印刷
sunmiPrinterService.printText("Hello World!", null);
// 紙送り(3行)
sunmiPrinterService.lineWrap(3, null);
なお、QRコードや2次元コードを生成して印刷、画像の印刷などもできます。
あとは実機にインストールしてボタンを押すことでレシートに印刷されます。
あとはうまく画面を作ったり、コードを書いていくのを繰り返していくことでメモ作成ツールが完成します。
サンプルですが、以下の要件を仮に設定してアプリを作ってみました。
仮の要件
- イベントで使う
- 来場目的やロール、興味があるコンテンツなどをプリセットとして置いておき、選択できるようにする
- 選択した項目を一覧で印刷したい
ということで、弊社のサービス一覧から合致しそうな単語を抜き出して選択肢にしつつ、アプリを作ってみました。
実際に印刷してみた図
終わりに
今回はちょっと変わったデバイスを買ったので、簡単にですが一つツールを作ってみました。
実は Android アプリを作るのが初めてだったのですが、生成 AI に聞いたりしながら開発したところ、感覚 10〜15 分ぐらいで動くものが作れました。(実際は生成されたコードなどをチェックしていたので全部で30分弱?ぐらいです)
作ったものが動く瞬間は見ていて楽しいです。
ぜひ皆さんもアプリ開発してみてはいかがでしょうか。
以上、まるとでした。