一、 导入依赖

<dependency>
    <groupId>com.fazecast</groupId>
    <artifactId>jSerialComm</artifactId>
    <version>2.10.3</version>
 </dependency>

      依赖官网:https://fazecast.github.io/jSerialComm/

二、实现串口通信核心功能

           串口工具的核心功能包括:查找可用端口、打开/关闭端口、设置参数、发送数据和接收数据。


import com.fazecast.jSerialComm.SerialPort;
import com.fazecast.jSerialComm.SerialPortDataListener;
import com.fazecast.jSerialComm.SerialPortEvent;

public class ComTest {

    public static void main(String[] args) {

        /**
         * 获取系统上所有可用的串口
         */
        SerialPort[] ports = SerialPort.getCommPorts();
        for (SerialPort port : ports) {
            System.out.println(port.getSystemPortName() + " - " + port.getDescriptivePortName());
        }


        /**
         * 打开和配置端口
         */
        SerialPort serialPort = ports[0];

        if (serialPort.openPort()) {
            System.out.println("Port opened successfully.");

            // 设置参数:9600 波特率,8 数据位,1 停止位,无校验
            serialPort.setBaudRate(9600);
            serialPort.setNumDataBits(8);
            serialPort.setNumStopBits(SerialPort.ONE_STOP_BIT);
            serialPort.setParity(SerialPort.NO_PARITY);

            // 配置超时(可选,对于事件驱动的通信模式通常不需要)
            // serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_BLOCKING, 1000, 0);

        } else {
            System.out.println("Failed to open port.");
        }


        /**
         * 接收数据 (事件驱动)
         */
        serialPort.addDataListener(new SerialPortDataListener() {
            @Override
            public int getListeningEvents() {
                return SerialPort.LISTENING_EVENT_DATA_AVAILABLE;
            }
            @Override
            public void serialEvent(SerialPortEvent event) {
                if (event.getEventType() != SerialPort.LISTENING_EVENT_DATA_AVAILABLE)
                    return;

                // 读取所有可用的字节
                byte[] newData = new byte[serialPort.bytesAvailable()];
                int numRead = serialPort.readBytes(newData, newData.length);

                // 将字节转换为字符串并打印(根据实际应用可能需要不同的编码或处理)
                String receivedData = new String(newData, 0, numRead);
                System.out.println("Received: " + receivedData);
            }
        });

        /**
         * 发送数据
         */
        String dataToSend = "Hello Serial Port\n";
        byte[] data = dataToSend.getBytes();

        int numWritten = serialPort.writeBytes(data, data.length);
        System.out.println("Wrote " + numWritten + " bytes.");

        /**
         * 关闭端口
         */
        if (serialPort.isOpen()) {
            serialPort.closePort();
            System.out.println("Port closed.");
        }
    }
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐