Java讀取串口及端口調試

本篇主要講述使用Java對串口進行讀取和發送操作

準備

在項目中導入第三方Jar包

在這里插入圖片描述
在這里插入圖片描述
Jar包已經在資源中綁定,或者去官網上自行下載jSerialComm
注意當前jar包是配合JDK1.8環境使用,如果是1.8以下程序將直接中斷

安裝虛擬串口的軟件

Configure Virtual Serial Port Driver:可以在沒有物理意義上的設備時,虛擬出來兩個串口,免費使用14天
在這里插入圖片描述sscom5.13.1可以通過端口進行發送數據和接收數據的軟件
設置發送端,端口使用COM2

在這里插入圖片描述
同樣的設置第二個頁面接收頁面,接收端設置為COM1

在這里插入圖片描述

端口連接是否正常

在這里插入圖片描述
在這里插入圖片描述

測試通過

測試通過以后再進行代碼的編寫,不然不利于排除錯誤。

Java代碼讀取串口數據

  • Java代碼接收串口傳輸的數據
package dzz.com;
import com.fazecast.jSerialComm.SerialPort;  
import com.fazecast.jSerialComm.SerialPortDataListener;  
import com.fazecast.jSerialComm.SerialPortEvent;  public class SerialPortReaderData {  private SerialPort serialPort;  public void openAndReadSerialPort(String portName) {  // 查找并打開串口  serialPort = SerialPort.getCommPort(portName);  if (serialPort.openPort()) {  System.out.println("Port is open: " + portName);  // 設置串口參數(這些參數應該與你的設備相匹配)  serialPort.setBaudRate(9600);  serialPort.setNumDataBits(8);  serialPort.setNumStopBits(SerialPort.ONE_STOP_BIT);serialPort.setParity(SerialPort.ODD_PARITY);try {//休眠,因為防止過度的循環Thread.sleep(1000L);} catch (InterruptedException e) {closeSerialPort();}boolean flag=false;StringBuffer sb= new StringBuffer();while(serialPort.isOpen()) {//獲取傳輸過來的數據長度int bytesAvailable = serialPort.bytesAvailable();
//            	System.out.println(bytesAvailable);//判斷端口是否傳輸數據if(bytesAvailable!=-1&&bytesAvailable!=0) {byte[] newData = new byte[bytesAvailable]; //讀取端口數據 int numRead = serialPort.readBytes(newData, newData.length);  //解析成字符串并拼接sb.append(new String(newData, 0, numRead));flag=true;}//讀取完成跳出循環if(flag&&(bytesAvailable==-1||bytesAvailable==0)) {break;}}System.out.println(sb.toString());closeSerialPort();}}  //關閉端口釋放資源private void closeSerialPort() {  //判斷是否已經關閉了端口if (serialPort != null && serialPort.isOpen()) {  //移除端口的監聽serialPort.removeDataListener();  //關閉端口serialPort.closePort();  System.out.println("Port closed.");  }  }  public static void main(String[] args) {  SerialPortReaderData reader = new SerialPortReaderData();  reader.openAndReadSerialPort("COM1"); // 替換為你的串口名  // 可以在這里添加其他邏輯,比如等待用戶輸入來退出程序等  // 注意:在實際應用中,你可能需要有一種機制來確保程序不會無限期地運行下去  // 例如,你可以設置一個超時時間或等待用戶輸入來關閉程序  }  
}
  • Java通過端口發送數據
package dzz.com;
import com.fazecast.jSerialComm.SerialPort;  public class SerialSender {  public static void main(String[] args) {  // 列出所有可用的串口  SerialPort[] comPorts = SerialPort.getCommPorts();  for (SerialPort port : comPorts) {  System.out.println("Found port: " + port.getSystemPortName());  }  // 選擇一個串口(這里假設我們選擇第一個串口)  SerialPort comPort = SerialPort.getCommPort("COM1"); // 打開串口  if (comPort.openPort()) {  System.out.println("Port is open: " + comPort.getSystemPortName());  // 設置串口參數(這些參數應該與你的設備相匹配)  comPort.setBaudRate(9600);  comPort.setNumDataBits(8);  comPort.setNumStopBits(SerialPort.ONE_STOP_BIT);comPort.setParity(SerialPort.ODD_PARITY);// 發送數據  String dataToSend = "Hello, Serial Port!";  byte[] data = dataToSend.getBytes();  int numWritten = comPort.writeBytes(data, data.length);  System.out.println("Wrote " + numWritten + " bytes.");  // 關閉串口  comPort.closePort();  } else {  System.out.println("Unable to open " + comPort.getSystemPortName());  }  }  
}
  • 讀配置文件的形式動態設置端口值
import java.io.FileInputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.util.Properties;  public class ConfigReader {  //路徑private static final String CONFIG_FILE = "app.properties";  public static void main(String[] args) {  Properties properties = new Properties();  InputStream input = null;  try {  input = new FileInputStream(CONFIG_FILE);  // 從輸入流加載屬性列表  properties.load(input);  // 讀取屬性值  String name = properties.getProperty("port.name");  String baudrate = properties.getProperty("port.baudrate");  String numdataits = properties.getProperty("port.numdataits");  String stopbits = properties.getProperty("port.stopbits"); String parity = properties.getProperty("port.parity"); // 打印屬性值  System.out.println("name" + name);  } catch (IOException ex) {  ex.printStackTrace();  } finally {  if (input != null) {  try {  input.close();  } catch (IOException e) {  e.printStackTrace();  }  }  }  }  
}

配置文件以properties為后綴名

port.name=COM1
port.baudrate=9600
port.numdataits=8
port.stopbits=1
port.parity=1

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13501.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13501.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13501.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一款功能強大的安卓虛擬機應用——VMOS Pro使用分享

前段時間我剛剛分享一個WeChat平板模塊能夠允許用戶自由修改系統設置,讓你的Android備用手機煥發新生,實現手機PAD化,實現兩臺設備同時登錄微信號。今天我分享的這個相比WeChat更為簡單,因為它可以通過虛擬機的方式進行多種androi…

分類和品牌關聯

文章目錄 1.數據庫表設計1.多表關聯設計2.創建表 2.使用renren-generator生成CRUD1.基本配置檢查1.generator.properties2.application.yml 2.生成代碼1.進入localhost:81生成代碼2.將main目錄覆蓋sunliving-commodity模塊的main目錄 3.代碼檢查1.注釋掉CategoryBrandRelationC…

Tencent : TBDS簡介

Tencent TBDS(Tencent Big Data Suite)是騰訊公司推出的大數據處理套件,它基于騰訊多年海量數據處理經驗,依托云原生技術和泛Hadoop生態開源技術,為用戶提供可靠、安全、易用的大數據處理平臺。 TBDS可以在公有云、私…

JavaWeb基礎(HTML,CSS,JS)

這些知識用了三四天左右學完,因為是JavaWeb,并不是前端,所以只是夠用,不是深入,但是這確實是學校一個學期交的東西(JavaWeb課程)。 總結一下網頁分為三部分:HTML(內容結構),CSS&…

MySql--SQL語言

目錄 SQl---DDL 結構定義 創建、刪除 數據庫 代碼 運行 設計表 數據類型 整數 浮點數 主鍵 約束 主鍵自增長 默認值 字段注釋 創建、刪除 表 代碼 運行 代碼 代碼 運行 SQL---DML 數據操縱 插入數據 代碼 運行 代碼 運行 代碼 運行 代碼 …

【實戰教程】使用Spring AOP和自定義注解監控接口調用

一、背景 隨著項目的長期運行和迭代,積累的功能日益繁多,但并非所有功能都能得到用戶的頻繁使用或實際上根本無人問津。 為了提高系統性能和代碼質量,我們往往需要對那些不常用的功能進行下線處理。 那么,該下線哪些功能呢&…

貪心算法: 單調遞增的數字

參考資料:代碼隨想錄 題目鏈接:. - 力扣(LeetCode) 倒序遍歷每個數字,遇到前一個比后一個大的就減一,最后統一把后面幾位置為9 String str n"";char[] chars str.toCharArray();int flag c…

docker部署kafka實戰

目錄 一、部署kafaka、zookeeper 二、測試信息發送與接收 三、kafka進階 一、部署kafaka、zookeeper 請提前安裝docker、docker-compose 安裝docker:docker--安裝docker-ce-CSDN博客 安裝docker-compose: 安裝docker-compose_安裝 docker-compose-CSD…

云下到云上,麗迅物流如何實現數據庫降本50% | OceanBase案例

在2024年3月20日的首場OceanBase數據庫城市行活動中,專注于物流及供應鏈解決方案的麗迅物流的架構師陽磊,圍繞“OB Cloud在麗迅物流的實踐”這一主題,進行了精彩的演講。本文為此次演講的內容回顧。 在麗迅物流(Lesoon Logistics…

小demo - 列表hide or not (含代碼)

直接上代碼 <!DOCTYPE html> <html><head><style>.menu {width: 220px;height: 800px;border: 1px solid #dddddd;}.item {cursor: pointer;}.menu .header {padding: 10px 5px;background-color: goldenrod;}.menu .content a {display: block;paddi…

線程安全-1 synchronized鎖升級

一.說一下synchronized關鍵字的底層原理 1.synchronized又叫同步鎖&#xff0c;采用互斥的方式使同一時刻只能有一個線程持有鎖。 2.jdk1.6及以前&#xff0c;synchronized底層是用monitor實現的。monitor是jvm級別的對象&#xff0c;由c實現。每一個對象對應一個monitor&…

9.1 Go語言入門(環境篇)

Go語言入門&#xff08;環境篇&#xff09; 目錄一、什么是Go語言二、下載安裝配置Go語言開發環境1. 下載2. 安裝3. 配置環境變量4. 安裝環境驗證 三、 開發工具1. 下載2. 安裝3. 激活4. 配置SDK 四、 創建go工程文件并運行1. 創建go工程2. 示例代碼3. 運行代碼 目錄 一、什么…

軟件開源協議與QT的開源協議介紹

一.常見的六種開源協議 1.BSD協議 BSD協議全稱為“Berkely Software Distribution”&#xff0c;中文譯為“伯克利軟件發行版”。其最早用于伯克利UNIX操作系統上的開源貢獻。 主要特點&#xff1a; 允許修改源碼 允許源碼再發布 允許商業軟件發布和銷售 約束&#xff1…

shell 腳本筆記2

3.env與set區別 env用于查看系統環境變量 set用于查看系統環境變量自定義變量函數 4.常用環境變量 變量名稱含義PATH命令搜索的目錄路徑, 與windows的環境變量PATH功能一樣LANG查詢系統的字符集HISTFILE查詢當前用戶執行命令的歷史列表 Shell變量&#xff1a;自定義變量 目標…

HCIP【VRRP、MSTP、VLAN綜合實驗】

目錄 一、實驗拓撲圖&#xff1a; ?編輯二、實驗要求 三、實驗思路 四、實驗步驟 &#xff08;1&#xff09; eth-trunk技術配置 &#xff08;2&#xff09;vlan 技術配置 &#xff08;3&#xff09;配置SW1、SW2、AR1、ISP的IP地址 &#xff08;4&#xff09;在交換機…

FBB-Frontiers in Bioengineering and Biotechnology

文章目錄 一、期刊簡介二、征稿信息三、期刊表現四、投稿須知五、投稿咨詢 一、期刊簡介 Frontiers in Bioengineering and Biotechnology是專注生物工程和生物技術領域的開放獲取期刊。 研究范圍涵蓋生物材料、生物力學、生物工藝工程、生物安全和生物安保&#xff0c;生物傳…

QT項目-歡樂斗地主游戲

QT項目-歡樂斗地主游戲 游戲概述游戲規則牌型牌型的大小游戲角色游戲規則游戲的勝負游戲計分規則 游戲相關的類介紹卡牌類玩家類窗口類游戲控制類游戲策略類線程類音頻類 游戲主要組件卡牌玩家窗口 游戲控制源碼 游戲概述 游戲規則 不同地域游戲規則可能有些許差異&#xff0c…

MySQL之Schema與數據類型優化(三)

Schema與數據類型優化 BLOB和TEXT類型 BLOB和TEXT都是為存儲很大的數據而設計的字符串數據類型&#xff0c;分別采用二進制和字符方式存儲。 實際上它們分別屬于兩組不同的數據類型家族:字符類型是TINYTEXT&#xff0c;SMALLTEXT,TEXT&#xff0c;MEDIUMTEXT&#xff0c;LONG…

Spring Cloud整合Sentinel

1、引入依賴 鏈接: 點擊查看依賴關系 父pom <spring.cloud.version>Hoxton.SR12</spring.cloud.version> <spring.cloud.alibaba.version>2.2.10-RC1</spring.cloud.alibaba.version>Sentinel應用直接引用starter <dependency><groupId&…

【UE5.1】* 動畫重定向 (讓你的角色可以使用小白人全部動畫)

前言 這里以小白人動畫重定向給商城資產“Adventure Character”中的角色為例&#xff0c;闡述如何使用UE5.1進行動畫重定向。 步驟 1. 創建一個IK綁定 這里選擇小白人的骨骼網格體 這里命名為“IKRig_Mannequin” 2. 再新建一個IK綁定&#xff0c;這里使用你要替換給的角色…