1 はじめに
コロナ禍の頃、RaspberryPIを使ってできることを模索してました。
モノやサービスなどの商品になればと考えての取組みでした。
データベースとの組み合わせになれば、サービスとしては興味を引いてもらえるものになりそうです。
しかし、データベースの構築は趣味の延長では商品にはなりそうにはありません。
その時にまとめたRaspberryPIにNode-REDをインストールし、バーコードを読んで、出力できるようにしたところまでを紹介します。
ここにデータベースが組み合わさると、管理システムとしては完成です。
構想していたシステム構成です。
読み込んだ時点でのバーコードの属性を選択できるように、タッチパネルのボタンで選べるようにしています。
RaspberryPIとNode-REDの組合せで、タッチパネルを利用したボタン選択は、2年ほど前にBLOG内で紹介していますので、
興味があれば、こちらも併せて目を通して見てください。
RaspberryPiのGPIOをNode-REDで操作する。 | 刃金からくり屋
2 バーコードリーダーでの読取りデータ
ファミリーマートさんで販売しているペットボトル飲料を題材にしました。
以下の写真のバーコードをRaspberryPIで読み込んだら、どうなるか。
Node-Redで簡単なブロック・ダイアグラムを作成し読み込んでみました。
数値が違うのです。
商品コードは13桁。
表示されたコードは14桁。
最後の”57″はEOD(End of Data)のコードだと考えた場合、13桁で読めてはいるようです。
3 商品コードとの比較
以下のように、商品コードと読み取ったデータを1桁ごとに比較すると、以下のようになります。
こんな関係性か見えてきます。
(読み取ったデータ) - 1 = 商品コード
※ただし、商品コードの”0″は、(読み取ったデータ)-1では”10″と扱われる。
どうも、このルールで読み取ったデータを変換すると良いようです。
なお、ルールについては、以下のサイトを参照させていただき、あらためて独自に確認いたしました。
ありがとうございます。
(参考サイト)
https://blog.enebular.com/samples/howtouse-barcodescanner/
(バーコードリーダーの使い方 | enebular blog)
4 読み取ったデータの変換
3 節のルールをNode-REDに組み込むと以下の図に示されるコードをブロック化すれば良いです。
ここでは、”Code Change”として関数ブロックを作成しています。
ここまでは、参照させていただいた記事を元にしています。
しかし、それ以外の前処理と後処理が必要であることが分かりました。
5 読み取ったバーコードデータの前処理と後処理
実は、バーコードデータが入力される”Pi Keyboard”ブロックは、読み込んだバーコードデータ(1桁)を2回送出していることが分かりました。
これは、”2″という数字を読み込むと、”Pi Keyboard”ブロックから送出されるpayload(出力)は”3″、”3″となっています。
それが、各桁ごとに繰り返されていました。
そのため、送出された2つのデータを1つにまとめる必要があります。
“Pi Keyboard”ブロックの次に前処理用のブロック”switch”ブロックを接続するダイアグラムとしました。
ここで、”switch”の機能を使い、『前回と同じ値』という条件で2回送出される1桁の数字を抽出するようにしました。
その次に、payloadで送出した数値を商品コードの数値に変換するブロックを通します。
この時点では、13桁の商品コードですが、データとしては、1桁の数字に分解されており、それが13個、送出された状態となっています。
後処理として、13個ある1桁の数字を組合わせ、13桁のコードにする処理が必要になります。
この後処理の意味を説明します。
人が見ると同じ13個の数字ですが、コンピュータの中では、意味や解釈が異なるため、人が認識している意味にに合わせる処理になります。
人が13個の数字を見れば、商品コードと認識できるわけですが、コンピュータには知能が無いので、人と同じような自動認識や意味変換ができないのです。
後処理としては、終端コード”57″を読み込んだ時点で、payloadとして送られてきた1桁の数字を13桁の文字列に変換し、送出します。
その処理は”join”ブロックで行います。
6 でも別の不具合がありました
商品コードに同じ数字が続けて並ぶと、その数字が繰り返され、13桁以上になってしまいます。
完成したと考え、いろいろな商品コードを読んでみたところ、このような不具合が発見されました。
前処理の処理方法だと、『同じ数値が続くと、続いた分だけ、その数字を付加し続ける。』という不具合が確認できました。
という事で、改善方法を検討しました。
それについては、次の記事で紹介します。
参考にしてみてください。
そんなに難しいことではないと思いますから。