java SerialPort串口通讯的使用
api文档
http://fazecast.github.io/jSerialComm/javadoc/com/fazecast/jSerialComm/package-summary.html
maven依赖
<!-- https://mvnrepository.com/artifact/com.fazecast/jSerialComm -->
<dependency>
<groupId>com.fazecast</groupId>
<artifactId>jSerialComm</artifactId>
<!--<version>2.5.2</version>-->
<version>[2.0.0,3.0.0)</version>
</dependency>
基于事件的阅读用法示例
可供读取的数据示例
以下示例显示了使用此事件触发器的一种方法:
SerialPort comPort = SerialPort.getCommPorts()[0];
comPort.openPort();
comPort.addDataListener(new SerialPortDataListener() {
@Override
public int getListeningEvents() { return SerialPort.LISTENING_EVENT_DATA_AVAILABLE; }
@Override
public void serialEvent(SerialPortEvent event)
{
if (event.getEventType() != SerialPort.LISTENING_EVENT_DATA_AVAILABLE)
return;
byte[] newData = new byte[comPort.bytesAvailable()];
int numRead = comPort.readBytes(newData, newData.length);
System.out.println("Read " + numRead + " bytes.");
}
});
非阻塞阅读用法示例
package com.bhu.utils;
import com.fazecast.jSerialComm.SerialPort;
public class SerialComm {
/*public static void main(String[] args) throws InterruptedException {
SerialComm serialComm = new SerialComm("COM3");
serialComm.openPort();
while (true) {
byte[] bs = serialComm.writeAndRead("010300000002");
Double[] d = Utils.analysisData(bs, 3, 5, 2);
if (d != null) {
for (Double a : d) {
System.out.println(a);
}
}
Thread.sleep(1000);
}
}*/
public SerialComm(String portDescriptor) {
this.portDescriptor = portDescriptor;
}
public SerialComm(String portDescriptor, Integer baudRate) {
this.portDescriptor = portDescriptor;
this.baudRate = baudRate;
}
private String portDescriptor;
private Integer baudRate;
private SerialPort comPort;
public boolean isOpen() {
return comPort.isOpen();
}
/**
* 打开串口
*
* @return 打开的状态
*/
public boolean openPort() {
return openPort(portDescriptor, baudRate);
}
/**
* 打开串口
*
* @param portDescriptor COM口
* @return 打开的状态
*/
public boolean openPort(String portDescriptor) {
return openPort(portDescriptor, null);
}
/**
* 打开串口
*
* @param portDescriptor COM口
* @param baudRate 波特率
* @return 打开的状态
*/
public boolean openPort(String portDescriptor, Integer baudRate) {
comPort = SerialPort.getCommPort(portDescriptor);
if (baudRate != null) {
comPort.setBaudRate(baudRate);
}
if (!comPort.isOpen()) {
return comPort.openPort();
} else {
return true;
}
}
/**
* 关闭串口
*
* @return
*/
public boolean closePort() {
if (comPort != null && comPort.isOpen()) {
return comPort.closePort();
}
return true;
}
/**
* 向com口发送数据并且读取数据
*/
public byte[] writeAndRead(String instruct) {
byte[] reslutData = null;
try {
if (!comPort.isOpen()) throw new BhudyException(BhudyExceptionCode.CODE_18);
int numWrite = comPort.writeBytes(Utils.getCRC(instruct), Utils.getCRC(instruct).length);
if (numWrite > 0) {
int i = 0;
while (comPort.bytesAvailable() > 0 && i++ < 5) Thread.sleep(20);
byte[] readBuffer = new byte[comPort.bytesAvailable()];
int numRead = comPort.readBytes(readBuffer, readBuffer.length);
if (numRead > 0) {
reslutData = readBuffer;
}
}
} catch (InterruptedException e) {
throw new BhudyException(e.getMessage());
}
return reslutData;
}
}
java SerialPort串口通讯的使用的更多相关文章
- (c#2.0)serialPort串口通讯
原文:(c#2.0)serialPort串口通讯 using System; using System.Collections.Generic; using System.ComponentModel ...
- java实现串口通讯
一. 准备工作 1. 点击此下载java串口通讯相关工具 2. 将RXTXcomm.jar放到 %JAVA_HOME%\jre\lib\ext\ 目录下,工程中引入该jar包 3. 将rxtxSe ...
- serialport串口通讯
在.NET Framework 2.0中提供了SerialPort类,该类主要实现串口数据通信 = System.IO.Ports.SerialPort.GetPortNames();获取电脑有哪几个 ...
- Java利用Rxtx进行串口通讯
最近在做传感器数据采集的工作,底层是基于Zigbee的无线传感网络,所有数据采集到Zigbee协调器上然后通知上位机数据采集完成,上位机通过USB转串口去读取数据就可以了.那么问题来了,如何进行串口通 ...
- 使用Java进行串口SerialPort通讯
1.准备工作 在进行串口连接通讯前,必须保证你当前操作电脑上有可用且闲置的串口.因为一般的电脑上只有一个或者两个串口,如COM1或COM2,但大多数情况下,这些串口可能会被其他的程序或者 ...
- 简单的Java串口通讯应答示例
java串口通讯第一次使用,找的资料都比较麻烦,一时没有理出头绪,自己在示例的基础上整理了一个简单的应答示例,比较简陋,但演示了java串口通讯的基本过程. package com.garfield. ...
- java web下串口通讯
最近在做java串口通讯,主要是用个人电脑通过串口从RS485读取数据,并通过crc循环冗余校验,把接收正确的数据解析,插入数据库mysql,并用SSH技术把数据库数据以表格以及图表形式显示 ...
- java串口通讯环境配置
用java实现串口通信(windows系统下),配置如下: 1.comm.jar放置到 JAVA_HOME/jre/lib/ext;2.win32com.dll放置到 JAVA_HOME/bin;3. ...
- Android串口通讯
今天在整一个项目,需要利用串口通讯在网上看了好多人的帖子才稍微整出了一点头绪. 首先串口代码就是利用谷歌自己的api,将java代码放在java/android_serialport_api目录下,如 ...
随机推荐
- delegate:动态绑定js事件
$('.videomodule').delegate("span", "click", function() { var i = $(this).index() ...
- struts1 action之间的跳转
ActionForward actionForward = new ActionForward(); actionForward.setPath("xxxxxxxx");//跳转的 ...
- *51nod 1409
https://blog.csdn.net/stay_accept/article/details/81476358 不懂啊 #include <map> #include <que ...
- vscode集成eslint
1. 安装 ESLint 扩展 首先,打开 VSCode 扩展面板并搜索 ESLint 扩展,然后点击安装 2. 项目安装eslint yarn add eslint -D 3. 设置eslint配置 ...
- c#简单的SQLHelp
public abstract class SQLHelper { //只读的静态数据库连接字符串 //需添加引用System.Configuration; public static readonl ...
- docker pull 报错Get https://xxx.xxx.xxx.xxx:5000/v1/_ping: http: server gave HTTP response
解决方法: vim /etc/docker/daemon.json { "insecure-registries":["xxx.xxx.xxx.xxx:5000" ...
- Shell基础之四 变量与运算
shell变量与运算 变量存在于内存中.假设变量str,设置或修改变量属性时,不带$号,只有引用变量的值时才使用$号.也就是说在内存中,标记变量的变量名称是str,而不是$str. 变量数据的存储方式 ...
- pwn学习日记Day12 《程序员的自我修养》读书笔记
目标文件里有什么 ELF各段 代码段 text 数据段 data bss段 只读数据段 rodata 注释信息段 comment 堆栈提示段 .note.GNU-stack comment 存放编译器 ...
- ArcGIS超级工具SPTOOLS-SHP转数据库,批量数据库转数据库,栅格彩色转黑白
1.1 SHP转数据库 把一个文件夹的数据,转到数据库,或者另一个文件夹,不含字文件夹 1.2 批量数据库转数据库 把一个文件夹下GDB或者MDB,转到另一个文件夹为MDB,GDB,并实现版本的转 ...
- 周志华-机器学习西瓜书-第三章习题3.5 LDA
本文为周志华机器学习西瓜书第三章课后习题3.5答案,编程实现线性判别分析LDA,数据集为书本第89页的数据 首先介绍LDA算法流程: LDA的一个手工计算数学实例: 课后习题的代码: # coding ...