android串口通信apk源码详解(附完整源码)-kb88凯时官网登录

时间:2021-01-19
阅读:
免费资源网 - https://freexyz.cn/

1、serialporthelper「android串口通信」介绍

原项目地址

https://github.com/freyskill/serialporthelper

android串口通讯助手可以用于需要使用串口通信的android外设,该库有如下特点:

1、串口通信部分使用c 实现,在笔者接触的部分设备上实测,使用c 实现与google官方提供的demo的方式要快;

2、支持且必须设置串口接收最大数据长度,初始化库时填入该参数,这样设置的原因是考虑在实际使用中,规定的串口通信协议格式一般会固定有最大长度,方便对数据进行处理;

3、支持命令一发一收,通过对串口的读写线程进行同步控制,命令会先加入到队列然后依次发送和接收,前提需要设置超时时间以及超时处理,参考下面第4、5点;

4、支持超时设置,设置超时时间后,如果命令在设置的时间内未反馈,则会根据设置的操作进行重发或退出该命令;

5、支持超时重发(可以n次重发,具体按需设置)与退出,退出会调用接收回调的 oncomplete 方法。

2、运行apk演示

使用该库简单实现的串口调试助手工具,原来作者编译的版本有点问题,点击发送的时候会死掉,我重新修改了一份,大家在使用的时候如果有什么问题,可以提出来。

使用界面

 

 
串口apk使用界面

 

 

 
数据收发界面

 

3、apk 下载地址

apk下载-serialporthelperv1.0.1-20201225.apk

https://github.com/freyskill/serialporthelper/blob/master/serialporthelperv1.0.1.apk

如果github下载比较慢

链接: 提取码: qrhj

4、软件接入方式

step 1. add the jitpack repository to your build file

add it in your root build.gradle at the end of repositories:

allprojects {
 repositories {
 ...
 maven { url 'https://www.jitpack.io' }
 }
}

step 2. add the dependency

dependencies {
  implementation 'com.github.freyskill:serialporthelper:v1.0.1'
}

5、使用说明

初始化需要设置maxsize,也可以设置isreceivemaxsize该参数默认为false,详细说明如下:

int maxsize;  // 设置串口读取的最大数据长度

boolean isreceivemaxsize; // 设置是否接收命令按最大长度进行返回,比如串口协议定义的格式长度为16个字节,这样可以设置maxsize为16,然后设置该参数为true,则接收的命令就会返回16个字节的长度。

提示: 设置isreceivemaxsize为true是为了处理命令返回不完整的情况,例如完整命令长度为16,但是串口读的过程分几次返回。

serialporthelper serialporthelper = new serialporthelper(32);
serialporthelper serialporthelper = new serialporthelper(32,true);

5.1.初始化串口

//方式一:快速接入方式,设置好串口地址,或者地址和波特率即可,数据位、停止位、校验类型分别默认为8、1、n。
serialporthelper serialporthelper = new serialporthelper(32);
//serialporthelper.opendevice("dev/ttys0");
serialporthelper.opendevice("dev/ttys0",11520);
// 数据接收回调
serialporthelper.setsphresultcallback(new sphresultcallback() {
  @override
  public void onsenddata(sphcmdentity sendcom) {
  log.d(tag, "发送命令:"   sendcom.commandshex);
  }
 
  @override
  public void onreceivedata(sphcmdentity data) {
  log.d(tag, "收到命令:"   data.commandshex);
  
  }
 
  @override
  public void oncomplete() {
  log.d(tag, "完成");
  }
 });
//方式二:通过serialportconfig设置相关串口参数
 
//串口参数
serialportconfig serialportconfig = new serialportconfig();
serialportconfig.mode = 0;  // 是否使用原始模式(raw mode)方式来通讯
serialportconfig.path = path;  // 串口地址
serialportconfig.baudrate = baudrate; // 波特率
serialportconfig.databits = databits; // 数据位 取值 位 7或 8
serialportconfig.parity = checkbits;// 检验类型 取值 n ,e, o
serialportconfig.stopbits = stopbits; // 停止位 取值 1 或者 2
 
// 初始化串口
serialporthelper = new serialporthelper(16);
// 设置串口参数
serialporthelper.setconfiginfo(serialportconfig);
// 开启串口
isopen = serialporthelper.opendevice();
if(!isopen){
 toast.maketext(this,"串口打开失败!",toast.length_long).show();
}
// 数据接收回调
serialporthelper.setsphresultcallback(new sphresultcallback() {
 @override
 public void onsenddata(sphcmdentity sendcom) {
 log.d(tag, "发送命令:"   sendcom.commandshex);
 }
 
 @override
 public void onreceivedata(sphcmdentity data) {
 log.d(tag, "收到命令:"   data.commandshex);
 
 }
 
 @override
 public void oncomplete() {
 log.d(tag, "完成");
 }
});

5.2.数据发送与接收

// 发送数据
serialporthelper.addcommands(sendhextxt); // 发送十六进制字符串
serialporthelper.addcommands(sendcombytes); // 发送字节数组
 
// 发送数据实体
sphcmdentity comentry = new sphcmdentity();
comentry.commands = commands; // 发送命令字节数组
comentry.flag = flag;  // 备用标识
comentry.commandshex = dataconversion.encodehexstring(commands); // 发送十六进制字符串
comentry.timeout = 100; // 超时时间 ms
comentry.rewritecom = false; // 超时是否重发 默认false
comentry.rewritetimes = 5; // 重发次数 
comentry.receivecount = 1; // 接收数据条数,默认为1
serialporthelper.addcommands(comentry);
// 数据接收回调
serialporthelper.setsphresultcallback(new sphresultcallback() {
 @override
 public void onsenddata(sphcmdentity sendcom) {
 log.d(tag, "发送命令:"   sendcom.commandshex);
 }
 
 @override
 public void onreceivedata(sphcmdentity data) {
 // 对于接受数据的sphcmdentity,其中需要使用的有 
 // commandshex 返回的十六进制数据
 // commands 返回的字节数组
 // flag 备用标识,例如标识该命令是相关操作
 log.d(tag, "收到命令:"   data.commandshex);
 
 }
 
 @override
 public void oncomplete() {
 log.d(tag, "完成");
 }
});

5.3、关闭串口

serialporthelper.closedevice();

6、常见问题

6.1、串口打开失败

一般情况就是设备节点的权限不正确,可以使用命令查看串口的设备节点权限。

7、修改记录 20201225-修改

在原来的基础上简化了界面,把没有需要用的东西给干掉。

20201211-修改

基础代码和仓库是原来作者的,但是原来的代码经常挂掉,代码上做了一些修改。后续会有更多的修改。

免费资源网 - https://freexyz.cn/
返回顶部
顶部
网站地图