Java(RXTX)からSD120(バーコードリーダー)を利用する

こちらの記事にて事前にシリアル通信の準備を済ましておきます。

build.gradleにて下記を記述してライブラリを追加してあげます。

// https://mvnrepository.com/artifact/org.rxtx/rxtx
compile group: 'org.rxtx', name: 'rxtx', version: '2.1.7'

次に下記のリンクから自分のOSにあったファイルを選択します。

http://fizzed.com/oss/rxtx-for-java

zipを解凍後、中のReadMeを読んでファイルを設置していきます。

Windowsならば下記の通りです。

Copy RXTXcomm.jar —> <JAVA_HOME>\jre\lib\ext
Copy rxtxSerial.dll —> <JAVA_HOME>\jre\bin
Copy rxtxParallel.dll —> <JAVA_HOME>\jre\bin

正しく設定しないとjava.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.pathが発生しますので気を付けましょう。

 

私の場合、下記の様にSerial.javaを作成しました。

package net.kagamikarasu.barcodereader;
import gnu.io.*;
import java.io.IOException;
import java.io.InputStream;
class Serial {
SerialPort port;
Serial(){
try {
CommPort commPort = CommPortIdentifier.getPortIdentifier("COM4").open("hoge", 2000);
port = (SerialPort) commPort;
port.setSerialPortParams(
9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
read();
}catch(Exception ignored){
}
}
private void read() throws IOException {
InputStream in = port.getInputStream();
StringBuilder stringBuilder = new StringBuilder();
byte[] buffer = new byte[1024];
while (true) {
int numRead = in.read(buffer);
if (numRead == -1) {
break;
} else if (numRead == 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
for(byte buf : buffer) {
if (!(buf == 0 || buf == 13))
stringBuilder.append((char) buf);
}
System.out.println(stringBuilder.toString());
stringBuilder.delete(0,stringBuilder.length());
buffer = cleanBytes(buffer);
}
}
private byte[] cleanBytes(byte[] oldByte){
return new byte[oldByte.length];
}
}

ASCII文字しか認識しないと想定していますので、StringBuilderにappendする時はbyte配列を全部読み込んで、各々をcharでやっています。

また、ASCII番号0は無視、13は復帰(改行)ですがバーコードリーダーの設定をいじるのも面倒だったので、こちら側に無視するようにしました。

エラーが起きなく、リーダーにて読み込めば上記の様になるのではないかと思います。

にしても、Native LibとJava Libのバージョン違いますね…

SD120(バーコードリーダー)を仮想シリアル通信で利用する

昔、図書館でバーコードリーダー使ってるの見て格好いいなーって思っていた、からすです。

今回はAmazonで安値で売られているSD120を用いてバーコードを読んでみたいと思います。

2018年3月8日現在、\2,870円です。

USB接続のバーコードリーダーでこれと言った特徴は無いです。

もう少し出せばBluetooth対応だったりと利便性向上したのが買えたりしますが、遊んでみたいだけなので、マニュアルも揃って安価なSD120を買いました。

取り合えず何も考えずWindows10機に挿した所、HIDデバイスとして認識されました。

この時点で特に問題もなく認識されたので、音量下げ等設定して動作確認完了とします。

さて、本題の仮想シリアル通信ですが、付属の日本語マニュアルに書いてなかったので、Champtek社のマニュアルからやってみたいと思います。

http://www.champtek.com/en/product/48

11ページのVirtual COMがそうですね、8ページのフローチャート通りに

設定開始→Virtual COM(%0088)→設定終了→パラメータセーブで終わりです。

 

設定終了した時点でVCOMが認識されたとWindowsが教えてくれました。

早速、Teratermから当該ポートを選択して確認してみます。

読めました、これでプログラムに組み込むのが容易になるかと思います。