当前位置: 首页 > news >正文

Java实现串口调试

Java实现串口调试助手的步骤及代码,结合RXTX和jSerialComm(JSSC)两种常用库

一、环境配置

1. 库选择与依赖

  • RXTX(成熟,需本地库):

    <dependency><groupId>com.fazecast</groupId><artifactId>jSerialComm</artifactId> <!-- 替代RXTX的新选择 --><version>2.6.2</version>
    </dependency>
    
  • jSerialComm(纯Java,推荐):

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

注意:RXTX需手动配置本地库(.dll/.so)路径。


二、核心功能实现

1. 扫描可用串口

// 使用jSerialComm
import com.fazecast.jSerialComm.*;
String[] ports = SerialPort.getCommPorts().stream().map(SerialPort::getSystemPortName).toArray(String[]::new);
System.out.println("可用串口:" + Arrays.toString(ports)); // 输出如 [COM1, COM3]

2. 打开串口并配置参数

SerialPort serialPort = SerialPort.getCommPort("COM1");
serialPort.openPort();
serialPort.setComPortParameters(9600,      // 波特率8,         // 数据位SerialPort.ONE_STOP_BIT,  // 停止位SerialPort.NO_PARITY      // 校验位
);
serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_BLOCKING, // 阻塞模式1000,    // 读超时(毫秒)0        // 写超时
);

3. 数据接收(异步监听)

serialPort.addDataListener(new SerialPortDataListener() {@Overridepublic int getListeningEvents() { return SerialPort.LISTENING_EVENT_DATA_AVAILABLE; }@Overridepublic void serialEvent(SerialPortEvent event) {byte[] buffer = new byte[serialPort.bytesAvailable()];serialPort.readBytes(buffer, buffer.length);String data = new String(buffer);System.out.println("收到数据:" + data); // 实时打印接收数据}
});

4. 数据发送

String command = "AT\r\n";
byte[] bytes = command.getBytes();
serialPort.writeBytes(bytes, bytes.length); // 发送指令

5. 关闭串口

serialPort.closePort(); // 释放资源

三、进阶功能

1. 十六进制数据收发

// 发送十六进制数据
byte[] hexBytes = {0x48, 0x65, 0x6C, 0x6C, 0x6F}; // "Hello"
serialPort.writeBytes(hexBytes, hexBytes.length);// 接收数据转十六进制显示
StringBuilder hexStr = new StringBuilder();
for (byte b : buffer) {hexStr.append(String.format("%02X ", b));
}
System.out.println("十六进制数据:" + hexStr);

2. 多线程处理

// 接收线程避免阻塞UI
new Thread(() -> {while (serialPort.isOpen()) {if (serialPort.bytesAvailable() > 0) {// 处理数据}}
}).start();

3. 虚拟串口测试

  • 工具推荐:VSPD(Virtual Serial Port Driver)创建虚拟串口对(如COM1<->COM2)。
  • 自测流程: 创建虚拟端口对 本助手打开COM1发送数据 另一程序(如Python脚本)监听COM2并回复。

四、完整示例代码(jSerialComm)

import com.fazecast.jSerialComm.*;public class SerialDebugger {public static void main(String[] args) {SerialPort port = SerialPort.getCommPort("COM1");if (port.openPort()) {port.setComPortParameters(9600, 8, 1, 0);port.addDataListener(new SerialPortDataListener() {@Overridepublic void serialEvent(SerialPortEvent event) {byte[] data = new byte[port.bytesAvailable()];port.readBytes(data, data.length);System.out.println("RX: " + new String(data));}@Overridepublic int getListeningEvents() { return SerialPort.LISTENING_EVENT_DATA_AVAILABLE; }});// 发送测试指令port.writeBytes("AT\r\n".getBytes(), 4);}}
}

五、工具推荐

  1. 串口监控工具Windows:AccessPort(捕获数据流) Linux:CuteCom(交互式调试)
  2. Java调试助手增强功能: 数据日志保存 自动发送周期指令 波形显示(传感器数据可视化)

资源

  • java 串口调试助手 源码 www.youwenfan.com/contentcnf/27622.html
  • jSerialComm官方文档 fazecast.github.io/jSerialComm/
    通过以上实现,可快速构建跨平台的串口调试工具,满足嵌入式开发、物联网设备调试等场景需求。
http://www.sczhlp.com/news/58917/

相关文章:

  • 洛谷题单指南-状态压缩动态规划-P2473 [SCOI2008] 奖励关
  • 如何在 spring-ai 中使用 postgres 作为向量数据库
  • 信息网站有哪些国外免费域名网站
  • 学建设网站及功能wordpress 目录主题
  • 跳转到手机网站代码小程序开发哪家公司好
  • 怎么做北京pk10的网站公众号文章链接wordpress
  • 企业网站搜索优化网络推广wampserver集成环境搭建了一个织梦cms网站
  • 网站建设书籍免费做外国人生意的网站有哪些
  • 建设银行衡阳市分行网站大连旅游网站建设大概多钱
  • 网站建设运转上海公司牌照价格最新价格
  • 云南网站开发公司介绍用wordpress搭建网站
  • 微信版网站开发最近的新闻热点时事
  • 电流互感器:电力系统中的“感知之眼”与技术核心
  • UOJ958 笔记
  • Codeforces Round 1046 (Div. 1)
  • 网站建设公司业务员公众号运营收费价格表
  • 网站开发 -(广告)明天上海封控16个区
  • 项城网站制作多少钱自己怎样建设网站首页
  • 网站开发如何模块化九九建筑网登入
  • 简约网站模板网站开发下人员配置
  • 厦门网站建设推广贵阳软件制作
  • 网站建设市场调研报告做公司网站要营业执照吗
  • 中山网站建设网站鞍山网站
  • 免费建个人网站步骤网站禁用右键
  • 网站降权哪种网站名称容易通过备案审核
  • 深度学习中的数据类型介绍:FP32, FP16, TF32, BF16, Int16, Int8
  • 网站设计为什么学不好网页素材库
  • 东莞网站建设星河山东seo第一
  • 网站建设的技术有哪些公司名称变更网站要重新备案吗
  • 出售企业网站备案资料沂水网站建设