如何用jSerialComm快速实现Java串口通信?5分钟上手教程

【免费下载链接】jSerialComm Platform-independent serial port access for Java 【免费下载链接】jSerialComm 项目地址: https://gitcode.com/gh_mirrors/js/jSerialComm

jSerialComm是一款强大的Java串口通信库,让开发者能够轻松实现跨平台的串口数据传输。无论你是开发物联网设备、工业控制软件还是嵌入式系统,这个开源库都能帮你快速搭建稳定可靠的串口通信功能。

🚀 什么是jSerialComm?

jSerialComm是一个完全用Java编写的串口通信库,它提供了简洁易用的API,支持Windows、Linux、macOS等多种操作系统。该库的核心优势在于无需安装额外的本地驱动,通过Java Native Interface (JNI)技术直接与操作系统底层串口驱动交互,确保了高效稳定的数据传输。

项目的主要代码结构集中在src/main/java/com/fazecast/jSerialComm/目录下,其中SerialPort.java是核心类,封装了所有串口操作功能。

📦 快速开始:5分钟集成步骤

1️⃣ 添加依赖

Maven项目:在pom.xml中添加以下依赖:

<dependency>
  <groupId>com.fazecast</groupId>
  <artifactId>jSerialComm</artifactId>
  <version>[2.0.0,3.0.0)</version>
</dependency>

Gradle项目:在build.gradle中添加:

compile 'com.fazecast:jSerialComm:[2.0.0,3.0.0)'

2️⃣ 枚举可用串口

import com.fazecast.jSerialComm.*;

public class SerialPortExample {
    public static void main(String[] args) {
        // 获取所有可用串口
        SerialPort[] ports = SerialPort.getCommPorts();
        
        // 打印串口信息
        System.out.println("可用串口列表:");
        for (int i = 0; i < ports.length; i++) {
            System.out.println(i + ": " + ports[i].getSystemPortName() + 
                               " - " + ports[i].getPortDescription());
        }
    }
}

3️⃣ 打开并配置串口

// 选择第一个串口
SerialPort port = ports[0];

// 配置串口参数
port.setComPortParameters(9600, 8, SerialPort.ONE_STOP_BIT, SerialPort.NO_PARITY);
port.setFlowControl(SerialPort.FLOW_CONTROL_DISABLED);

// 打开串口
if (port.openPort()) {
    System.out.println("串口打开成功!");
} else {
    System.err.println("无法打开串口!");
    return;
}

4️⃣ 发送和接收数据

发送数据

String data = "Hello, Serial Port!";
byte[] sendData = data.getBytes();
port.writeBytes(sendData, sendData.length);

接收数据

// 设置监听器
port.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[] readBuffer = new byte[port.bytesAvailable()];
        int numRead = port.readBytes(readBuffer, readBuffer.length);
        System.out.println("收到数据: " + new String(readBuffer, 0, numRead));
    }
});

5️⃣ 关闭串口

// 使用完毕后关闭串口
port.closePort();

⚙️ 高级配置选项

jSerialComm提供了丰富的配置选项,满足不同场景需求:

超时设置

// 设置超时模式
port.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 1000, 0);

流控制配置

// 启用RTS/CTS硬件流控制
port.setFlowControl(SerialPort.FLOW_CONTROL_RTS_ENABLED | SerialPort.FLOW_CONTROL_CTS_ENABLED);

事件监听

除了数据可用事件外,还支持多种事件监听:

public int getListeningEvents() { 
    return SerialPort.LISTENING_EVENT_DATA_AVAILABLE | 
           SerialPort.LISTENING_EVENT_PORT_DISCONNECTED |
           SerialPort.LISTENING_EVENT_BREAK_INTERRUPT; 
}

🛠️ 常见问题解决

权限问题(Linux系统)

如果在Linux系统下遇到权限问题,需要将用户添加到dialout组:

sudo usermod -a -G dialout $USER

Java 24+兼容性

从Java 24开始,需要添加额外的启动参数:

java --enable-native-access=com.fazecast.jSerialComm YourApplication

设备断开检测

port.addDataListener(new SerialPortDataListener() {
    @Override
    public int getListeningEvents() { 
        return SerialPort.LISTENING_EVENT_PORT_DISCONNECTED; 
    }
    
    @Override
    public void serialEvent(SerialPortEvent event) {
        if ((event.getEventType() & SerialPort.LISTENING_EVENT_PORT_DISCONNECTED) > 0) {
            System.out.println("设备已断开连接!");
            port.closePort();
        }
    }
});

📚 学习资源

🔧 项目构建

如果需要从源码构建项目,可以使用提供的Maven包装器:

git clone https://gitcode.com/gh_mirrors/js/jSerialComm
cd jSerialComm
./mvnw clean package

构建完成后,JAR文件将生成在target/目录下。

jSerialComm库凭借其跨平台支持、简单易用的API和稳定的性能,成为Java串口通信的首选解决方案。无论是初学者还是经验丰富的开发者,都能快速上手并实现专业的串口通信功能。现在就尝试用jSerialComm来简化你的串口通信开发吧!

【免费下载链接】jSerialComm Platform-independent serial port access for Java 【免费下载链接】jSerialComm 项目地址: https://gitcode.com/gh_mirrors/js/jSerialComm

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐