JAVA 串口编程(二)
三、实例
(1)打开、关闭串口
首先使用CommPortIdentifier中的方法,获取可用的端口,并且选择一个端口打开作为通信端口。
A:枚举可用端口
1 | void listPortChoices() |
2 | { |
3 | CommPortIdentifier portId; |
4 | Enumeration en = CommPortIdentifier.getPortIdentifiers(); |
5 | while (en.hasMoreElements()) |
6 | { |
7 | portId = (CommPortIdentifier) en.nextElement(); |
8 | if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) |
9 | System.out.println(portId.getName()); |
10 | } |
11 | portChoice.select(parameters.getPortName()); |
12 | } |
13 | |
14 |
B:打开指定的端口
1 | CommPortIdentifier portId; |
2 | try |
3 | { |
4 | //生成CommPortIdentifier类的实例 |
5 | portId = CommPortIdentifier.getPortIdentifier("COM4"); |
6 | } |
7 | catch (NoSuchPortException e) |
8 | { |
9 | e.printStackTrace(); |
10 | } |
11 | try |
12 | { |
13 | //打开串口COM4,设置超时时限为3000毫秒 |
14 | serialPort = (SerialPort) portId.open("testApp", 3000); |
15 | } |
16 | catch (PortInUseException e) |
17 | { |
18 | e.printStackTrace(); |
19 | } |
20 | |
21 |
C:关闭端口
使用完的端口,必须记得将其关闭,否则其它的程序将无法使用该端口,CommPortIdentifier类只提供了开启端口的方法,而要关闭端口,则要调用CommPort类的close()方法。
serialPort.close()
(2)设置串口参数
1 | try { |
2 | try { |
3 | serialPort.setSerialPortParams(9600, // 波特率 |
4 | SerialPort.DATABITS_8,// 数据位数 |
5 | SerialPort.STOPBITS_1, // 停止位 |
6 | SerialPort.PARITY_NONE);// 奇偶位 |
7 | } |
8 | catch (UnsupportedCommOperationException e) |
9 | { |
10 | e.printStackTrace(); |
11 | } |
12 |
(3)串口的读、写
A:向串口写数据
1 | OutputStream outputStream; |
2 | try |
3 | { |
4 | outputStream = serialPort.getOutputStream(); |
5 | } |
6 | catch (IOException e) |
7 | { |
8 | e.printStackTrace(); |
9 | } |
10 | bt = new byte[] { (byte) 0x55, (byte) 0xAA, (byte) 0xF1 }; |
11 | try |
12 | { |
13 | outputStream.write(bt); |
14 | outputStream.flush(); |
15 | outputStream.close(); |
16 | } |
17 | catch (IOException e) |
18 | { |
19 | e.printStackTrace(); |
20 | } |
21 |
B:读取串口中的数据
读操作,需继承SerialPortEventListener接口。为SerialPort添加监听Listener。实现该接口的serialEvent (SerialPortEvent event)方法。
1 | public class SerialRead implements SerialPortEventListener{ |
2 | |
3 | InputStream inputStream; |
4 | byte[] rBuffer = new byte[38]; |
5 | SerialRead(SerialPort serialPort) |
6 | { |
7 | try { |
8 | serialPort.addEventListener((SerialPortEventListener) this); |
9 | this.serialPort.notifyOnDataAvailable(true); |
10 | |
11 | } catch (TooManyListenersException e) { |
12 | } |
13 | |
14 | try { |
15 | if (serialPort != null) |
16 | inputStream = serialPort.getInputStream(); |
17 | } catch (IOException e) { |
18 | } |
19 | } |
20 | |
21 | public void serialEvent(SerialPortEvent event) |
22 | { |
23 | if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) |
24 | { |
25 | int count = 0; |
26 | try |
27 | { |
28 | while ((ch = inputStream.read()) != -1) |
29 | { |
30 | bt[count++]=(byte)ch; |
31 | } |
32 | } |
33 | catch (IOException e) |
34 | { |
35 | e.printStackTrace(); |
36 | } |
37 | } |
38 | } |
39 |
JAVA 串口编程(二)相关推荐
- java rxtx version_RXTX实现JAVA串口编程
给大家分项下用RXTX库实现JAVA串口编程. 一 准备工作 1.1 下载资源文件 首先下载RXTX库对应的资源文件.下载地址 http://fizzed.com/oss/rxtx-for-java ...
- RXTX实现JAVA串口编程
给大家分项下用RXTX库实现JAVA串口编程. 一 准备工作 1.1 下载资源文件 首先下载RXTX库对应的资源文件.下载地址 http://fizzed.com/oss/rxtx-for-java ...
- Linux 串口编程二 深入了解 termios
前言 这一系列串口编程重点在应用层编程,但是在讲解原理与相关概念时需要对驱动框架有个基础的认识.如果只是浅尝辄止,以后在遇到串口驱动与应用层程序调试难免遇到瓶颈.关于 tty驱动架构参见我的其他博客: ...
- Java网络编程(二) 连续发送数据
有了建立连接的基础后,接下来尝试连续地发送和接收数据. 对于发送端比较好理解,有数据时就可以发送出去.对于接收端,就需要一直监听是否有数据发送过来.一个基本的方法就是使用 while(true) 循环 ...
- java串口编程-读取称重仪表中净重
一.需求说明 将仪表和计算机串口相连,计算机通过软件向仪表发送指令,然后仪表返回结果,在计算机软件界面上显示. 二.实现过程 1.查看仪表说明书 仪表型号为XK3190-A9,主要是查看相关参数(波特 ...
- Java 并发编程(二):如何保证共享变量的原子性?
线程安全性是我们在进行 Java 并发编程的时候必须要先考虑清楚的一个问题.这个类在单线程环境下是没有问题的,那么我们就能确保它在多线程并发的情况下表现出正确的行为吗? 我这个人,在没有副业之前,一心 ...
- java数据库编程(二) 数据库操作
关于数据库的连接方法已在java 数据库编程(一)JDBC连接Sql Server数据库一文中为大家介绍,还没有链接数据库的小伙伴请先点击查看. 今天首先为大家介绍一下数据库的连接及操作的核心类与接口 ...
- Java网络编程二:Socket详解
Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接 ...
- JAVA 串口编程 (三)
四.实例分析 同API一起下载的还有一个examples文件,里面有个最简单的读.写程序,对其进行注释,以增进了理. (1)读串口 1 import java.io.*; 2 import jav ...
最新文章
- 用百度开放地图api在代码中获得两地距离
- React Native 和ionic2 你选择哪一个?
- Mircosoft 正式把Windows Mobile改名为Windows Phone,你会因此而购买Windows Phone吗?
- 前端学习(1897)vue之电商管理系统电商系统之实现搜索功能
- 高质量JAVA代码编写规范
- 数据解读京东上最受欢迎的面包
- 161011、oracle批量插入数据
- C#调用Microsoft.DirectX.DirectSound问题记录及解决
- 微信小程序做搜索(精细版)
- Element UI 官网以及其他技术文档
- php和jsp有什么区别,php和jsp之间的区别是什么
- 西安电子科技大学-数字电路与逻辑设计大作业-汽车尾灯显示控制电路
- 软考软件设计师下午题目java设计模式(自用)
- 改变世界的17个数学公式
- 谷歌浏览器好用的复制粘贴插件_关于谷歌浏览器(chrome)的一些好用的插件推荐...
- 平台注册加入微信验证码机制。
- 云计算导论课后习题第一章
- yolov5 人群计数及阀值报警
- 转载(https://blog.csdn.net/qq_36738482/article/details/72823509)大数据的概念
- 信息系统安全实验(七):使用Kerberos实现网络身份认证