バーコード/QRコードリーダからの情報入力

1.概要

センサからのデータ取得ではないですが、バーコード/QRコードリーダからの情報を受け取るということは有効です。
具体的には、バーコードやQRコードに設定された文字列をPDHが受け取り、その文字列に従った指示を、PDHが実行するという場面が考えられます。

ここでは、以下の3つのバーコード/QRコードリーダからの文字データを使ってNode-REDで動作をさせる方法に関して説明します。

No

機種名

インターフェース

1

マイクロテクニカ社製 BRM-65UA

UART出力

2

エフケイシステム社製 BP-200C

Bluetooth(HIDモード/SPPモード)、USB

3

エフケイシステム社製 A-860SU

USB(HIDモード/COMモード)

※ バーコード/QRコードは、EXCELで簡単に作成できます。下記をご覧ください。
参考HP: Excelのデータを使ってQRコードを作成する方法

2.マイクロテクニカ社製 BRM-65UA

2-1. 目的

厨房の材料管理などに使用できるかを検討するため、QRコードリーダーを購入しました。

マイクロテクニカ社製 BRM-65UA

その立上げを行います。

2-2. 動作確認

EXCELでQRコードを作成し、QRコードリーダーに読み取らせ、UART出力をTera Termで読み取ります。

SIPのクイックリファレンスのアドレスをQRコードに変換し、読み込ませました。
下記に示すように、Tera Term上にアドレスが表示されました。

2-3. Node-REDへの読み込ませ+LEDの駆動

COM3をシリアル入力ノードとして、Node-REDのダッシュボードのLEDを点灯/消灯させるようにしました。

ここでのポイントは、serial inノードに送られてきたQRコードリーダで読み取ったデータを、初段のfunctionノードでオブジェクト形式(JSON形式)に変換しているところです。functionノードの中身は以下に示すように一行で簡単ですが、ここで、JSON形式にしておくことで、次の段で簡単に日付を追加できます。

2-4. 通常のBar Codeの読取り

QRコードではない、バーコードの読み取りもやらせてみました。バーコードの下に書かれている文字列が表示されます。

3.エフケイシステム社製 BP-200C

3-1. 目的

Bluetooth Wireless Scanner BP-200Cの動作確認を行い、Node-REDへ読み込ませ、JSON形式のデータに変換します。
・ USBで繋ぐ有線モードとBluetoothで繋ぐ無線モードの2つがあります。

3-2.動作確認結果

動作モード

Windows

Raspberry Pi

USBモード

・USBキーボードと認識され、スキャナで読み取った結果は、キーボードの入力と同じ扱い

・ Node-REDでの読取りも工夫すれば可能

Bluetoothモード

HIDモード

SPPモード

・スキャナで読み取った結果は、Node-REDのシリアルポートでR-MSMと同様に読み取り可能

・ボーレート:9,600bps

・スキャナの改行コードの設定CR+LF or CRとNode-REDのシリアルポートの文字列の区切り用のコードとの組み合わせに注意が必要
スキャナのデフォルト:’\r’、Node-REDのシリアルポートのデフォルト:’\n’

3-3. Bluetoothモードでの動作確認

Bluetoothの動作モードは、HID(Human Interface Device)モードとSPP(シリアル通信)モードの2つがあります。

1). HIDモードの動作確認

HIDモードの動作は、USBの接続と同じでキーボードデバイスとして認識される。Raspberry Piでも同様で、端末画面に読み込まれます。

2). SPPモードの動作確認

WindowsとRaspberry Piで動作確認を行ない、共にNode-REDのシリアルポートで読み出すことができました。

a). Windowsでの動作確認

・WindowsでBluetoothのペアリングを行うと、「その他のデバイス」として認識され、ヘッドセットのマークが出てきました。
・ Tera TermでCOM番号を調べ、COM6として、Node-REDのシリアルポートで読み出すことができます。ボーレートは、9,600 bpsです。
 その後は、通常のオブジェクトとして使うことができます。

b). Raspberry Piでの動作確認

・ Raspberry Piでは、R-MSMと同様に、bluetoothctlコマンドでBluetoothのMACアドレスを調べて、rfcomm0としてバインドすることで、Node-REDのシリアルポートで読み出すことができました。
・ ボーレートは、9,600bpsです。
・ 注意事項は、スキャナの改行コード設定とNode-REDのシリアルポートの入力の分割方法を合わすことです。
スキャナの改行コード設定のデフォルトは、’\r’で、Node-REDの入力の分割方法のデフォルトは、文字列で区切る:’\n’です。Node-REDのシリアルポートは、‘\n’が来るまで、入力が終わっていないとして、次段に読み込んだ文字列を送らなくなます。
・ 推奨は、スキャナ改行コード設定:’\r’   Node-REDのシリアルポートの入力の分割方法:’\r’にすることです。

・Raspberry Piで読み込んだ後、sensor情報、id情報、日時情報を追加したオブジェクトデータに変換できました。

ここでのポイントは、serial inノードで送られてきたデータをchangeノードを使って、JSON形式に変換しているところです。
JSONata 式を使って改行コード’\r’ を削除しています。以下が、Changeノードの中身です。JSONata 式を選び、右側の”・・・”をクリックするとJSONata式のヘルプが出てきます。このヘルプを見ながらJSONata 式を選ぶことができます。
Serial inから送られてきたデータの改行コード’\r’ までを取り出して、JSON形式に変換しています。

“・・・”をクリックすると

4.エフケイシステム社製 A-860SU

4-1.目的

定置式 バーコードリーダー A-860SUをWindows PCとPDHで動作確認します。A-860SUは、USBのHID(Human Interface Device)とCOMの両方に対応しています。HIDモードがデフォルトで、COMモードに変更するためには変更のためのQRコードを読み込ませる必要があります。

4-2.Windows PCでの動作確認

・起動は簡単で、PCのUSBに差し込むだけで電源が入り、QRコードかざすと読み込みます。デフォルトは、HIDモードですので、キーボードからの入力と同じ動作になります。説明書のQR-Codeを読み込ませて、COMモードに変えると、Tera Termで認識します。ボーレートは9,600bpsです。
・以下に、HIDモードでエディタに読み込ませた場合と、COMモードでTera Termに読み込ませた場合の画面を示します。

 

図4-2-1. HIDモードとCOMモードでの動作確認

図4-2-2. 物体を認識してLEDがオンになったリーダー

4-3.PDHでの動作確認

・PDHでも同様で、USBに差し込むだけで電源が入り、QRコードかざすと読み込みます。HIDモードで、キーボードからの入力と同じ動作になります。端末に読み込ませると文字列が端末に入力されます。また、COMモードに変更すると、GtkTermで認識できます。/dev/ttyACM0として認識しました。9,600bpsで読み込みます。ここでは、改行コードをCR+LFに切り替えています。
・Node-REDのシリアルポートに/dev/ttyACM0として読み込ませても、問題なく読み込めました。

次に、図4-3-3のフローを掲載します。

[{"id":"bfac13fcb5dcf329","type":"tab","label":"フロー 1","disabled":false,"info":"","env":[]},{"id":"5a23b4bbdc052bb0","type":"serial in","z":"bfac13fcb5dcf329","name":"","serial":"b5f610e364a60d14","x":170,"y":80,"wires":[["7c5af9c8af61c0bd"]]},{"id":"818eb991d4d70c97","type":"debug","z":"bfac13fcb5dcf329","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":800,"y":80,"wires":[]},{"id":"7c5af9c8af61c0bd","type":"change","z":"bfac13fcb5dcf329","name":"変換","rules":[{"t":"set","p":"payload","pt":"msg","to":"\"{\\\"data\\\":\\\"\" & $substringBefore(msg.payload,'\\r') &\"\\\"}\"","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":310,"y":80,"wires":[["e45c27f040e7717c"]]},{"id":"e45c27f040e7717c","type":"json","z":"bfac13fcb5dcf329","name":"","property":"payload","action":"","pretty":false,"x":430,"y":80,"wires":[["05dc92ed7fa84cad"]]},{"id":"05dc92ed7fa84cad","type":"change","z":"bfac13fcb5dcf329","name":"追加","rules":[{"t":"set","p":"payload.sensor","pt":"msg","to":"BP-200C","tot":"str"},{"t":"set","p":"payload.id","pt":"msg","to":"0001","tot":"str"},{"t":"set","p":"payload.sensor","pt":"msg","to":"A-860SU","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":80,"wires":[["9e9d75006a7647d5"]]},{"id":"9e9d75006a7647d5","type":"moment","z":"bfac13fcb5dcf329","name":"日時","topic":"","input":"","inputType":"date","inTz":"Asia/Tokyo","adjAmount":0,"adjType":"days","adjDir":"add","format":"YYYY/MM/DDTHH:mm:ss.SSSZ","locale":"ja-JP","output":"payload.datetime","outputType":"msg","outTz":"Asia/Tokyo","x":670,"y":80,"wires":[["818eb991d4d70c97"]]},{"id":"b5f610e364a60d14","type":"serial-port","serialport":"/dev/ttyACM0","serialbaud":"9600","databits":"8","parity":"none","stopbits":"1","waitfor":"","dtr":"none","rts":"none","cts":"none","dsr":"none","newline":"\\n","bin":"false","out":"char","addchar":"","responsetimeout":"10000"}]