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下载比较慢,可以关注公众号「嵌入式Linux」,回复「serial」获取下载链接。

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() {@Overridepublic void onSendData(SphCmdEntity sendCom) {Log.d(TAG, "发送命令:" + sendCom.commandsHex);}@Overridepublic void onReceiveData(SphCmdEntity data) {Log.d(TAG, "收到命令:" + data.commandsHex);}@Overridepublic 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() {@Overridepublic void onSendData(SphCmdEntity sendCom) {Log.d(TAG, "发送命令:" + sendCom.commandsHex);}@Overridepublic void onReceiveData(SphCmdEntity data) {Log.d(TAG, "收到命令:" + data.commandsHex);}@Overridepublic 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() {@Overridepublic void onSendData(SphCmdEntity sendCom) {Log.d(TAG, "发送命令:" + sendCom.commandsHex);}@Overridepublic void onReceiveData(SphCmdEntity data) {// 对于接受数据的SphCmdEntity,其中需要使用的有 // commandsHex 返回的十六进制数据// commands    返回的字节数组// flag        备用标识,例如标识该命令是相关操作Log.d(TAG, "收到命令:" + data.commandsHex);}@Overridepublic void onComplete() {Log.d(TAG, "完成");}
});

5.3、关闭串口

serialPortHelper.closeDevice();

6、常见问题

6.1、串口打开失败

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

7、修改记录

20201225-修改

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

20201211-修改

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

推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

Android串口通信apk源码相关推荐

  1. android uart 助手,android串口通讯助手源码(ComAssistant)

    [实例简介]Android串口通信 android串口通讯助手源码,可以获取设备中可用串口.破特率,发送hex数据.文本txt数据等功能 [实例截图] [核心代码] ComAssistant └── ...

  2. 27.串口通信实验源码讲解

    串口通信实验源码讲解 笔记基于正点原子官方视频 视频连接https://www.bilibili.com/video/BV1Wx411d7wT?p=71&spm_id_from=333.100 ...

  3. RS485/RS232串口通信实现源码

    之前贴出了代码,但是本地源码已经找不到了:本篇补充了一些使用说明 一.参考代码 1.不方便下载的同学可以参考贴出来的源代码链接:RS485 2.工程链接:RS485 二.基本知识 1.RS485通信讲 ...

  4. Android串口通信实例分析【附源码】

    Android 串口通信实例分析,用的时开源的android-serialport-api 这个是用android ndk实现的串口通信,我把他做了一个简化,适合于一般的程序的串口通信移植,欢迎拍砖- ...

  5. 华硕Tinker Board开发板(rk3288处理器)开发 ---- 将Android Studio开发的apk源码放到Android7.1.2源码中进行编译

    备注:此Android Studio项目并没有jni,没有使用动态so库,只是一个简单的项目. 1.将Android studio开发的项目移植到Android7.1.2源码中,我们只需要Androi ...

  6. Android 8.0.0-r4源码目录结构详解

    Android的移植按如下流程: (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来. (2)正确挂载文件系统,确保内核启动参数和 android 源代码 syste ...

  7. android 系统源码调试 局部变量值_如何方便快速的整编Android 9.0系统源码?

    点击上方"刘望舒",选择"星标" 多点在看,就是真爱! 作者 :  刘望舒  |  来源 :刘望舒的博客地址:http://liuwangshu.cn/fram ...

  8. android串口通信——身份证识别器

    android串口通信身份证识别器 一身份证识别器基础 调用身份证识别器的步骤 波特率 基本指令 身份证信息结构 文字结构说明 民族代码对照表 性别代码对照表 二身份证的读取 读取的方法调用 身份证的 ...

  9. modbus协议使用【android串口通信】

    modbus协议使用[android串口通信] 本文的目的是android端与上位机之间使用modbus协议进行串口通信.通过串口与其他设备进行通信,传递数据.可以理解为电脑和键盘.鼠标通信. 关于m ...

最新文章

  1. imagick API 中文说明
  2. binary_crossentropy(二元交叉熵)的定义
  3. C#快速整理代码格式
  4. 第一章 TestNG框架自动化简述
  5. CentOS 5.5-yum安装配置LNMP
  6. openOCD安装 极简教程
  7. python turtle画房子详细解释_[宜配屋]听图阁
  8. Unity3D 物体运动小游戏后续
  9. CompositeUI Demo BankBranchWorkbench
  10. 多项式加法c语言编程_到底学哪一门编程语言
  11. C语言之——文件操作模式
  12. 我爱生煎包!--上海生煎
  13. NT驱动程序和WDM驱动程序的区别
  14. 图片像素低,图片模糊怎么变清晰?
  15. OceanBase使用 OBD 自动化部署多节点集群
  16. 浏览器崩溃原因大集合
  17. 一顿操作猛如虎,3000 行代码重构成 15 !
  18. VirtualBox复制虚拟机(同电脑、跨电脑)
  19. [转载]李开复:什么是领导力
  20. 测试用例(功能用例)——登录、首页、个人信息

热门文章

  1. ROS机器人程序设计(原书第2版)2.3 理解ROS开源社区级
  2. 【Android】关于参数的传递问题
  3. 游戏提高性能 游戏降帧处理
  4. 软考复习之路—组成原理
  5. 系统管理员节日 网民的感恩日
  6. 【狂神说】分析前后端分离开源项目?
  7. mysql语法题_mysql数据库题语法练习
  8. 测绘技术设计规定最新版_测绘技术设计规定
  9. java web开发学习手册_Java 人必备学习手册开发下载!
  10. innerHTML和value的区别