网站开发服务费记账,山东建设厅科技处网站,什么叫做网站维护,wordpress 店铺插件1、SerialPortHelper「Android串口通信」介绍原项目地址https://github.com/freyskill/SerialPortHelperAndroid串口通讯助手可以用于需要使用串口通信的Android外设#xff0c;该库有如下特点#xff1a;1、串口通信部分使用C实现#xff0c;在笔者接触的部分设备上实测该库有如下特点1、串口通信部分使用C实现在笔者接触的部分设备上实测使用C实现与Google官方提供的Demo的方式要快2、支持且必须设置串口接收最大数据长度初始化库时填入该参数这样设置的原因是考虑在实际使用中规定的串口通信协议格式一般会固定有最大长度方便对数据进行处理3、支持命令一发一收通过对串口的读写线程进行同步控制命令会先加入到队列然后依次发送和接收前提需要设置超时时间以及超时处理参考下面第4、5点4、支持超时设置设置超时时间后如果命令在设置的时间内未反馈则会根据设置的操作进行重发或退出该命令5、支持超时重发可以N次重发具体按需设置与退出退出会调用接收回调的 onComplete 方法。2、运行apk演示使用该库简单实现的串口调试助手工具原来作者编译的版本有点问题点击发送的时候会死掉我重新修改了一份大家在使用的时候如果有什么问题可以提出来。使用界面串口apk使用界面数据收发界面3、Apk 下载地址APK下载-SerialPortHelperV1.0.1-20201225.apkhttps://github.com/freyskill/SerialPortHelper/blob/master/SerialPortHelperV1.0.1.apk如果github下载比较慢可以关注公众号「嵌入式Linux」,回复「serial」获取下载链接。4、软件接入方式Step 1. Add the JitPack repository to your build fileAdd it in your root build.gradle at the end of repositories:allprojects {repositories {...maven { url https://www.jitpack.io }}
}
Step 2. Add the dependencydependencies {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语言我的知识小密圈