天下武功,唯快不破

有多快?只需要一招!引入第三方库就可以快速开发和使用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串口相关推荐

  1. Android串口通信apk源码

    1.SerialPortHelper「Android串口通信」介绍 原项目地址 https://github.com/freyskill/SerialPortHelper Android串口通讯助手可 ...

  2. 好用的android 串口驱动

    Android 串口调试_串口转usb需要驱动吗本文背景:是真的不喜欢脑子记这些引脚,串口节点,动不动忘记了.1.首先记录一下硬件引脚--tty节点对应关系2.找一组/dev/ttyHSL1,先测试一 ...

  3. putty串口打开没反应_如何使用树莓派快速搭建一个串口数据记录器?

    在最近发现同事的某些项目临时增加了一些需求,把测出的能见度数据保存在存储介质中,并且可以随时远程查阅.如果在项目时间与成本允许的情况下,我们会选择在PCB中增加SD卡槽以及以太网接口,用于存储数据和联 ...

  4. adb shell 调试 Android 串口

    Android手机上很多外设是串口连接到AP的,如modem,gps.为了调试这些串口,通常需要将它们飞线接出来,用pc的串口连接调试.这样比较麻烦. 在adb  shell里是可以直接调试串口的,就 ...

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

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

  6. 快速接入 Android BLE 开发的基础框架

    代码地址如下: http://www.demodashi.com/demo/12092.html * Android BLE基础操作框架,基于回调,操作简单.包含扫描.多连接.广播包解析.服务读写及通 ...

  7. 串口通信工具android,Android串口通信工具

    Android串口通信简单封装,可以用于和连接串口的硬件通信或者进行硬件调试 集成方法: Step 1. Add the JitPack repository to your build file / ...

  8. android 串口开发第二篇:利用jni实现android和串口通信

    一:串口通信简介 由于串口开发涉及到jni,所以开发环境需要支持ndk开发,如果未配置ndk配置的朋友,或者对jni不熟悉的朋友,请查看上一篇文章,android 串口开发第一篇:搭建ndk开发环境以 ...

  9. 五步快速安装android模拟器

    有时候我们不得不面临一些离开自己电脑,那么怎样才能在别人的电脑上快速安装android的模拟器呢,下面记载着自己快速安装android模拟器的步骤 一..首先准备的内容有 .jdk1.6        ...

最新文章

  1. 2021年大数据Spark(三十一):Spark On Hive
  2. php 获取下拉框选中的文本,jQuery实现select下拉框获取当前选中的文本
  3. scanf函数使用遇到的问题
  4. uniapp一键登陆(php)
  5. Django中级篇之模板语言
  6. 野火linux底板设计,野火STM32F767套件(底板+核心板)
  7. python实现目标识别_Python10行代码实现目标检测
  8. redis在php上使用教程,Redis在PHP的一些使用方法
  9. HTML演练 0917 需求说明 我喜欢的影视剧
  10. 理想更新“货车并线预警”遭用户吐槽 李想:仍在优化
  11. jmeter 配置 slave 代理压测机
  12. 一步一坑学android之禁用Appt2(andriod studio3.0)
  13. FFmpeg之yuv裁剪(二十一)
  14. Messes in Reading Source Coding of SSD
  15. 利用socket.io构建一个聊天室
  16. PPT设置自动保存时间 mac_第17期分享:如何控制PPT演讲汇报时间?
  17. AndroidStudio制作登录和注册功能的实现,界面的布局介绍
  18. 一键免费升级Windows 10
  19. 《微积分:一元函数微分学》——费马定理
  20. sdk manger

热门文章

  1. Stm32 学习笔记(1)我所使用的板子
  2. 国脚冯潇霆被广州恒大下放预备队
  3. feed流和瀑布流_推荐系统之Feed流UI交互设计
  4. 【PAT1012B】数字分类
  5. PDF板式文档转OFD板式文档
  6. 农村小伙开洗车店,从身无分文,到年挣370万,到底经历了什么?
  7. 查看android模拟器ip地址
  8. python 爬取数据intraday_使用Python检索Fitbit心率数据
  9. 组织QClub大连站活动的感受
  10. 图片验证码识别-自动登录工具开发