Java 串口通信
·
一、 导入依赖
<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.");
}
}
}
更多推荐


所有评论(0)