一、开发步骤:
1.windows环境下将dll文件夹下的dll文件放到<JAVA_HOME>\jre\bin目录下
linux环境下将so文件夹下的so文件放到<JAVA_HOME>/jre/lib/amd64目录下
2.引入rxtx的jar包
<dependency>
<groupId>org.rxtx</groupId>
<artifactId>rxtx</artifactId>
<version>2.1.7</version>
</dependency>
3.
import com.alibaba.fastjson.JSONObject;
import gnu.io.*;
import io.netty.buffer.ByteBufUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.*;
/**
* @author : jinliang
* @version V1.0
* @Description: 串口参数的配置 串口一般有如下参数可以在该串口打开以前进行配置: 包括串口号,波特率,输入/输出流控制,数据位数,停止位和奇偶校验。
* @date : 2019年12月18日 19:19
* 注:串口操作类一定要继承SerialPortEventListener
*/
@Component
public class SerialPortUtils implements SerialPortEventListener {
private static Logger logger = LoggerFactory.getLogger(SerialPortUtils.class);
// 检测系统中可用的通讯端口类
private CommPortIdentifier commPortId;
// RS232串口
private SerialPort serialPort;
// 输入流
private InputStream inputStream;
// 输出流
private OutputStream outputStream;
/**
* 查找所有可用端口
*
* @return 可用端口名称列表
*/
public ArrayList<String> findPorts() {
// 获得当前所有可用串口
Enumeration<CommPortIdentifier> portList = CommPortIdentifier.getPortIdentifiers();
ArrayList<String> portNameList = new ArrayList<String>();
// 将可用串口名添加到List并返回该List
while (portList.hasMoreElements()) {
CommPortIdentifier commPortIdentifier = portList.nextElement();
if (!commPortIdentifier.isCurrentlyOwned()) {
String portName = commPortIdentifier.getName();
portNameList.add(portName);
}
}
return portNameList;
}
/**
* 初始化串口
*
* @throws
* @author LinWenLi
* @date 2018年7月21日下午3:44:16
* @Description: TODO
* @param: paramConfig 存放串口连接必要参数的对象(会在下方给出类代码)
* @return: void
*/
public Boolean init(ParamConfig paramConfig) {
Boolean isOpen = false;
try {
// 循环通讯端口
commPortId = CommPortIdentifier.getPortIdentifier(paramConfig.getSerialNumber());
CommPort commPort = commPortId.open(Object.class.getSimpleName(), 2000);
if (commPort instanceof SerialPort) {
serialPort =