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目录下,如 ...
随机推荐
- CF70E Information Reform
题意:给你一棵树,要选择若干节点,若一个点i没有选择,则有\(d(dis(i,j))\)的代价,其中j被选择.选择一个点代价为k,求最小代价. 首先,考虑这样一个问题: 如果距离a的最近被选点为i,距 ...
- MySQL percona-toolkit工具详解
一.检查和安装与Perl相关的模块 PT工具是使用Perl语言编写和执行的,所以需要系统中有Perl环境. 依赖包检查命令为: rpm -qa perl-DBI perl-DBD-MySQL perl ...
- IIS遇到过的问题
1. IIS的一个莫名错误Server Application Unavailable http://www.kesion.com/zzcd/asp/aspjq/474.html 新打开这个服务ASP ...
- [HNOI2009]最小圈 分数规划 spfa判负环
[HNOI2009]最小圈 分数规划 spfa判负环 题面 思路难,代码简单. 题目求圈上最小平均值,问题可看为一个0/1规划问题,每个边有\(a[i],b[i]\)两个属性,\(a[i]=w(u,v ...
- luogu P4859 已经没有什么好害怕的了
嘟嘟嘟 题中给的\(k\)有点别扭,我们转换成\(a > b\)的对数是多少,这个用二元一次方程解出来是\(\frac{n + k}{2}\). 然后考虑dp,令\(dp[i][j]\)表示前\ ...
- 使用zabbix-proxy
事情背景: vt上两个vps,只提供ipv6.(因为便宜嘛).而我的zabbix服务器在腾讯云.它丫的没有ipv6. 那么我没法监控它们了呀... 这咋个行呢? 想办法... 我还有另外的vps 可以 ...
- 解决python中文乱码的方法
首先需要说明的是,windows下的文件路径,cmd窗口等默认编码都是gbk 但在windows下编写python程序的时候,我们一般采用的编码是utf-8 二者不一致是导致乱码的根本原因! 在pyc ...
- csp-s模拟99
考前10天了... 昨天晚上真的不清醒,什么也码不对,心态爆炸. T1调了一个多小时没出来,T2因为少了一出q.pop()没A掉,T3随便写了几个sort竟然A了.十分懵逼. 最后20分钟想调T1,结 ...
- python+Django+mysql环境搭建
为什么我的毕业设计还要用到网站啊啊啊啊.什么鬼啊,又要做爱拍拍又要做网站???饶了我啊..我选择狗带.. 网站就用django做吧,毕竟之前做过一个电脑销售网站,希望能借鉴一下经验什么的,不要一切从头 ...
- 如何把Java的double类型变量保留两位小数
已知 双精度标量 f, 如果想以字符串形式输出,小数点后保留2位,可直接通过C语言的输出格式,System.out.printf("%.2f", f), 达到目的. 如果想要先转 ...