串口是一种计算机外部设备与计算机通信的接口标准,它通过串口线连接计算机和设备,在数据传输时通过线上的电压变化来进行信息传递。
导入rxtxcomm.jar和win32com.dll两个文件,这两个文件提供了Java访问串口的接口。在导入了这两个文件之后,就可以在Java程序中访问串口了。
使用SerialPort类中的getCommPortIdentifier(String portName)方法获取串口的portName,该方法返回一个CommPortIdentifier对象。例如,获取名字为COM6的串口:
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier("COM6");
SerialPort serialPort = (SerialPort) portIdentifier.open("SerialTest", 2000);
//判断当前串口是否被占用
if (serialPort.isCurrentlyOwned()) {
System.out.println("Error: Port is currently in use");
} else {
//设置串口参数
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
InputStream in = serialPort.getInputStream();
OutputStream out = serialPort.getOutputStream();
//使用in和out对象进行串口读写操作
}
InputStream in = serialPort.getInputStream();
OutputStream out = serialPort.getOutputStream();
//读取串口数据
byte[] bytes = new byte[1024];
int len = -1;
while ((len = in.read(bytes)) != -1) {
System.out.print(new String(bytes, 0, len));
}
//写入串口数据
out.write("Hello, SerialPort!".getBytes());
假设我们需要向指定串口发送“AT”指令,并获取串口返回的结果。具体实现方法如下:
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier("COM6");
SerialPort serialPort = (SerialPort) portIdentifier.open("SerialTest", 2000);
if (serialPort.isCurrentlyOwned()) {
System.out.println("Error: Port is currently in use");
} else {
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
InputStream in = serialPort.getInputStream();
OutputStream out = serialPort.getOutputStream();
//发送AT指令
out.write("AT".getBytes());
//接收串口返回的结果
byte[] bytes = new byte[1024];
int len = -1;
while ((len = in.read(bytes)) != -1) {
System.out.print(new String(bytes, 0, len));
}
//关闭串口
serialPort.close();
}
使用Java程序通过串口向Arduino控制LED灯的状态。假设我们需要向指定串口发送命令,使得连接的Arduino板子上的LED灯亮或者灭。具体实现方法如下:
首先,在Arduino板子中编写一个简单的程序,通过串口接收来自计算机的数据,根据数据的内容控制LED灯的亮或者灭。程序内容如下:
int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 0)
{
char ch = Serial.read();
if (ch == '1')
{
digitalWrite(ledPin, HIGH);
Serial.write("LED ON");
}
else if (ch == '0')
{
digitalWrite(ledPin, LOW);
Serial.write("LED OFF");
}
}
}
然后,在Java程序中通过串口发送命令控制LED灯的状态。具体实现方法如下:
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier("COM6");
SerialPort serialPort = (SerialPort) portIdentifier.open("SerialTest", 2000);
if (serialPort.isCurrentlyOwned()) {
System.out.println("Error: Port is currently in use");
} else {
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
InputStream in = serialPort.getInputStream();
OutputStream out = serialPort.getOutputStream();
//向串口发送控制命令,使得LED亮
out.write("1".getBytes());
//接收串口返回的结果
byte[] bytes = new byte[1024];
int len = -1;
while ((len = in.read(bytes)) != -1) {
System.out.print(new String(bytes, 0, len));
}
//向串口发送控制命令,使得LED灭
out.write("0".getBytes());
//接收串口返回的结果
bytes = new byte[1024];
len = -1;
while ((len = in.read(bytes)) != -1) {
System.out.print(new String(bytes, 0, len));
}
//关闭串口
serialPort.close();
}
按照上述方法进行操作,就可以实现通过Java程序与外部设备进行串口通信了。
本文链接:http://task.lmcjl.com/news/8082.html