2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ラズパイのNode-REDでBluetooth接続のバーコードリーダーを使う

Posted at

概要

今回やりたかったことは
「ラズパイのNode-REDで、Bluetooth接続のバーコードリーダーを使う」
ということ。
その方法の備忘録です。

背景

製造業の生産ラインで、人の稼働状況を把握する方法としてラズパイを活用する際に
これから行う品番などをバーコードリーダーでシステムに通知する方法を考えたんですが、
ラズパイの設置場所と作業者の距離が少し離れていて・・・
Bluetooth接続のバーコードリーダーを使うことになったんです。

ラズパイでバーコードリーダーを使う記事や、
カメラでQRコードを認識する記事や、
ラズパイのNode-REDで有線のバーコードリーダーを使う記事は見つかったんですが・・・。

無線(Bluetooth接続)のバーコードリーダーを使う記事が無く、
やってみると気を付けないといけないことがあったので、備忘のために記事にしてます。

バーコードリーダー

Amazonでポチッたこちらの商品を買いました。
https://www.amazon.co.jp/gp/product/B085DCV212

Bluetooth接続で、充電スタンドが付いていて、購入当時15%Offだったというだけで買いました(汗)。

ハンディ.jpg

バーコードリーダーをつないでみる

このバーコードリーダーには、通信モード(?)が3つあるとのこと。
① Bluetooth HIDプロファイルで認識させる通信する
② Bluetooth SSPプロファイルで認識させて通信する
③ Bluetooth LEデバイスとして認識させて通信する
image.png

まずはじめに、Windows PCとこのバーコードリーダーを①の方法で接続して動かしてみました。
OSからは、キーボードとして認識され、問題なくバーコードが読み取れました。
image.png

つぎにラズパイでこのバーコードリーダーを①のモードで接続して動かしてみました。
Bluetoothのアイコンをクリックして、「Add Device...」を選択します。
image.png

対象のバーコードリーダーを選んで、「Pair」をクリック
image.png

バーコードを読ませてみると・・・
image.png
ちゃんと読めました。

Node-REDで確認してみる

バーコードリーダーが認識できたところで、Node-REDでバーコードリーダーがスキャンしたデータを取得してみたいと思います。
Node-REDにKeyboardからのデータを受け取るノードがあったので、それをデバッグ出力につないで動作確認してみたところ・・・
image.png
データが取れない。
ちょっと調べてみると、どうやらこのノード、USB接続のキーボードのキーコードをキャプチャする機能のようですね・・・。
image.png

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でシリアル通信データを取得してみます。
シリアル通信ノードの設定はこんな感じです。
image.png

バーコードをスキャンしてみると・・・
image.png
データがちゃんと取れました!

参考にしたページ

【ESP32】UbuntuとBluetooth ClassicでSPP通信する方法【Arduino】

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?