javaでシリアルポートからデータを読み取る方法は?

JavaではJavaCommかRXTXライブラリを使ってシリアルポートからデータを読み込めます。以下はRXTXライブラリを使ったサンプルコードです。まずは、RXTXライブラリがインストールされていることを確認してください。そしてJavaのコードにRXTX関連のクラスをインポートします。

import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.io.IOException;
import java.io.InputStream;

シリアルポートイベントリスニングに対応するクラスを継承するSerialPortEventListenerインターフェースを定義します。

public class SerialReader implements SerialPortEventListener {

private InputStream in;

 

public SerialReader(InputStream in) {

 

this.in = in;

 

}

 

public void serialEvent(SerialPortEvent event) {

 

switch (event.getEventType()) {

 

case SerialPortEvent.DATA_AVAILABLE:

 

try {

 

byte[] buffer = new byte[in.available()];

 

in.read(buffer);

 

String data = new String(buffer);

 

System.out.println(“Received data: ” + data);

 

} catch (IOException e) {

 

e.printStackTrace();

 

}

 

break;

 

// 其他事件处理

 

}

 

} }


続いて、主メソッドの中でシリアルポートの初期化とリスナーを行います。

public static void main(String[] args) {

 

try {

 

CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(“/dev/ttyUSB0”);

 

// 根据实际串口路径来指定

 

if (portIdentifier.isCurrentlyOwned()) {

 

System.out.println(“Error: Port is currently in use”);

 

} else {

 

CommPort commPort = portIdentifier.open(“SerialTest”, 2000);

 

if (commPort instanceof SerialPort) {

 

SerialPort serialPort = (SerialPort) commPort;

 

serialPort.addEventListener(new SerialReader(serialPort.getInputStream()));

 

serialPort.notifyOnDataAvailable(true);

 

} else {

 

System.out.println(“Error: Only serial ports are supported”);

 

}

 

}

 

} catch (Exception e) {

 

e.printStackTrace();

 

} }


上記のコードで”/dev/ttyUSB0″はシリアルポートのパスですが、実際の状況に応じて修正してください。そうすれば、データがシリアルポートに到着するとシリアルリーダーのserialEventメソッドが呼び出されて、データが読み取られます。

bannerAds