Android串口通讯

心已赠人 2023-06-08 03:07 81阅读 0赞

说明

AndroidSerialPort 用于串口通信,由 Google 官方串口通信库迁移而来,并在此基础上做了扩展。

AndroidSerialPort 支持设置 su 路径、串口路径、波特率、校验位、数据位、停止位。

更多相关信息,请查看 Android 串口通信

Demo

通过这个串口库,做了一个串口调试工具。 SerialPort

下载apk

使用

  1. 在 modul 下的 build.gradle 中添加

    1. implementation "com.deemons.serialport:serialport:1.2.0" //替换版本号
  2. 打开串口

    1. SerialPort mSerialPort = new SerialPort("/dev/ttyS1", 9600);
    2. //获取串口文件的输入输出流,以便数据的收发
    3. InputStream is = mSerialPort.getInputStream();
    4. OutputStream os = mSerialPort.getOutputStream();

API

设置 su 路径

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

因此需要 root 权限来操作串口文件,默认的 su 文件路径在 /system/bin/su ,你可以重新设置 su 的文件路径,以便获取 root 权限,例如,设置路径/system/xbin/su

  1. //需要在打开串口前调用
  2. SerialPort.setSuPath("/system/xbin/su");

查看串口设备列表

Android 串口文件都在 /proc/tty/drivers 目录下,因此可以获取所有串口文件。

  1. SerialPortFinder serialPortFinder = new SerialPortFinder();
  2. String[] allDevices = serialPortFinder.getAllDevices();
  3. String[] allDevicesPath = serialPortFinder.getAllDevicesPath();

打开串口

如果你需要设置更多参数,请使用以下构造函数

  1. /**
  2. * 打开串口
  3. * @param device 串口设备文件
  4. * @param baudRate 波特率
  5. * @param parity 奇偶校验,0 None(默认); 1 Odd; 2 Even
  6. * @param dataBits 数据位,5 ~ 8 (默认8)
  7. * @param stopBit 停止位,1 或 2 (默认 1)
  8. * @param flags 标记 0(默认)
  9. */
  10. public SerialPort(File device, int baudRate, int parity, int dataBits, int stopBit, int flags)

检验位一般默认是0(NONE),数据位一般默认为8,停止位默认为1。

读写串口

读数据

  1. // 配合 Rxjava2 ,处理异常更方便
  2. mReceiveDisposable = Flowable.create((FlowableOnSubscribe<byte[]>) emitter -> {
  3. InputStream is = mSerialPort.getInputStream();
  4. int available;
  5. int first;
  6. while (!isInterrupted && mSerialPort != null
  7. && is != null && (first = is.read()) != -1) {
  8. do {
  9. available = is.available();
  10. SystemClock.sleep(1);
  11. } while (available != is.available());
  12. byte[] bytes = new byte[is.available()+1];
  13. is.read(bytes,1,is.available());
  14. bytes[0] = (byte) (first & 0xFF);
  15. emitter.onNext(bytes);
  16. }
  17. close();
  18. }, BackpressureStrategy.MISSING)

写数据

  1. //获取输出流
  2. OutputStream os = mSerialPort.getOutputStream();
  3. os.write(ByteUtils.hexStringToBytes("CCAA0300"));

关闭串口

  1. mSerialPort.close();

发表评论

表情:
评论列表 (有 0 条评论,81人围观)

还没有评论,来说两句吧...

相关阅读

    相关 串口通讯介绍

    串口通讯的物理连接和传输协议,是学习单片机串口编程的基础。 本文参照《深入浅出玩转51单片机》和《零死角玩转STM32》书籍,对通讯以及串口一些基本概念做了详解。 1. 串

    相关 51单片机系列--串口通讯

    串行通信和并行通信 串行通信和并行通信都是一种通信传输方式,都适用于计算机与计算机、计算机与单片机之间的数据通信,在传输中存在相互转换的关系。但是两者在使用上还是有着不同

    相关 java串口通讯实例

    现在一般的电脑都没有串口端口的了,所以还是用虚拟的串口来做测试吧。 我们用 VSPD(Virtual Serial Port Driver) 这个软件建立两个虚拟串口,COM

    相关 串口通讯之 CRC校验

    一、CRC16简介       循环冗余码CRC检验技术广泛应用于测控及通信领域。CRC计算可以靠专用的硬件来实现,但是对于低成本的微控制器系统,在没有硬件支持下实现CRC