You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac系统下如何使用Java读写串口设备?

在Mac上用Java正确操作串口设备的解决方案

你遇到的问题核心是:直接通过FileInputStream/FileReader访问串口设备时,没有配置串口通信的关键参数(波特率、数据位、停止位、奇偶校验等),导致设备无法正常响应。老旧的javax.comm库早已废弃且不支持现代Mac系统,推荐使用jSerialComm这个纯Java跨平台串口库来解决问题,它不需要额外配置本地依赖,对Mac支持友好。

具体实现步骤

1. 引入jSerialComm库

如果用Maven管理项目,在pom.xml中添加依赖:

<dependency>
    <groupId>com.fazecast</groupId>
    <artifactId>jSerialComm</artifactId>
    <version>2.9.2</version> <!-- 可使用最新稳定版本 -->
</dependency>

如果是手动管理,直接从Maven仓库获取jar包放入项目类路径即可。

2. 编写串口操作代码

以下是和Python程序参数对齐的示例代码(确保波特率、校验位等参数和你的Python代码完全一致):

import com.fazecast.jSerialComm.SerialPort;
import java.io.InputStream;
import java.io.OutputStream;

public class SerialDeviceHandler {
    public static void main(String[] args) {
        // 指定Mac上的串口设备路径,比如/dev/tty.usbmodem14101
        SerialPort serialPort = SerialPort.getCommPort("/dev/your-device-name");
        
        // 配置串口参数(和Python程序保持一致)
        serialPort.setBaudRate(9600); // 替换为你的波特率
        serialPort.setNumDataBits(8);
        serialPort.setNumStopBits(SerialPort.ONE_STOP_BIT);
        serialPort.setParity(SerialPort.NO_PARITY);
        serialPort.setFlowControl(SerialPort.FLOW_CONTROL_DISABLED);
        
        // 打开串口
        if (!serialPort.openPort()) {
            System.err.println("无法打开串口设备");
            return;
        }
        
        try {
            // 获取输入输出流
            InputStream in = serialPort.getInputStream();
            OutputStream out = serialPort.getOutputStream();
            
            // 示例:发送数据
            out.write("Hello Serial".getBytes());
            out.flush();
            
            // 示例:读取数据
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = in.read(buffer)) != -1) {
                System.out.println("读取到数据:" + new String(buffer, 0, bytesRead));
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭串口
            serialPort.closePort();
        }
    }
}

3. 权限处理

Mac上/dev目录下的串口设备可能需要读写权限,你可以:

  • 临时用sudo运行Java程序,获取足够权限
  • 永久将当前用户添加到dialout组(部分Mac系统需要先创建该组):
    sudo dscl . create /Groups/dialout
    sudo dscl . append /Groups/dialout GroupMembership $(whoami)
    
    之后重启终端或重新登录生效。

关键注意事项

  • 必须确保Java代码中的串口参数(波特率、数据位等)和你的Python程序完全一致,否则通信会失败
  • jSerialComm会自动识别Mac系统的串口设备,无需额外配置本地库
  • 如果遇到设备无法识别的情况,可以调用SerialPort.getCommPorts()获取所有可用串口,确认设备路径是否正确

内容的提问来源于stack exchange,提问作者Flarosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:20:48