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.mzph.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;这里使用你要替换给的角色…