更新時(shí)間:2022-06-14 10:36:05 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2430次
動(dòng)力節(jié)點(diǎn)小編來(lái)給大家介紹一下java串口模擬器,java串口通信由于沒(méi)有相應(yīng)的串口硬件,選了一款windows串口虛擬機(jī)機(jī)器。
串口模擬器
Launch Virtual Serial Port Driver

模擬兩對(duì)四個(gè)串口,COM1發(fā)送數(shù)據(jù)給COM2,COM3發(fā)送數(shù)據(jù)給COM4
java包
<dependency>
<groupId>com.fazecast</groupId>
<artifactId>jSerialComm</artifactId>
<version>[2.0.0,3.0.0)</version>
</dependency>
mport com.fazecast.jSerialComm.SerialPort;
import com.fazecast.jSerialComm.SerialPortDataListener;
import com.fazecast.jSerialComm.SerialPortEvent;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Classname ComTest
* @Description com串口通信
* @Date 2021/9/4 10:44
* @Created by huangsm
*/
public class ComTest {
/**
* <com名稱,SerialPort>串口通信map,存儲(chǔ)串口名稱與串口信息
*/
private Map<String, SerialPort> comMap = new HashMap<>();
/**
* com口列表
*/
private List<String> comList = new ArrayList<>();
public ComTest() {
//將所有的串口信息放入comlist,comMap中
SerialPort[] commPorts = SerialPort.getCommPorts();
for (SerialPort commPort : commPorts) {
comList.add(commPort.getSystemPortName());
comMap.put(commPort.getSystemPortName(), commPort);
//監(jiān)聽(tīng)所有串口通信的數(shù)據(jù)
commPort.openPort();
commPort.addDataListener(new SerialPortDataListener() {
@Override
public int getListeningEvents() {
return SerialPort.LISTENING_EVENT_DATA_RECEIVED;
}
@Override
public void serialEvent(SerialPortEvent serialPortEvent) {
byte[] newData = serialPortEvent.getReceivedData();
System.err.println(String.format("串口%s接收到數(shù)據(jù)大?。?s,串口數(shù)據(jù)內(nèi)容:%s"
,serialPortEvent.getSerialPort().getSystemPortName(),newData.length,new String(newData)));
}
});
}
}
public static void main(String[] args) throws Exception {
ComTest comTest = new ComTest();
List<String> comList = comTest.comList;
Map<String, SerialPort> comMap = comTest.comMap;
BufferedReader systemIn = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("你的可以通信的串口列表");
for (String comName : comList) {
System.out.println("========" + comName + "========");
}
System.out.println("請(qǐng)輸入你的串口:");
String com = systemIn.readLine();
if(!comList.contains(com)){
System.out.println("輸入的串口不正確:");
continue;
}
System.out.println("輸入你要發(fā)送的消息:");
String msg = systemIn.readLine();
SerialPort serialPort = comMap.get(com);
serialPort.writeBytes(msg.getBytes(),msg.getBytes().length);
//這里是讓串口先接收到數(shù)據(jù)再重新發(fā)送數(shù)據(jù)
Thread.sleep(1000);
}
}
}
你的可以通信的串口列表
========COM1========
========COM2========
========COM3========
========COM4========
請(qǐng)輸入你的串口:
COM3
輸入你要發(fā)送的消息:
137912037
串口COM4接收到數(shù)據(jù)大?。?,串口數(shù)據(jù)內(nèi)容:137912037
你的可以通信的串口列表
========COM1========
========COM2========
========COM3========
========COM4========
請(qǐng)輸入你的串口:
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)