DENSOのQRコードスキャナ(GT10Q-SR)をPythonで繋いでみた
ある日、おなじみ佐古前装備に行ったときに商品が陳列された棚を眺めてたら、QRコードの元祖DENSOのQRスキャナを見つけました。
価格は通電確認のみのジャンクで1500円でした。立派な金属スタンドも付いていて遊びがいありそうなので即買ってきました。
地元の某T様系企業の人はこれ見ると「ウッ…頭が…」となるらしい
— KMiura (@k_miura_io) 2023年5月27日
かなり闇を感じた(ちな、某ジャンク屋さんで仕入れた pic.twitter.com/j1saTdgDFq
というわけで今回は買ってからだいぶ経ちましたが、このQRコードスキャナをハックしていきます。
シリアル変換ケーブルを用意
買ってから気づいたのですが、このスキャナのインターフェースはRS232Cを使用しておりPCで接続するにはシリアルポートがあるものを用意するかUSBに変換するケーブルを用意する必要があります。
僕はUSBのシリアル変換ケーブルでUSB経由で接続しました。Windows10であれば特に追加でドライバを設定することなく接続ができました。
とりあえず動かしてみる
通電確認
まずは通電確認をしてみます。
トリガーを引くとレーザー光と一緒にQRコードをスキャンするときにわかりやすい枠線が表示されます。
起動には付属のACアダプタをコネクタに接続する必要があります。
PCに接続する
まずはメーカーから配布されているソフトで動くか試します。ソフトはWindowsのみでしか対応してないので、Windows10のPCで検証していきます。
DENSOにはスキャナをPCに接続してキーボードインターフェースとして使えるようにするソフトウェアが配布されているのでそれを使っていきます。
以下のURLから「キーボードインターフェースソフト(QR_kbif)」を選択してインストーラーをダウンロードします。
ダウンロードしたzipファイルを展開してインストーラを起動したらインストールが実行されます。
インストールされたら「QR_kbif3.0」というソフトを起動します。
起動すると以下のダイアログが表示されるので「はい」を選択して自動接続します。
自動接続でQRコードリーダーの接続ポートを探して自動で接続してくれます。
無事に接続されて以下の画面が表示されたら接続設定は完了です。
試しにスキャナのトリガーを引いて以下のようにアプリの画面に読み取った結果が表示されたらQRコードスキャナは正常に動作しています。
某ジャンクショップで見つけたQRコードリーダーをパソコンに繋いだら普通にデータ読み込んだ
— KMiura (@k_miura_io) 2023年6月3日
やはりQRの元祖の有名メーカーだけあって安定稼働するねー
これでスタバごっこできる(分かる人には分かる pic.twitter.com/eC1NPK1Au1
さらにQR_kbifの「アプリへ送信」→「データ送信モード」を「仮想キーボード」に設定すればインターフェースが立ち上がっている間は仮想キーボードとしてQRコードでスキャンした中身をメモ帳アプリなどの入力として使えます。
Pythonでつなげる
ここまではDENSOのツールを駆使してスキャナを繋いで入力ができるようになりましたが、スキャナを使うたびにインターフェースを起動するのは手間ですし、何よりWindowsにしか対応してないのが個人的にはイマイチです…
やはりこういうガジェットはRaspberry PiみたいなLinuxで接続して遊びたいわけです。
ということで今度はLinuxでも使えるPythonで接続できるようにしてみます。
QRコードスキャナ自体はシリアルデバイスとして認識されているので、Pythonで接続するためにpySerialでシリアル通信を使ってスキャンしたデータを取得できるようにすることを目標にします。
スキャナの設定変更
他のソフトでシリアル通信をするためにQRコードの設定を変更する必要があるため以下のリンクからスキャナソフト「Scanner Setting 2D」をインストールします。このソフトもWindowsのみ対応しています。
なお、インストールにはQRdirectに登録する必要があるので、以下のリンクから会員登録をします。(一応個人でも登録はできました)
QR_kbifと同様にインストーラーをダウンロードしたらインストールを実行することで使えるようになります。
起動時には以下のダイアログが表示されるのでスキャナが接続されているポート番号を指定してProduct Nameに「GT10Q/GT11Q-SR/HR」を選択したら「Online」をクリックしてソフトを立ち上げます。
以下の画面が表示されたらスキャナとの接続が完了してセットアップができる状態です。
「ヘッダー/ターミネータ」の設定でターミネータを「LF」に設定します。この設定変更だけでPythonからシリアル通信をできるようになります。
設定を反映させるには、画面上部の黄色い矢印のボタンをクリックすることで設定を反映させることができます。
スキャナに接続するPythonコード
それではPythonでスキャナに接続してみます。
今回はRaspberry Piにスキャナを接続してみます。
以下のコードを「qr_scan.py」で保存します。
import argparse import serial parser = argparse.ArgumentParser() parser.add_argument('-p', '--port', default='/dev/ttyUSB0') args = parser.parse_args() device = serial.Serial(args.port, 9600) print('Scan QR Code...') result = device.read_until() print(result.decode())
動作確認
いよいよ動作確認です。
Raspberry Piに接続したスキャナのシリアルポート番号を確認するために以下のコマンドを実行します。
ls -l /dev/ttyUSB*
以下のコマンドでpySerialをインストールします。
pip3 install pyserial
先程作成したPythonのプログラムを以下のコマンドで立ち上げます。 --port
オプションには先程確認したシリアルポートに変更します。
python3 qr_scan.py --port /dev/ttyUSB0
起動したらトリガーを引きながらQRコードを近づけて以下のようにターミナルに読み取ったデータが表示されたらスキャナは正常接続できています。
だいぶ前に買ったQRの元祖の某T様系企業のスキャナをRaspberry Piでハックしてみた
— KMiura (@k_miura_io) 2023年7月16日
やっぱりWindowsだけで動かしても何の面白みもないからねw pic.twitter.com/sWCwvqiyAl
まとめ
有名メーカーのスキャナだけに簡単にハックできないと思ってましたが、Pythonで接続できるように簡単に設定をいじることができてよかったです。
これでますます遊びがいありますね!