Android串口开发与SerialPort工具封装

Posted QIANDXX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android串口开发与SerialPort工具封装相关的知识,希望对你有一定的参考价值。

android串口开发之SerialPort工具封装

一. 什么是串口

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

串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。

在Android开发这一块来说,串口通信应用越来越广泛,得益于物联网的发展,很多定制设置在Android系统上外挂设备,如何与外挂设备进行双方通信,就需要串口来进行。

其实串口的通信和蓝牙的通信有很多相似的地方,数据帧的处理相似,只是连接通信的方式不同了而已,蓝牙的通信可以使用Android Api的方式,而串口需要自己编译Ndk,这里把封装的工具类开源出来,希望对大家有帮助。

二. Android如何进行串口通信

在Android的Framwork中是没有相关的Api的,我们想进行串口的相关操作还是得借助于谷歌2012年的老库android-serialport-api。 项目结构如下:
编译NDK为对应的so库,如何使用Java调用想要的方法,想想真令人头秃

网上有很多编译的教程了,如果觉得麻烦的同学可以往下看我的封装库

三. Android串口通信的封装

allprojects 
	repositories 
	     maven  url 'https://jitpack.io' 
	
  

implementation 'com.gitee.newki123456:serial_port_tools:1.0.0'

一句话解决串口通信:

    private lateinit var mSerialPortManager: SerialPortManager
    var cmd = byteArrayOf(-91, 85, 1, -5)  //开启通信的指令

     //具体调用就是2个回调,设置串口,开启指令
     mSerialPortManager = SerialPortManager()
        mSerialPortManager
            .setOnOpenSerialPortListener(object : OnOpenSerialPortListener 
                override fun onFail(paramFile: File?, paramStatus: OnOpenSerialPortListener.Status) 
                    Toast.makeText(mContext,paramStatus.toString(),Toast.LENGTH_SHORT).show()
                

                override fun onSuccess(paramFile: File) 

                
            )
                //设置串口的数据通信回调
            .setOnSerialPortDataListener(object : OnSerialPortDataListener 
                override fun onDataReceived(paramAnonymousArrayOfByte: ByteArray) 
                    //解析返回的数据转换为摄氏度
                    val i = paramAnonymousArrayOfByte[3]
                    val f = (paramAnonymousArrayOfByte[2] + i * 255 + 20) / 100.0f
                    val message = Message.obtain()
                    message.obj = java.lang.Float.valueOf(f)
                    message.what = 1
                    mHandler.sendMessage(message)
                

                override fun onDataSent(paramArrayOfByte: ByteArray?) 

                
            )
            .openSerialPort(File("dev/ttyS3"), 115000)  //打开指定串口

        mSerialPortManager.beginBytes(cmd)  //开启读取


重点概念:
串口路径 波特率 输入指定的指令
只要能通信了之后,处理数据的逻辑其实就和蓝牙的数据帧处理很像啦。

项目介绍:
自定义Android设备,支持人脸识别打卡并外挂的红外温度传感器,我们再识别比对到人脸成功之后需要通过串口拿到温度计的温度展示出来。

以上是关于Android串口开发与SerialPort工具封装的主要内容,如果未能解决你的问题,请参考以下文章

Android开发之串口通信:AndroidSerialPort

Android UART 串口通信

SerialPort类的用法与示例

Node.js笔记:SerialPort(串口)模块使用(基于10.x.x)

Android串口通讯

C#串口收到的数据和串口调试工具不一样