>100 Views
January 19, 26
スライド概要
Zorin OS 18 Core × Cat Printer で動かす自分専用印刷環境 〜以前の失敗を乗り越え、実用的なGUIアプリを 作るまで〜 Python 1 / 20
今回の主役:猫型プリンター 等で人気の「Mini Pocket Printer」。 手のひらサイズでインク不要のガジェット 印刷方式: 感熱式(サーマル) 通信方式: Bluetooth Low Energy (BLE) 有効幅: 384ドット(約48mm) 価格: だいたい1300円くらい AliExpress 2 / 20
今回の主役:猫型プリンター 等で人気の「Mini Pocket Printer」。 手のひらサイズでインク不要のガジェット 印刷方式: 感熱式(サーマル) 通信方式: Bluetooth Low Energy (BLE) 有効幅: 384ドット(約48mm) 価格: だいたい1300円くらい AliExpress 今回の目標: スマホアプリ(FunPrint等)を使わず、 Zorin OSから直接「画像」と「日本語テ 3 / 20 キスト」を印刷する!
使用環境(My Machine) 少し古めのノートPCを最新OSで蘇らせた環境です。 PC: Lenovo ThinkPad A285 CPU: AMD Ryzen 5 2500U RAM: 8GB OS: Zorin OS 18 Core (Ubuntu 24.04 ベース) 4 / 20
使用環境(My Machine) 少し古めのノートPCを最新OSで蘇らせた環境です。 PC: Lenovo ThinkPad A285 CPU: AMD Ryzen 5 2500U RAM: 8GB OS: Zorin OS 18 Core (Ubuntu 24.04 ベース) ポイント: 以前の別のライブラリ利用で失敗。 今回は、より柔軟な rbaron/catprinter を選択 しました。 5 / 20
なぜ以前は失敗したのか? 原因は「通信の窓口(UUID)」にありました。 以前のソフト: 特定の窓口(0000ae02)しか見ない固定設計。 今回のソフト: 複数の窓口候補(ae30, af30等)を自動で探す設計。 6 / 20
なぜ以前は失敗したのか? 原因は「通信の窓口(UUID)」にありました。 以前のソフト: 特定の窓口(0000ae02)しか見ない固定設計。 今回のソフト: 複数の窓口候補(ae30, af30等)を自動で探す設計。 教訓: 海外製の格安ガジェットは、中身(UUID)が微妙に違う「亜種」が多い。 「決め打ち」 ではなく「柔軟な探索」をするライブラリ選びが重要! 7 / 20
【重要】img.py の修正内容 そのままだと Linux 環境ではプレビュー表示でフリーズしたり、 画像が正しく表示されない ことがあります。 修正のポイント: 元のコードは cv2.imshow(OpenCV)を使っていましたが、 これを Pillow (PIL) を使った表示に書き換えました。 の修正イメージ ではなく で表示させる # img.py def show_preview(img_data): # OpenCV Pillow from PIL import Image preview_img = Image.fromarray(img_data) preview_img.show() # OS 標準のビューアーが開く これにより、Zorin OS 標準の画像ビューアーで安全に確認できるようになります。 8 / 20
ライブラリのPythonコード解説:画像の二値化 プリンターは「白か黒か」しか判断できません。 グレーの画像を「ドットの密度」で表現する コードの一部です。 より抜粋 # catprinter/img.py from PIL import Image import numpy as np def read_img(path, width, algo): img = Image.open(path).convert('L') # # 384px img = img.resize((width, int(width * img.height / img.width))) 指定の幅( )にリサイズ グレースケール化 法で網点(ドット)にする これにより写真も新聞紙のような質感で印刷可能に! # Floyd-Steinberg # return binarize(np.array(img), algo) 9 / 20
ライブラリPythonコード解説:BLE通信の仕組み でデータを送る「心臓部」です。 asyncio という仕組みを使って、非同期でデータ を送ります。 Bluetooth より抜粋 プリンターを探して接続 データを バイト程度の塊(チャンク)に分ける プリンターの「書き込み窓口」にデータを送信 送りすぎ防止の休憩 # catprinter/ble.py async def run_ble(data, device_name): # async with BleakClient(address) as client: # 200 for chunk in chunkify(data, client.mtu_size - 3): # await client.write_gatt_char(TX_UUID, chunk) await asyncio.sleep(0.02) # 10 / 20
GUI アプリとしての統合 ターミナルを使わずに済むよう、 Tkinter を使ってボタン一つで操作できるGUIを作成。 11 / 20
テスト時の動画 https://youtu.be/nr53_kSStwk 12 / 20
GUI アプリの特徴 画像選択ボタン: filedialog で画像かテキストファイルを選択 確認ダイアログ: messagebox.askyesno で「プリンタの電源いれてください」を表示 ステータス表示: 画面下部に「送信中...」などの状態を表示 13 / 20
アプリPythonコード解説:日本語テキストの画 像化 GUI プリンター自体は日本語フォントを持っていません。 そこで、「PC側で日本語を画像にしてか ら送る」という処理を追加しました。 に実装した機能 # gui_print.py from PIL import ImageDraw, ImageFont def text_to_image(text): # Zorin OS font = ImageFont.truetype("NotoSansCJK-Regular.ttc", 24) img = Image.new('RGB', (384, 500), "white") draw = ImageDraw.Draw(img) draw.text((10, 10), text, fill="black", font=font) return img の日本語フォントを指定 14 / 20
デスクトップからGUI一発起動設定 毎回コマンドを打つのは大変です。 .desktop ファイルを作って「アプリ化」しました。 # ~/Desktop/catprinter.desktop [Desktop Entry] Type=Application Name=Cat Printer # 1 Exec=bash -c "source ~/catprinter/venv/bin/activate && python3 gui_print.py" Icon=printer Terminal=false 仮想環境を起動してからプログラムを走らせる魔法の 行 15 / 20
デスクトップからGUI一発起動設定 毎回コマンドを打つのは大変です。 .desktop ファイルを作って「アプリ化」しました。 # ~/Desktop/catprinter.desktop [Desktop Entry] Type=Application Name=Cat Printer # 1 Exec=bash -c "source ~/catprinter/venv/bin/activate && python3 gui_print.py" Icon=printer Terminal=false 仮想環境を起動してからプログラムを走らせる魔法の 行 これで、デスクトップのアイコンをダブルクリックするだけで、 いつでも印刷準備が整いま す。 16 / 20
トラブルシューティング:2台ある場合 もし猫型プリンターを2台持っていたら? 現在の挙動: スキャンして最初に見つかった方に接続します。 解決策: device 引数に MAC アドレスを指定します。 例:特定の個体に固定する # run_ble(data, device="01:23:45:67:89:AB") 17 / 20
トラブルシューティング:2台ある場合 もし猫型プリンターを2台持っていたら? 現在の挙動: スキャンして最初に見つかった方に接続します。 解決策: device 引数に MAC アドレスを指定します。 例:特定の個体に固定する # run_ble(data, device="01:23:45:67:89:AB") 初心者の方は、まずは「1台だけ電源を入れる」のが一番確実です! 18 / 20
まとめ:Pythonで広がる世界 の壁を越える: Zorin OS 18 Core という最新環境でも、Pythonなら自由自在。 ライブラリの再利用: 優秀な rbaron/catprinter を土台に、自分の「欲しい」を肉付け。 日本語対応の実現: 自分でコードを書くことで、海外製品に日本語機能を付与できた。 OS 見た目かわいい超小型PCプリンターができました 19 / 20
ありがとうございました! Zorin OS で 楽しい Cat Printer ライフを! 20 / 20