DENSOのQRコードスキャナ(GT10Q-SR)をPythonで繋いでみた

ある日、おなじみ佐古前装備に行ったときに商品が陳列された棚を眺めてたら、QRコードの元祖DENSOQRスキャナを見つけました。

価格は通電確認のみのジャンクで1500円でした。立派な金属スタンドも付いていて遊びがいありそうなので即買ってきました。

というわけで今回は買ってからだいぶ経ちましたが、このQRコードスキャナをハックしていきます。

シリアル変換ケーブルを用意

買ってから気づいたのですが、このスキャナのインターフェースはRS232Cを使用しておりPCで接続するにはシリアルポートがあるものを用意するかUSBに変換するケーブルを用意する必要があります。

僕はUSBのシリアル変換ケーブルでUSB経由で接続しました。Windows10であれば特に追加でドライバを設定することなく接続ができました。

とりあえず動かしてみる

通電確認

まずは通電確認をしてみます。

トリガーを引くとレーザー光と一緒にQRコードをスキャンするときにわかりやすい枠線が表示されます。

起動には付属のACアダプタをコネクタに接続する必要があります。

PCに接続する

まずはメーカーから配布されているソフトで動くか試します。ソフトはWindowsのみでしか対応してないので、Windows10のPCで検証していきます。

DENSOにはスキャナをPCに接続してキーボードインターフェースとして使えるようにするソフトウェアが配布されているのでそれを使っていきます。

以下のURLから「キーボードインターフェースソフト(QR_kbif)」を選択してインストーラーをダウンロードします。

www.denso-wave.com

ダウンロードしたzipファイルを展開してインストーラを起動したらインストールが実行されます。

インストールされたら「QR_kbif3.0」というソフトを起動します。

起動すると以下のダイアログが表示されるので「はい」を選択して自動接続します。

自動接続でQRコードリーダーの接続ポートを探して自動で接続してくれます。

無事に接続されて以下の画面が表示されたら接続設定は完了です。

試しにスキャナのトリガーを引いて以下のようにアプリの画面に読み取った結果が表示されたらQRコードスキャナは正常に動作しています。

さらにQR_kbifの「アプリへ送信」→「データ送信モード」を「仮想キーボード」に設定すればインターフェースが立ち上がっている間は仮想キーボードとしてQRコードでスキャンした中身をメモ帳アプリなどの入力として使えます。

Pythonでつなげる

ここまではDENSOのツールを駆使してスキャナを繋いで入力ができるようになりましたが、スキャナを使うたびにインターフェースを起動するのは手間ですし、何よりWindowsにしか対応してないのが個人的にはイマイチです…

やはりこういうガジェットはRaspberry PiみたいなLinuxで接続して遊びたいわけです。

ということで今度はLinuxでも使えるPythonで接続できるようにしてみます。

QRコードスキャナ自体はシリアルデバイスとして認識されているので、Pythonで接続するためにpySerialでシリアル通信を使ってスキャンしたデータを取得できるようにすることを目標にします。

スキャナの設定変更

他のソフトでシリアル通信をするためにQRコードの設定を変更する必要があるため以下のリンクからスキャナソフト「Scanner Setting 2D」をインストールします。このソフトもWindowsのみ対応しています。

www.denso-wave.com

なお、インストールにはQRdirectに登録する必要があるので、以下のリンクから会員登録をします。(一応個人でも登録はできました)

www.denso-wave.com

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コードを近づけて以下のようにターミナルに読み取ったデータが表示されたらスキャナは正常接続できています。

まとめ

今回はDENSOQRスキャナをハックしました。

有名メーカーのスキャナだけに簡単にハックできないと思ってましたが、Pythonで接続できるように簡単に設定をいじることができてよかったです。

これでますます遊びがいありますね!