Java 实现串口通信
时间: 2023-09-01 08:11:46 浏览: 144
Java实现串口通信
Java 提供了一个称为 javax.comm 的包,可以用于串口通信。但是,这个包是基于 Windows 平台的,因此在其他平台上可能会遇到一些问题。
以下是一个简单的 Java 串口通信示例:
```java
import javax.comm.*;
import java.util.*;
public class SerialTest implements SerialPortEventListener {
private static final String PORT_NAME = "/dev/tty.usbserial-A9007UX1";
private static final int BAUD_RATE = 9600;
private SerialPort serialPort;
public static void main(String[] args) {
SerialTest test = new SerialTest();
test.connect();
}
public void connect() {
CommPortIdentifier portIdentifier = null;
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
while (portEnum.hasMoreElements()) {
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
if (currPortId.getName().equals(PORT_NAME)) {
portIdentifier = currPortId;
break;
}
}
if (portIdentifier == null) {
System.out.println("Could not find port " + PORT_NAME);
return;
}
try {
serialPort = (SerialPort) portIdentifier.open("SerialTest", 2000);
serialPort.setSerialPortParams(BAUD_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
System.out.println("Connected to " + PORT_NAME);
} catch (PortInUseException | UnsupportedCommOperationException | TooManyListenersException e) {
e.printStackTrace();
}
}
@Override
public void serialEvent(SerialPortEvent event) {
if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
byte[] buffer = new byte[1024];
int len = 0;
while ((len = serialPort.getInputStream().read(buffer)) > -1) {
System.out.print(new String(buffer, 0, len));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
```
这个示例建立了一个名为 `SerialTest` 的类,实现了 `SerialPortEventListener` 接口。在 `main` 方法中,首先创建了一个 `SerialTest` 实例,并调用了 `connect` 方法来建立与串口的连接。
`connect` 方法首先通过 `CommPortIdentifier.getPortIdentifiers()` 方法获取所有可用的串口,并根据 `PORT_NAME` 变量来查找指定的串口。如果找到了串口,就尝试打开它,并将串口参数设置为 `BAUD_RATE`、`DATABITS_8`、`STOPBITS_1` 和 `PARITY_NONE`。
接着,将当前 `SerialTest` 实例添加为串口事件监听器,并设置 `notifyOnDataAvailable` 为 `true`,以便在有数据可读时收到通知。最后,打印一条连接成功的消息。
`serialEvent` 方法是 `SerialPortEventListener` 接口中的一个方法,当串口有数据可读时会被调用。在本例中,将读取串口的输入流,并将读取到的数据打印到控制台上。
需要注意的是,在使用 `javax.comm` 包之前,需要先下载并安装 Java Communications API。在 Windows 系统上,可以从 Oracle 官网下载并安装 Java Communications API。在其他系统上,请参考相应的文档。
阅读全文