Java实现串口通信
串口通信原理
串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。 尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。
windows 查询本地串口
鼠标右键此电脑点击管理菜单,点击设备管理器,找到本地COM端口,我电脑上是COM4端口
windows 环境配置RXTXcomm.jar
资源下载(win64位 链接:https://pan.baidu.com/s/1_t0lLIxgz0Rwkk5oQClj_w 提取码:tv5q)
复制rxtxParallel.dll,rxtxSerial.dll这两个文件到 JAVA_HOME\jre\bin目录下,复制RXTXcomm.jar文件到
JAVA_HOME\jre\lib\ext目录下
idea项目添加RXTXcomm.jar包
打开 File -> Project Structure
打开SDKs,点击+号,添加本地RXTXcomm.jar包
找到上面复制的RXTXcomm.jar包
代码示例
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;/*** TODO** @author linfeng* @date 2022/4/24 14:57*/
public class SerialPortManager {private static String portName = "COM4"; //本地COM口private static CommPortIdentifier commPortIdentifier;private static SerialPort serialPort;private static OutputStream out;private static InputStream in;private static int baud = 9600;public static void main(String[] args) throws Exception {//打开串口commPortIdentifier = CommPortIdentifier.getPortIdentifier(portName);serialPort = (SerialPort) commPortIdentifier.open(portName,2000);// 注册一个SerialPortEventListener事件来监听串口事件serialPort.addEventListener(new SerialPortListener());// 数据可用则触发事件serialPort.notifyOnDataAvailable(true);// 打开输入输出流in = serialPort.getInputStream();// 设置串口参数,波特率9600,8位数据位,1位停止位,无奇偶校验serialPort.setSerialPortParams(baud, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);System.out.println("打开串口成功");}public static class SerialPortListener implements SerialPortEventListener{@Overridepublic void serialEvent(SerialPortEvent serialPortEvent) {switch (serialPortEvent.getEventType()) {case SerialPortEvent.DATA_AVAILABLE://Data available at the serial port,端口有可用数据。读到缓冲数组,输出到终端System.out.println("端口有可用数据");try {if (in != null) {//缓冲区可自己修改byte[] cache = new byte[12];int availableBytes = 0;availableBytes = in.available();while (availableBytes > 0) {in.read(cache);String[] data = bytes2HexString(cache).split(" ");System.out.println(bytes2HexString(cache));}}}catch (Exception e) {e.printStackTrace();}break;case SerialPortEvent.BI://Break interrupt,通讯中断System.out.println("通讯中断");break;case SerialPortEvent.OE://Overrun error,溢位错误System.out.println("溢位错误");break;case SerialPortEvent.FE://Framing error,传帧错误System.out.println("传帧错误");break;case SerialPortEvent.PE://Parity error,校验错误System.out.println("校验错误");break;case SerialPortEvent.CD://Carrier detect,载波检测System.out.println("载波检测");break;case SerialPortEvent.CTS://Clear to send,清除发送System.out.println("清除发送");break;case SerialPortEvent.DSR:// Data set ready,数据设备就绪System.out.println("数据设备就绪");break;case SerialPortEvent.RI://Ring indicator,响铃指示System.out.println("响铃指示");break;case SerialPortEvent.OUTPUT_BUFFER_EMPTY:// Output buffer is empty,输出缓冲区清空System.err.println("监听端口出现了异常");break;}}}/** 字节数组转16进制字符串*/public static String bytes2HexString(byte[] b) {String r = "";for (int i = 0; i < b.length; i++) {String hex = Integer.toHexString(b[i] & 0xFF);if (hex.length() == 1) {hex = '0' + hex;}r += hex.toUpperCase()+" ";}return r;}/*** 获取系统com端口* @return*/public static String getSystemSerialPort(){Enumeration<CommPortIdentifier> portList = CommPortIdentifier.getPortIdentifiers();String portName ="";while (portList.hasMoreElements()) {portName = portList.nextElement().getName();System.out.println(portName);}return portName;}
}
串口调式工具
链接:https://pan.baidu.com/s/1CsZrcrmOi_YB78N38mfGtA 提取码:p9rf。这可以调试本地串口收发数据。
Java实现串口通信相关推荐
- Java实现串口通信的小样例
用Java实现串口通信(windows系统下),须要用到sun提供的串口包 javacomm20-win32.zip.当中要用到三个文件,配置例如以下: 1.comm.jar放置到 JAVA_HOME ...
- java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...
本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下 1.介绍 使用Java实现的串口通信程序,支持十六进制数据的发送与接收. 源码:SerialPortDemo 效果图如下: ...
- java 采用串口通信实现LED屏发送数据中文乱码问题
java 采用串口通信实现LED屏发送数据中文乱码问题 1.定义:Pointer p = new Pointer(MemoryBlockFactory.createMemoryBlock(1024)) ...
- Java实现串口通信的小例子
用Java实现串口通信(windows系统下),需要用到sun提供的串口包 javacomm20-win32.zip.其中要用到三个文件,配置如下: 1.comm.jar放置到 JAVA_HOME/j ...
- 基于java的串口通信
文章目录 前言 一.RXTX是什么? 二.环境搭建 引入库 三.代码实现 SerialPortManager类 Tools类 重要代码解析 读取数据 写数据 写EPC号 询查单张标签 CRC校验 测试 ...
- 使用Java实现串口通信(二)
1.写在前面 距离上一篇文章<使用Java实现串口通信>已经过去快两年的时间了,在此期间收到了很多读者的反馈,很高兴可以帮助到这么多人,根据收到的反馈,我对代码逻辑进行了优化整理,并增加了 ...
- Java 如何串口通信以及常见报错解决
文章目录 一.Java 串口通信部署 准备 部署 1. 配置 Java 环境 2. 新建项目,引入依赖. 3. 代码(网上荡的) 运行 二.Java 串口通信报错 1. JDK 有关错误 2. dll ...
- Java通过串口通信实现温度监测
开发环境 JDK1.8 + Rxtx2.1.7 + Eclipse 一: 首先,你需要下载一个额外的支持Java串口通信操作的jar包,由于java.comm比较老了,而且不支持64位系统,这里推荐 ...
- java 实现串口通信
最近做了一个与硬件相关的项目,刚开始听说用java和硬件打交道,着实下了一大跳.java也可以操作硬件? 后来接触到是用java通过串口通信控制硬件感觉使用起来还不错,也很方便. 特拿出来和大家一起分 ...
最新文章
- 2022-2028年中国商贸物流行业市场前瞻与投资战略规划分析报告
- 活动报名 | MIT陈涛:如何让机器人学习高频接触的操作技能
- SQL Server 中常见的十张系统表
- Java JDBC篇1——初识JDBC
- 【Android】1.1 开发环境安装和配置
- php 获取子类的方法名,php获取分类下的所有子类方法
- sql2008 评估期过期解决办法
- 计算机什么病毒有远程控制功能,怎样知道自己的电脑已被远程控制
- 如何用代码模拟自由落体
- Google提供Fastboot和ADB单独下载服务(转载)
- 关于pr文件导入的问题
- 如何考虑SEO优化?
- php如何处理查询请求,PHP的curl查看header信息的功能(包括查看返回header和请求header)...
- shareSDK 微信分享闪退问题
- 电商扣减库存_二类电商:鲁班今日最新消息!
- Elastic 7.5 安装和升级指南(官方翻译)
- 平均置业年龄33.5岁!为啥搞数据的都往成都跑?
- 思考的技术- 读书笔记
- 开源协议:在项目中使用Apache License 2.0
- Eclispe 体系结构综述(一)
热门文章
- 关于iptables的u32匹配
- sphereface:deep hypersphere embedding for face recognition
- 在Vue.js中加载字体的最佳做法
- MATLAB代码:基于双层优化的电动汽车日前-实时两阶段市场竞标
- DVWA——Command Injection
- android PM2.5监控demo开发
- 失落世界服务器国庆宝箱位置,三亚亚特兰蒂斯失落的空间水族馆门票(提前1小时预订)...
- Antv/L7中使用高德地图插件
- Git仓库瘦身--清除项目git仓库大文件
- 数据库1:数据库、DDL数据库定义语言、DML操作数据库语言、DQL条件查询语句