串口通信原理

串口通信(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实现串口通信相关推荐

  1. Java实现串口通信的小样例

    用Java实现串口通信(windows系统下),须要用到sun提供的串口包 javacomm20-win32.zip.当中要用到三个文件,配置例如以下: 1.comm.jar放置到 JAVA_HOME ...

  2. java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...

    本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下 1.介绍 使用Java实现的串口通信程序,支持十六进制数据的发送与接收. 源码:SerialPortDemo 效果图如下: ...

  3. java 采用串口通信实现LED屏发送数据中文乱码问题

    java 采用串口通信实现LED屏发送数据中文乱码问题 1.定义:Pointer p = new Pointer(MemoryBlockFactory.createMemoryBlock(1024)) ...

  4. Java实现串口通信的小例子

    用Java实现串口通信(windows系统下),需要用到sun提供的串口包 javacomm20-win32.zip.其中要用到三个文件,配置如下: 1.comm.jar放置到 JAVA_HOME/j ...

  5. 基于java的串口通信

    文章目录 前言 一.RXTX是什么? 二.环境搭建 引入库 三.代码实现 SerialPortManager类 Tools类 重要代码解析 读取数据 写数据 写EPC号 询查单张标签 CRC校验 测试 ...

  6. 使用Java实现串口通信(二)

    1.写在前面 距离上一篇文章<使用Java实现串口通信>已经过去快两年的时间了,在此期间收到了很多读者的反馈,很高兴可以帮助到这么多人,根据收到的反馈,我对代码逻辑进行了优化整理,并增加了 ...

  7. Java 如何串口通信以及常见报错解决

    文章目录 一.Java 串口通信部署 准备 部署 1. 配置 Java 环境 2. 新建项目,引入依赖. 3. 代码(网上荡的) 运行 二.Java 串口通信报错 1. JDK 有关错误 2. dll ...

  8. Java通过串口通信实现温度监测

    开发环境  JDK1.8 + Rxtx2.1.7 + Eclipse 一: 首先,你需要下载一个额外的支持Java串口通信操作的jar包,由于java.comm比较老了,而且不支持64位系统,这里推荐 ...

  9. java 实现串口通信

    最近做了一个与硬件相关的项目,刚开始听说用java和硬件打交道,着实下了一大跳.java也可以操作硬件? 后来接触到是用java通过串口通信控制硬件感觉使用起来还不错,也很方便. 特拿出来和大家一起分 ...

最新文章

  1. 2022-2028年中国商贸物流行业市场前瞻与投资战略规划分析报告
  2. 活动报名 | MIT陈涛:如何让机器人学习高频接触的操作技能
  3. SQL Server 中常见的十张系统表
  4. Java JDBC篇1——初识JDBC
  5. 【Android】1.1 开发环境安装和配置
  6. php 获取子类的方法名,php获取分类下的所有子类方法
  7. sql2008 评估期过期解决办法
  8. 计算机什么病毒有远程控制功能,怎样知道自己的电脑已被远程控制
  9. 如何用代码模拟自由落体
  10. Google提供Fastboot和ADB单独下载服务(转载)
  11. 关于pr文件导入的问题
  12. 如何考虑SEO优化?
  13. php如何处理查询请求,PHP的curl查看header信息的功能(包括查看返回header和请求header)...
  14. shareSDK 微信分享闪退问题
  15. 电商扣减库存_二类电商:鲁班今日最新消息!
  16. Elastic 7.5 安装和升级指南(官方翻译)
  17. 平均置业年龄33.5岁!为啥搞数据的都往成都跑?
  18. 思考的技术- 读书笔记
  19. 开源协议:在项目中使用Apache License 2.0
  20. Eclispe 体系结构综述(一)

热门文章

  1. 关于iptables的u32匹配
  2. sphereface:deep hypersphere embedding for face recognition
  3. 在Vue.js中加载字体的最佳做法
  4. MATLAB代码:基于双层优化的电动汽车日前-实时两阶段市场竞标
  5. DVWA——Command Injection
  6. android PM2.5监控demo开发
  7. 失落世界服务器国庆宝箱位置,三亚亚特兰蒂斯失落的空间水族馆门票(提前1小时预订)...
  8. Antv/L7中使用高德地图插件
  9. Git仓库瘦身--清除项目git仓库大文件
  10. 数据库1:数据库、DDL数据库定义语言、DML操作数据库语言、DQL条件查询语句