快速使用Android串口
天下武功,唯快不破
有多快?只需要一招!引入第三方库就可以快速开发和使用Android串口,毕竟我们站在了巨人的肩膀上。
第一步导包,也就只有这一步了
// 在项目根目录的build.gradle文件中添加:
allprojects {repositories {...mavenCentral()}
}
// 在项目Module下的build.gradle文件中添加:
dependencies {implementation 'io.github.xmaihh:serialport:2.1.1'
}
这个库基本可以满足所有Android 串口开发和使用。不管你对接的设备是私有协议还是标准的工业协议,无非就是数据位的不同,奇偶校验的不同或者停止位的不同,而这个库都可以支持,并且还支持流控。
到这里,基本就只剩API的调用来完成相应的业务要求了。
但是对于好多小白来说,并不知道什么是串口,不知道串口是如何跟外面设备通讯的。
什么是串口?
串口叫做串行接口,也称串行通信接口,也可以叫做COM口,按电气标准及协议来分包括RS-232-C、RS-422、RS485、USB等。串行接口是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信,从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。
对于Android来说,串口大概是长这样的
对于不同的厂家,其外形接口可能不一致,但是对于我们来说,并无大碍,因为不管它怎么变化,只是针对硬件接线的问题,相对我们做上层应用,没什么影响的。我们只需要关注数据的发送和收到数据如何解析就可以了。
串口的通讯方式
- 单工模式:只支持数据在一个方向上传输;在同一时间只有一方能接收或发送信息,不能实现双向通信。一般用在只向一个方向传输数据的场合,比如跟打印机通讯。
- 半双工模式:如果只有一条通讯线,那么它既可以发送数据也可以接收数据,但不能同时进行发送和接收。如果使用两条通讯线,数据可以在两个方向传输,但是在同一时间只可以有一方接受或发送信息,实际上是一种切换方向的单工通讯。比如RS485-2W通讯就是采用这种模式。
- 全双工模式:数据可以同时往两个方向传输,相当于两个单工通讯的结合,它要求发送设备和接收设备都有独立的发送和接收能力,在同一时间可以同时进行发送和接收数据,实现双向通信,数据传输效率比较高。比如RS-232通讯就是采用这种模式。
串口通讯是一个字符一个字符地传输,每个字符一位一位地传输,总是以“起始位”开始,以“停止位”结束,字符之间没有固定的时间间隔要求。
实际传输时每一位的信号宽度与波特率有关,波特率越高,宽度越小,在进行传输之前,双方一定要使用同一个波特率。
好了,进入正题
到这里,我们需要注意一下,当我们需要跟外面设备进行通讯时,我们要考虑清楚,到底要使用那个COM口,每个COM口在Android系统上都有一个软驱动与之对应的。
下面这个小栗子用的是Android板上的485口(“dev/ttyS4”),波特率设为9600,无校验,数据位为8,停止位为1。
运行效果显示:用PC端模拟外接设备,Android 485口与它进行通讯测试。
serialport库,直接上代码
//初始化SerialHelper对象,设定串口名称和波特率serialHelper = new SerialHelper(Const.SPORT_NAME, Const.BAUD_RATE) {@Overrideprotected void onDataReceived(ComBean paramComBean) {//根据自己的业务自行处理接收的数据......}};/** 默认的BaseStickPackageHelper将接收的数据扩展成64位,一般用不到这么多位* 我这里重新设定一个自适应数据位数的*/serialHelper.setStickPackageHelper(new AbsStickPackageHelper() {@Overridepublic byte[] execute(InputStream is) {try {int available = is.available();if (available > 0) {byte[] buffer = new byte[available];int size = is.read(buffer);if (size > 0) {return buffer;}} else {SystemClock.sleep(50);}} catch (IOException e) {e.printStackTrace();}return null;}});
上面代码,在创建serialHelper之时,就已经传入了一个onDataReceived()方法,用来监听串口数据接收,但是如要打开串口才能开启监听。
SerialHelper创建完成,打开串口
serialHelper.open();
如果需要设置其他的属性,比如设置奇偶检验,需要在执行open()之前设定。
serialHelper.setPort(String sPort); //设置串口
serialHelper.setBaudRate(int iBaud); //设置波特率
serialHelper.setStopBits(int stopBits); //设置停止位
serialHelper.setDataBits(int dataBits); //设置数据位
serialHelper.setParity(int parity); //设置校验位
serialHelper.setFlowCon(int flowcon); //设置流控
发送数据
serialHelper.send(byte[] bOutArray); // 发送byte[]
serialHelper.sendHex(String sHex); // 发送Hex
serialHelper.sendTxt(String sTxt); // 发送ASCII
关闭串口
serialHelper.close();
上面小栗子的全部 源代码传送门。
如果你需要做粘包处理,可以参考下面大佬的教程,也是这个库的作者。
https://github.com/xmaihh/Android-Serialport
快速使用Android串口相关推荐
- Android串口通信apk源码
1.SerialPortHelper「Android串口通信」介绍 原项目地址 https://github.com/freyskill/SerialPortHelper Android串口通讯助手可 ...
- 好用的android 串口驱动
Android 串口调试_串口转usb需要驱动吗本文背景:是真的不喜欢脑子记这些引脚,串口节点,动不动忘记了.1.首先记录一下硬件引脚--tty节点对应关系2.找一组/dev/ttyHSL1,先测试一 ...
- putty串口打开没反应_如何使用树莓派快速搭建一个串口数据记录器?
在最近发现同事的某些项目临时增加了一些需求,把测出的能见度数据保存在存储介质中,并且可以随时远程查阅.如果在项目时间与成本允许的情况下,我们会选择在PCB中增加SD卡槽以及以太网接口,用于存储数据和联 ...
- adb shell 调试 Android 串口
Android手机上很多外设是串口连接到AP的,如modem,gps.为了调试这些串口,通常需要将它们飞线接出来,用pc的串口连接调试.这样比较麻烦. 在adb shell里是可以直接调试串口的,就 ...
- Android串口通信实例分析【附源码】
Android 串口通信实例分析,用的时开源的android-serialport-api 这个是用android ndk实现的串口通信,我把他做了一个简化,适合于一般的程序的串口通信移植,欢迎拍砖- ...
- 快速接入 Android BLE 开发的基础框架
代码地址如下: http://www.demodashi.com/demo/12092.html * Android BLE基础操作框架,基于回调,操作简单.包含扫描.多连接.广播包解析.服务读写及通 ...
- 串口通信工具android,Android串口通信工具
Android串口通信简单封装,可以用于和连接串口的硬件通信或者进行硬件调试 集成方法: Step 1. Add the JitPack repository to your build file / ...
- android 串口开发第二篇:利用jni实现android和串口通信
一:串口通信简介 由于串口开发涉及到jni,所以开发环境需要支持ndk开发,如果未配置ndk配置的朋友,或者对jni不熟悉的朋友,请查看上一篇文章,android 串口开发第一篇:搭建ndk开发环境以 ...
- 五步快速安装android模拟器
有时候我们不得不面临一些离开自己电脑,那么怎样才能在别人的电脑上快速安装android的模拟器呢,下面记载着自己快速安装android模拟器的步骤 一..首先准备的内容有 .jdk1.6 ...
最新文章
- 2021年大数据Spark(三十一):Spark On Hive
- php 获取下拉框选中的文本,jQuery实现select下拉框获取当前选中的文本
- scanf函数使用遇到的问题
- uniapp一键登陆(php)
- Django中级篇之模板语言
- 野火linux底板设计,野火STM32F767套件(底板+核心板)
- python实现目标识别_Python10行代码实现目标检测
- redis在php上使用教程,Redis在PHP的一些使用方法
- HTML演练 0917 需求说明 我喜欢的影视剧
- 理想更新“货车并线预警”遭用户吐槽 李想:仍在优化
- jmeter 配置 slave 代理压测机
- 一步一坑学android之禁用Appt2(andriod studio3.0)
- FFmpeg之yuv裁剪(二十一)
- Messes in Reading Source Coding of SSD
- 利用socket.io构建一个聊天室
- PPT设置自动保存时间 mac_第17期分享:如何控制PPT演讲汇报时间?
- AndroidStudio制作登录和注册功能的实现,界面的布局介绍
- 一键免费升级Windows 10
- 《微积分:一元函数微分学》——费马定理
- sdk manger