Advent Calendar 2020 2日目
前回は、バーコードリーダーを使ったフローの活用についてご説明しました。
今回は、enebularでバーコードリーダーを使うためのNode-REDのフローがどのようなものかを解説をします。
使った物
今回使った物は、以下の通りです。
- BEVAバーコードスキャナー
- 身近なバーコード(今回は、ISBNが付いている本)
- enebular agent入りRaspberry Pi 3B+
- enebular editor

最初に作ったフロー
バーコードリーダーはUSB接続のキーボードとして認識されます。そのため、Raspberry PiにUSBで接続して、Pi Keyboardノードを使って読み込めるのではないかと考えました。
そこで、最初に作ったNode-REDのフローはこちらです。バーコードらしき数字はどこにもでてきません。

デバッグタブの様子を見てもらうとわかるとおり、一つのバーコードを読んだはずなのに、数字がたくさん出てきてしまっていて、意味をなすコードとしては読めない状況です。
調べてみると
バーコードの数字とデバッグノードの数値を比較すると以下の規則性がありました。
- 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に公開しています。
また、今回は詳しく説明していませんが、以下のような環境でフローを作っています。
詳しくは、enebular docsを参考にしていただければと思います。
皆さんも、ぜひチャレンジしてみてください。



