Java串口通信(Spring Boot项目)
由于需求需要使用java进行串口通信,上网查询资料还是发现关于Java串口通信的资料太少了
所以发文记录一下自己的使用心得,如有不足之处多多包涵
首先导入串口通信Maven依赖包
<dependency>
<groupId>gnu.io</groupId>
<artifactId>rxtx</artifactId>
<version>2.1.7</version>
</dependency>
然后右键我的电脑-设备管理中查看自己需要通信设备的串口号我这里是COM4
private static final String PORT_NAME = "COM4"; // 串口号,根据实际情况修改
@Slf4j
@Componen
public class Serial implements SerialPortEventListener{//这里要实现SerialPortEventListener接口然后重写接口下的serialEvent方法
private BufferedReader input;
private SerialPort serialPort;//串口对象
private static final String PORT_NAME="COM4"
public void initialize() {//串口初始化
CommPortIdentifier portId = null;
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();//获取当前所有串口设备集合
while (portEnum.hasMoreElements()) {//遍历串口集合
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
if (currPortId.getName().equals(PORT_NAME)) {//如果当前串口名和自己需要的串口名相同,说明找到了需要进行通信的串口设备,则跳出循环
portId = currPortId;
break;
}
}
if (portId == null) {
System.out.println("Could not find COM port.");
return;
}
try {
//串口初始化
serialPort = (SerialPort) portId.open(this.getClass().getName(), TIMEOUT);//尝试打开串口
serialPort.setSerialPortParams(BAUD_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);//直接粘贴,具体的含义可以问AI
input = new BufferedReader(new InputStreamReader(serialPort.getInputStream(), "GBK"));//设置输入流
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (Exception e) {
System.err.println(e.toString());
}
}
public synchronized void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
String inputLine = input.readLine();//实现了serialEvent方法之后,会自动监听串口消息
//...处理消息逻辑
}catch{
throw new IOException("串口意外关闭")
}
}
}
}
总结
-建议新开一个线程,对串口进行异步调用
-博主第一次写博客,如有不足之处请体谅,哈哈~