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目录下,如 ...
随机推荐
- PHP mysqli_connect_error() 函数
返回上一次连接错误的错误描述: <?php $con=mysqli_connect("localhost","wrong_user","my_p ...
- HDU3076 ssworld VS DDD
嘟嘟嘟 友情提示:数据把\(hp1\)和\(hp2\)弄反了! 进入正题. 这题还是比较好想,令\(dp[i][j]\)表示第一个人赢了\(i\)场,第二个人赢了\(j\)的概率,转移就是分别考虑这一 ...
- LibreOJ #119. 最短路
二次联通门 : LibreOJ #119. 最短路 /* LibreOJ #119. 最短路 堆优化的Dijkstra */ #include <cstring> #include < ...
- 删数问题(SDUT2072 )
删数问题 Time Limit: 1000 msMemory Limit: 65536 KiB Problem Description 键盘输入一个高精度的正整数n(≤100位),去掉其中任意s个数字 ...
- scrapy框架之进阶
五大核心组件 - 引擎(Scrapy) 用来处理整个系统的数据流处理, 触发事务(框架核心) - 调度器(Scheduler) 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. ...
- Python学习日记(三)——Python基本数据类型(运算符、int、str、tuple、dict、range)
运算符 1.算数运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2 ...
- FOFA 批量采集url 图形化界面编写
这是脚本 # coding:utf- import requests,re import time import sys import getopt import base64 guizhe='' s ...
- JDK1.6历史版本的下载(關於TLSv1.2)Oracle的官方文檔
[资源描述]:对于部分老项目 仍然采用的是JDK1.6 版本 但是打开官方 JDK 都是最新的 版本 想找 历史版本 不容易找到 [资源详情]:提供下载链接: http://www.oracle.co ...
- Java ExecutorService四种线程池及自定义ThreadPoolExecutor机制
一.Java 线程池 Java通过Executors提供四种线程池,分别为:1.newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收 ...
- DML:增、删、改表中数据
1. 添加数据 (1) 常规添加 INSERT INTO 表名(列名,列名,列名) VALUES(值,值,值); (2) 简化添加 INSERT INTO 表名 VALUES(值,值,值); 规则: ...