Java串口通信(SpringBoot项目)

由于需求需要使用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("串口意外关闭")
            }
        }
    }
}

总结

-建议新开一个线程,对串口进行异步调用
-博主第一次写博客,如有不足之处请体谅,哈哈~

posted @   四季山川  阅读(16)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示