串口通信--Java实现(jSerialComm)

        串口通信在与硬件设备通信中扮演着重要角色,广泛应用于工业自动化、嵌入式系统及各类硬件设备控制。尽管Java本身并不直接支持串口编程,但通过第三方库(如jSerialComm)可以实现这一功能。本文将详细介绍如何在Java中进行串口编程,包括环境配置、基本操作方法以及与硬件设备的实际通信实现。

        

1. 添加依赖

首先,你需要将 jSerialComm 库添加到你的项目中。可以通过以下方式获取:

  • Maven 项目:在 pom.xml 中添加依赖:
<dependency>
    <groupId>com.fazecast</groupId>
    <artifactId>jSerialComm</artifactId>
    <version>2.9.1</version> <!-- 请检查最新版本 -->
</dependency>
  • 非 Maven 项目:直接从 jSerialComm官网 下载 .jar 文件,并将其添加到项目的类路径中。

2. 基本使用步骤

以下是实现串口通信的基本步骤:

  1. 列出可用的串口。
  2. 打开指定的串口并配置参数(波特率、数据位、停止位等)。
  3. 发送数据到串口或从串口接收数据。
  4. 关闭串口。

3.检查配置

windows用户可以在设备管理器中查看是否有需要用的串口

4. 示例代码

(1) 列出所有可用串口
import com.fazecast.jSerialComm.SerialPort;

public class ListSerialPorts {
    public static void main(String[] args) {
        SerialPort[] ports = SerialPort.getCommPorts();
        System.out.println("可用串口列表:");
        for (SerialPort port : ports) {
            System.out.println(port.getSystemPortName() + " - " + port.getDescriptivePortName());
        }
    }
}
(2) 获取指定串口
import com.fazecast.jSerialComm.SerialPort;

public class OpenSerialPort {
    public static void main(String[] args) {
        // 获取指定串口
        SerialPort serialPort = SerialPort.getCommPort("COM3"); // 替换为你的串口号

        // 配置串口参数
        serialPort.setComPortParameters(9600, 8, SerialPort.ONE_STOP_BIT, SerialPort.NO_PARITY);
        serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0);

        // 打开串口
        if (serialPort.openPort()) {
            System.out.println("串口已打开!");
        } else {
            System.out.println("无法打开串口!");
            return;
        }

        // 在这里可以进行读写操作...

        // 关闭串口
        serialPort.closePort();
        System.out.println("串口已关闭!");
    }
}
(3) 发送数据到串口
import com.fazecast.jSerialComm.SerialPort;

public class Test1 {
    public static void main(String[] args) {
        SerialPort serialPort = SerialPort.getCommPort("COM3");
        serialPort.setComPortParameters(9600, 8, SerialPort.ONE_STOP_BIT, SerialPort.NO_PARITY);

        if (serialPort.openPort()) {
            System.out.println("串口已打开!");

            // 发送数据
            String message = "Hello, Serial Port!";
            byte[] buffer = message.getBytes();
            int bytesWritten = serialPort.writeBytes(buffer, buffer.length);
            System.out.println("发送了 " + bytesWritten + " 字节数据:" + message);

            serialPort.closePort();
            System.out.println("串口已关闭!");
        } else {
            System.out.println("无法打开串口!");
        }
    }
}
(4) 从串口接收数据
import com.fazecast.jSerialComm.SerialPort;

import java.nio.charset.Charset;

public class Test2 {
    public static void main(String[] args) {
        SerialPort serialPort = SerialPort.getCommPort("COM4");
        serialPort.setComPortParameters(9600, 8, SerialPort.ONE_STOP_BIT, SerialPort.NO_PARITY);

        if (serialPort.openPort()) {
            System.out.println("串口已打开!");

            // 创建缓冲区

            byte[] buffer = new byte[1024];
            while (true) {
                int numRead = serialPort.readBytes(buffer, buffer.length);
                if (numRead > 0) {
                    System.out.print("接收到数据:" + new String(buffer, 0, numRead, Charset.forName("GBK")));
                }
            }
        } else {
            System.out.println("无法打开串口!");
        }
    }
}

5.案例执行效果


5. 注意事项

  1. 权限问题:在某些操作系统(如 Linux 或 macOS)上,访问串口可能需要管理员权限。确保你有权限访问目标串口设备。
  2. 波特率匹配:确保 Java 程序中的波特率与连接的设备一致,否则可能导致通信失败。
  3. 线程安全:如果同时进行读写操作,建议使用多线程以避免阻塞。
  4. 异常处理:在实际应用中,应添加适当的异常处理逻辑以提高程序的健壮性。

通过以上步骤,你可以轻松地使用 Java 和 jSerialComm 实现串口通信。如果你需要更复杂的功能(如事件监听),可以进一步查阅 jSerialComm 的官方文档。

写在最后:如果您对文章的内容有任何的提议以及疑惑,可在后台留言,我将尽快回复您。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值