Android 串口通信

作者: Deemons | 来源:发表于2018-06-03 14:11 被阅读3079次
    annie-spratt-648653-unsplash_meitu_1

    前段时间,接触了一个智能硬件的项目,在定制化的平板上运行 Android 系统,并通过串口和蓝牙与其他设备进行通讯。
    担心时间长了,就容易忘记,因此,整理了关于 Android 串口通信的知识。

    什么是串口通信

    先来一段 百度百科的解释

    串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。

    串口通信(Serial Communications)是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。

    串口通信是计算机中非常常见的通信方式,比如一些有线鼠标、键盘、打印机等都是通过串口进行通信的。

    串口的通信一般使用3根线完成,分别是地线、发送线(tx)、接收线(rx)。

    串口的参数

    串口中有五个重要的参数:串口设备名、波特率、奇偶校验位、数据位、停止位。

    • 设备名称:串口的名称。
    • 波特率:传输速率的参数,波特率和传输距离成反比。
    • 校验位:在串口通信中一种简单的检错方式,有四种检错方式:偶、奇、高和低,允许无校验位。
    • 数据位:通信中实际数据位的参数
    • 停止位:用于表示单个包的最后一位。

    其中检验位一般默认位NONE,数据位一般默认为8,停止位默认为1,校验位是为了减少误差的会根据奇、偶进行补位操作。

    对于两个进行通信的端口,这些参数必须匹配,否则两端不能正常收发。

    Android 串口通信

    Android 主板在与其它硬件进行串口通信时,串口作为底层实现,Android 系统把设备作为一个文件,与其他设备进行串口通信就相当于读写此文件。

    所以,串口通信其实就是对系统根目录下 /proc/tty/drivers 文件进行流的读写,因此,串口读写需要 Android 系统 Root 权限,不必担心,一般开发版的系统都会 Root 。

    在应用层进行串口通信之前,千万要检测开发板的串口是否调通,不要背锅哦~(不要问我为什么知道这坑)

    检测的方式可以选择 adb 或者直接下载 Android 调试工具,进行调试,推荐使用工具,简单方便。

    那么先说说 adb 方式的检测。

    检测

    检测的原理就是,将 开发板串口线 连接上 电脑 (PC),然后在 PC 和开发板 上,相互进行串口数据的读写。如果两边都能顺利收发数据,那么说明开发板的串口是畅通的。

    准备

    Windows:友善串口调试工具

    Mac OS 上的串口调试工具不清楚

    连接

    1. 串口线 连接开发板 和 PC,然后在串口调试工具中,打开对应位置的端口。如果提示失败,就要检查串口线的端口号是否正确。

    2. 用数据线连接开发板至 PC,用 adb 命令打开 Android 系统对应的串口文件。

      以 root 权限进入系统,

      adb shell
      su
      

      然后,更改串口文件ttyS3的读写权限,

      chmod 777 /dev/ttyS3
      

      最后,写入信息 1111 到串口文件ttyS3

      echo 1111 > /dev/ttyS3
      

      观察 PC 上的串口调试工具,如果 PC 上能收到信息,说明调通了,那么就可以进行应用开发了。

    官方串口工具

    Android 应用层如果操作串口,需要用到 JNI ,谷歌官方早已经开源了相关工具库:android-serialport-api

    官方地址需要翻墙,也可以直接搜索这个工具,下载体验 Dmo。

    谷歌官方的这个库太过陈旧,使用也麻烦,而且谷歌官方串口库的设置,仅支持串口名称及波特率,有时候并不能够满足需求。

    基于以上原因,因此利用Android studio 3.1上 CMake,将官方串口库移植过来 ,并对其进行适当扩展,现支持如下配置:

    • su 路径
    • 串口路径
    • 波特率
    • 校验位
    • 数据位
    • 停止位。

    为了方便使用,此库已经发布到 JCenter 上,以后可以非常容易的集成它。

    同时,使用这个库做了一个Android 串口调试工具,方便调试。

    SerialPort

    apk 下载
    源码地址:AndroidSerialPort

    参考

    Android串口通信(Android Studio)

    Android串口通信:抱歉,学会它真的可以为所欲为

    让android_serialport_api支持奇偶校验、数据位、停止位等参数

    相关文章

      网友评论

      • 小鱼儿他老汉:如果只能够基于image,无权限修改JNI之类的,是否就没有办法玩了?
      • alwaysGo:你好,能推荐一个可以调试串口通信的安卓开发板链接吗?谢谢
        alwaysGo:@lemonCode 好的,谢谢大佬~
        lemonCode:@alwaysGo 网上搜索ordroid的板子就有,这个是开源的,国内的大多数都是代购,这个板子的性能非常不错,可以拿来玩一玩

      本文标题:Android 串口通信

      本文链接:https://www.haomeiwen.com/subject/weejsftx.html