バーコードリーダーの使い方

Advent Calendar 2020 2日目

前回は、バーコードリーダーを使ったフローの活用についてご説明しました。

今回は、enebularでバーコードリーダーを使うためのNode-REDのフローがどのようなものかを解説をします。

使った物

今回使った物は、以下の通りです。

  • BEVAバーコードスキャナー
  • 身近なバーコード(今回は、ISBNが付いている本)
  • enebular agent入りRaspberry Pi 3B+
  • enebular editor
USB接続のバーコードリーダー
USB接続のバーコードリーダー

最初に作ったフロー

バーコードリーダーはUSB接続のキーボードとして認識されます。そのため、Raspberry PiにUSBで接続して、Pi Keyboardノードを使って読み込めるのではないかと考えました。

そこで、最初に作ったNode-REDのフローはこちらです。バーコードらしき数字はどこにもでてきません。

Pi Keyboardノードからは、意味不明な数字がバラバラと流れてきた・・・

デバッグタブの様子を見てもらうとわかるとおり、一つのバーコードを読んだはずなのに、数字がたくさん出てきてしまっていて、意味をなすコードとしては読めない状況です。

調べてみると

バーコードの数字とデバッグノードの数値を比較すると以下の規則性がありました。

  • debugノードには、読み取った数字 + 1 になって表示されている。
  • バーコードの終わりには28という数字が出てくる。

そこで、この規則を逆算して、取得した値を変換すれば良いことがわかります。

functionノードのなかに、case文でこんな風に書いてみました。

let number = msg.payload;
switch(number){
case 11:
msg.payload = "0";
break;
case 2:
msg.payload = "1";
break;
case 3:
msg.payload = "2";
break;
case 4:
msg.payload = "3";
break;
case 5:
msg.payload = "4";
break;
case 6:
msg.payload = "5";
break;
case 7:
msg.payload = "6";
break;
case 8:
msg.payload = "7";
break;
case 9:
msg.payload = "8";
break;
case 10:
msg.payload = "9";
break;
case 28:
msg.payload = "\n";
msg.complete  = "END";
break;
}
return msg;

msg.completeに文字列をセットしている理由は、joinノードで全ての数値をつなげるためです。joinノードはバラバラと別れてしまったデータをつなげる役割をしています。

バーコードの数字になった!

 

まとめ

enebularに接続されたRaspberry PiにNode-REDのフローをデプロイして、バーコードリーダーとして使用することを試みました。参考までに、作った実際のフローをDiscoverに公開しています。

 

また、今回は詳しく説明していませんが、以下のような環境でフローを作っています。

  1. enebular agentは開発者モードでインストールしていること
  2. enebular editorはリモートモードでRaspberry Piに直接アクセスしていること

詳しくは、enebular docsを参考にしていただければと思います。

 

皆さんも、ぜひチャレンジしてみてください。