Skip to main content

barcodewatch

Tests

Threaded serial line reader for Python with a simple callback API, built for barcode scanners.

シリアル接続のバーコードスキャナーなどから送られてくる行単位のデータを、バックグラウンドスレッドで読み取り続け、完了した1行ごとにコールバックへ渡すライブラリです。GUI(tkinterなど)のメインループを止めずに、スキャンイベントを受け取れます。

from barcodewatch import Scanner
from barcodewatch.presets import TERA_HW0002

def on_scan(data: str) -> None:
    print(f"scanned: {data}")

with Scanner("/dev/ttyUSB0", **TERA_HW0002) as scanner:
    scanner.on_scan(on_scan)
    ...

なぜbarcodewatchなのか

バーコードスキャナーはキーボードエミュレーション(HID)モードで使われることが多いですが、業務用スキャナーはシリアル(RS-232/USB-CDC)接続で使うことも珍しくありません。シリアル接続の場合、自分でポートを開いて読み取りループを書く必要があり、GUIと組み合わせようとするとスレッド周りの設計が地味に面倒です。

barcodewatch(本プログラム)では、ポートを開いてバックグラウンドスレッドで読み取りを開始し、区切り文字(CR/LF/CRLF)で区切られた1行が完成するたびに登録済みコールバックを呼び出す、という最小限の仕組みだけを提供します。

現状、行単位のテキストデータ受信のみの機能となっています。バイナリプロトコルの解析やスキャナー側の設定変更(コマンド送信)が本格的に必要な場合は、他のより高機能なライブラリについても検討してください。

インストール

pip install barcodewatch

PyPIで公開しています。

API

  • Scanner(port, baudrate=9600, bytesize=EIGHTBITS, parity=PARITY_NONE, stopbits=STOPBITS_ONE, timeout=1.0) — シリアルポートを開き、即座にバックグラウンドの読み取りスレッドを開始します。portとtimeout以外のデフォルト値はserial.Serial自身のデフォルトと同じで、特定の機種を前提にした値は一切持ちません(timeoutのみ、読み取りスレッドがclose()に素早く反応できるようにするための実装上の都合で1.0にしています。機種の設定ではありません)。
  • barcodewatch.presets — 特定機種向けの設定をまとめたモジュール。現状TERA_HW0002(元記事の想定機種)のみですが、他機種を使う場合は同じ形のdictを自分で定義してScanner(port, **your_preset)のように渡せます。Scanner自体は特定機種を一切知りません。
  • scanner.on_scan(callback) — callback(data: str)を登録します。CR/LF/CRLFで区切られた行が完成するたびに呼び出されます。何個でも登録可能で、どのスレッドから呼んでも安全です。
  • scanner.send(data) — 生のバイト列をシリアルポートに書き込みます。
  • scanner.running — 読み取りスレッドが停止するとFalseになります(close()後、またはデバイスが切断された場合など)。
  • scanner.close() — スレッドを停止し、ポートを閉じます。何度呼んでも安全です(with Scanner(...) as scanner:を使えば自動的に呼ばれます)。

tkinterと組み合わせた一通りの使用例はexamples/tkinter_gui.pyを参照してください。

動作検証

検証環境(2026-08-23)

項目 内容
OS Windows 11 Pro
Python 3.10.6(プロジェクト専用のvenv)
インストール方法 pip install -e .
依存パッケージ pyserial 3.5
バーコードリーダー Tera HW0002(USB接続、USB-SERIAL CH340として認識、COM5)

確認できたこと

  • Scanner("COM5", **TERA_HW0002)でポートを開き、実機でバーコードを連続スキャンしてon_scanコールバックに値が正しく渡ることを確認。
  • examples/tkinter_gui.pyを実行し、tkinterウィンドウの「Scan Data:」欄にスキャンごとの値が正しく反映されることを確認。

未検証

  • Linux / macOSでの動作(pyserial自体はクロスプラットフォームのため動作するはずだが、実機未確認)

ライセンス

MIT — LICENSEを参照してください。

背景

このライブラリは、Qiitaに投稿した元のプログラムを土台に、バグ修正・API整理・パッケージ化を行って作られています。

実装のコーディングやレビュー、設計の壁打ち相手としてClaude Codeを使用しました。

Metadata

Release files for barcodewatch 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for barcodewatch 0.1.0
File Size Uploaded
barcodewatch-0.1.0.tar.gz 9.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for barcodewatch 0.1.0
File Interpreter ABI Platform
barcodewatch-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 17.5 kB

Release files / barcodewatch-0.1.0.tar.gz

Download URL barcodewatch-0.1.0.tar.gz
Size 9.7 kB
Tags Source
SHA-256 checksum
How to use checksums
d01f7a5252fe881445933413b1a2dca5dfd14d852519f4febf2b7753c42dd8f0
BLAKE2b-256 checksum
How to use checksums
5e5ed71aa6fab1629f333311794b1b367882cef48f119e27433f7fb31111a848
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.6

Release files / barcodewatch-0.1.0-py3-none-any.whl

Download URL barcodewatch-0.1.0-py3-none-any.whl
Size 7.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8dca2977af3620f4836fc1a29dd46c4a4313cf12f800bc5a9a51c22c14f943e8
BLAKE2b-256 checksum
How to use checksums
5438e68d2864b01caf7297a7a06cb22edde08d086f77dbe7705a644edd5ba30e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.6

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page