最近根据项目需求,会用安卓上层应用直接与主板打交道,统称硬件吧,支配主板开锁,打印等功能,网上也有很多资料,但是我可以说,没有一个可以真正能用的,所以花了很多时间专门研究了串口开打,下图是主板示意:
安卓工业主板
串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。不管是windows、linux、或是android操作系统,串口编程无非是以下几步:
-
打开串口
-
串口配置
-
串口操作(读写)
-
关闭串口
这个项目基于谷歌的开源项目android-serialport-api,是Android使用jni直接进行串口设备的读写的一个开源库,所以你不必担心NDK的门槛,项目就不过多介绍了,今天主要来介绍一下如何使用这个开源项目进行串口操作。
一、android-serialport-api简单介绍
android-serialport-api下载:https://github.com/cepr/android-serialport-api
android-serialport-api下有两个主要的类以及jni类和.so文件:
二、引入android-serialport-api
以androidStudio为例,用eclipse的朋友直接导入即可,源码就是eclipse版的
(1)、新建android项目,建包android-serialport-api,将调用c语言写成的动态链接库的java类,也就是第一步中介绍的两个类放入到src文件夹下的android_serialport_api包下,这里一定要将包名命名成这个,因为对JNI有一定了解的人就会知道,在写c语言链接库时候,函数的命名是和调用它的类所在的包名相关的,一旦包名与链接库中函数的命名不相符,就不能调用链接库的函数。jin
(2)、在src/main下新建jni、jinLibs目录,分别拷贝相关源码到相应的目录下,直接给图:
记得重新编译一下项目Bulid/Make Project,到这里,开源库基本上引入就结束了。
三、串口操作
(1)、串口的硬件地址以及波特率这两个参数是必须的,我新建了一个SerialPortUtil类,采用的单例模式,下图为开串口
(2)、发送数据给串口
(3)、接受串口返回数据
注意:
mInputStream.read(buffer)
这一句会阻塞主线程,假如没有数据返回,程序就会直接崩掉,我为了演示没有写线程操作,真正的应该是开启一个子线程来循环读取数据。
(4)、串口的关闭
好了,基本上流程就是这些了,至于如何处理以及优化,就看具体的需求了。