概要
今回やりたかったことは
「ラズパイのNode-REDで、Bluetooth接続のバーコードリーダーを使う」
ということ。
その方法の備忘録です。
背景
製造業の生産ラインで、人の稼働状況を把握する方法としてラズパイを活用する際に
これから行う品番などをバーコードリーダーでシステムに通知する方法を考えたんですが、
ラズパイの設置場所と作業者の距離が少し離れていて・・・
Bluetooth接続のバーコードリーダーを使うことになったんです。
ラズパイでバーコードリーダーを使う記事や、
カメラでQRコードを認識する記事や、
ラズパイのNode-REDで有線のバーコードリーダーを使う記事は見つかったんですが・・・。
無線(Bluetooth接続)のバーコードリーダーを使う記事が無く、
やってみると気を付けないといけないことがあったので、備忘のために記事にしてます。
バーコードリーダー
Amazonでポチッたこちらの商品を買いました。
https://www.amazon.co.jp/gp/product/B085DCV212
Bluetooth接続で、充電スタンドが付いていて、購入当時15%Offだったというだけで買いました(汗)。
バーコードリーダーをつないでみる
このバーコードリーダーには、通信モード(?)が3つあるとのこと。
① Bluetooth HIDプロファイルで認識させる通信する
② Bluetooth SSPプロファイルで認識させて通信する
③ Bluetooth LEデバイスとして認識させて通信する
まずはじめに、Windows PCとこのバーコードリーダーを①の方法で接続して動かしてみました。
OSからは、キーボードとして認識され、問題なくバーコードが読み取れました。
つぎにラズパイでこのバーコードリーダーを①のモードで接続して動かしてみました。
Bluetoothのアイコンをクリックして、「Add Device...」を選択します。
Node-REDで確認してみる
バーコードリーダーが認識できたところで、Node-REDでバーコードリーダーがスキャンしたデータを取得してみたいと思います。
Node-REDにKeyboardからのデータを受け取るノードがあったので、それをデバッグ出力につないで動作確認してみたところ・・・
データが取れない。
ちょっと調べてみると、どうやらこのノード、USB接続のキーボードのキーコードをキャプチャする機能のようですね・・・。
Bluetooth SPPモードで試してみる
Bluetooth SPPは、シリアル通信のプロファイル。
バーコードリーダーがスキャンしたデータを(Bluetoothを介した)シリアル通信で送信してくれるはず。
ということで、まずはラズパイでBluetooth SPPを使えるようにします。
なぜかわかりませんが、ラズパイのGUIでBluetooth SPPの機器をペアリングしにいっても、うまくいきません。
ターミナルでごにょごにょする必要があります。
ターミナルを開き/etc/systemd/system/dbus-org.bluez.serviceを開きます。
$sudo nano /etc/systemd/system/dbus-org.bluez.service
「Service」項目を以下のように編集します。
[Service]
Type=dbus
BusName=org.bluez
- ExecStart=/usr/lib/bluetooth/bluetoothd
+ ExecStart=/usr/lib/bluetooth/bluetoothd --compat
+ ExecStartPost=/usr/bin/sdptool add SP
・・・
変更後、ラズパイを再起動します。
再起動後、ターミナルで以下のコマンドを実行します。
$ bluetoothctl
[bluetooth]# pair (MACアドレス)
[bluetooth]# exit
その後、ターミナルで以下のコマンドを実行します。
$sudo rfcomm -r -M -L 0 bind 0 対象機器のMACアドレス
これでペアリングの設定は完了です。
次にNode-REDでシリアル通信データを取得してみます。
シリアル通信ノードの設定はこんな感じです。
バーコードをスキャンしてみると・・・
データがちゃんと取れました!