首先放一下我這次使用的工具
鏈接: https://pan.baidu.com/s/1o78lHX4 密碼: vg7w
com0com0是windows內核模式下的虛擬串口驅動程序。可以創建虛擬串口對來連接兩個COM端口
在這里簡單的介紹一下com0com0的使用方法
首先,下載com0com-3.0.0.0-i386-and-x64-unsigned,解壓縮並安裝
接下來我們就可以使用setup command prompt來進行模擬串口對了
在這里首先介紹兩個命令
install PortName=串口名1 PortName=串口名2
新建兩個虛擬串口,並連接為串口對
list
列出目前所有的虛擬串口
如果跳出更新驅動的提示可以暫時無視,不影響后續的操作。
另一個工具setup具有圖形化界面,可以查看目前的串口對
接下來介紹java編程的時候需要用到的兩個jar包
RXTXcomm.jar
serialPortIO.jar
同時,在使用這兩個jar包進行java編程之前,我們要將mfz-rxtx-2.2-20081207-win-x64壓縮包下的兩個dll文件放到C:\Windows\System32下
然后,這里是一個簡單的串口讀寫的例子
import gnu.io.SerialPort; import serialPort.SerialTool; public class Read { public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub //以波特率115200打開串口COM12 SerialPort serialPort = SerialTool.openPort("COM12", 115200); SerialTool.addListener(serialPort, new SerialListener(serialPort)); } }
import java.util.Scanner; import gnu.io.SerialPort; import serialPort.SerialTool; public class Write { public static void main(String[] args) throws Exception { Scanner scan = new Scanner(System.in); String temp; //以波特率115200打開串口COM11 SerialPort serialPort = SerialTool.openPort("COM11", 115200); while(scan.hasNext()) { temp=scan.nextLine(); SerialTool.sendToPort(serialPort, temp.getBytes()); } } }
import javax.swing.JOptionPane; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import serialPort.SerialTool; public class SerialListener implements SerialPortEventListener { public SerialPort serialPort; public SerialListener(SerialPort serialPort) { this.serialPort=serialPort; } public void serialEvent(SerialPortEvent serialPortEvent) { switch (serialPortEvent.getEventType()) { case SerialPortEvent.BI: // 10 通訊中斷 System.out.println("與串口設備通訊中斷"); break; case SerialPortEvent.OE: // 7 溢位(溢出)錯誤 case SerialPortEvent.FE: // 9 幀錯誤 case SerialPortEvent.PE: // 8 奇偶校驗錯誤 case SerialPortEvent.CD: // 6 載波檢測 case SerialPortEvent.CTS: // 3 清除待發送數據 case SerialPortEvent.DSR: // 4 待發送數據准備好了 case SerialPortEvent.RI: // 5 振鈴指示 case SerialPortEvent.OUTPUT_BUFFER_EMPTY: // 2 輸出緩沖區已清空 break; case SerialPortEvent.DATA_AVAILABLE: // 1 串口存在可用數據 //System.out.println("found data"); byte[] data = null; try { if (serialPort == null) { System.out.println("串口對象為空!監聽失敗"); } else { data = SerialTool.readFromPort(serialPort); //讀取數據,存入字節數組 //System.out.println(new String(data)); JOptionPane.showInputDialog(new String(data)); //String dataOriginal = new String(data); //將字節數組數據轉換位為保存了原始數據的字符串 } } catch (Exception e) { System.exit(0); } break; } } }