关于安卓设备上使用串口,谷歌官方在github上有提供代码实例,里面有JNI的代码和串口API的java文件,工程的地址如下: https://github.com/cepr/android-serialport-api
今天,分享给大家,我自己用SerialPort实现串口开发攻略。先分享项目,该项目通过串口实现了对Nest空调的,并且实现根据环境温度自动调节温度。 Github传送门 — — SerialPortProject
网上有很多SerialPort的文章,一部分对环境需要NDK并且自己利用google的serialport构建。这里我采用了一位大哥的项目,直接导入so文件即可。原文地址忘记了,相当抱歉。
setp1
引入so文件和google的SerialPort包,这里需要注意的是这里的包名必须是wits.serialport
。不同的so文件可能会有差异,我这里的so文件必须是这个包名,这是C文件里的代码决定的。
setp2
引入这两个工具类在你里包的
引入读写权限android.permission.READ_PHONE_STATE
和android.permission.WRITE_EXTERNAL_STORAGE
到此我们需要的配置就完成了,我们可以开始开发了。下面我们来分析一下SerialPort和SerialPortUtil
初始化串口----》openSerialPort
openSerialPort
这个方法有一个需要注意的,首先是参数,参数一是串口地址,可以自己看你串口插入点的信息直接写死,参数二是波特率,需要与设备对应匹配(如果设备有要求),例如笔者接的环境探测器,就需要匹配9600。
接收串口回执的数据 ----》 reciveMsg
reciveMsg.png
接收消息自然而然是放在线程里循环执行的。当执行到inputStream.read(readData)
方法的时候,会进入等待状态,直到串口回执数据时继续执行。
可以看到这里有一个休眠500毫秒的操作,意义在哪里呢?这个很重要,因为串口回执数据例如“010304f3”,如果不休眠会按偶数个拆分成数个组发送回来,而休眠500毫秒后能够只分为“01”和“0304f3”甚至一次性全部返回,这个是有偶然性的,笔者说的有点饶,各位实践一下就能明白了。
最后我们接受到的数据是一个又byte数组转化的16进制字符串,笔者是用Handler发送出去的。
发送数据给串口----》 sendMsg
sendMsg.png
这个方法唯一需要注意的是,参数是16进制的字符串,在发送前会转化成byte数组