最近根据项目的需要,会使用Android上层应用直接与主板打交道,统称为硬件。它控制主板的功能,例如解锁和打印。网上也有很多资料,但是我可以说没有一个是真的可以用的,所以花了很多时间。专门研究了串口打开,下图是主板示意图:
安卓工业主板
串口通信的概念很简单,串口按位发送和接收字节。虽然比逐字节并行通信慢,但串行端口可以使用一根线发送数据,同时使用另一根线接收数据。它很简单,可以实现远距离通信。无论是windows、linux,还是android操作系统,串口编程无非就是以下几个步骤:
打开串口
串口配置
串口操作(读写)
关闭串口
本项目基于谷歌的开源项目android-serialport-api,是安卓使用jni直接读写串口设备的开源库,所以不用担心NDK的门槛,所以项目不会过多介绍。今天主要介绍如何使用这个开源项目进行串口操作。
一、android-serialport-api 简介
android-serialport-api 下载:
android-serialport-api 下主要有两个类以及 jni 类和 .so 文件:
二、引入android-serialport-api
以androidStudio为例,可以直接和eclipse朋友一起导入,源码是eclipse版本
(1),新建一个android项目,建一个包android-serialport-api,把调用c语言写的动态链接库的java类用c语言实现串口通信,也就是第一步介绍的两个类,进入src文件夹下的android_serialport_api包,包名一定要命名为this用c语言实现串口通信,因为对JNI有一定了解的人会知道,在写C语言链接库的时候,函数名是跟包名相关的调用它的类,一旦包名与链接库中的函数名不匹配,就无法调用链接库的函数。
(2),在src/main下新建jni和jinLibs目录,将相关源码复制到对应目录,直接给图:
记得重新编译项目 Buid/Make Project。至此,开源库的介绍基本结束。
三、串口操作
(1),串口的硬件地址和波特率是需要的两个参数。我新建了一个SerialPortUtil类,使用的是单例模式。下图是串口打开。
(2),发送数据到串口
(3),接受串口返回的数据
注意:
mInputStream.read(buffer)
这句话会阻塞主线程。如果没有返回数据,程序将直接崩溃。为了演示没有写线程操作,真正的应该是开一个子线程循环读取数据。
(4),关闭串口
嗯,基本上流程就是这些了,至于如何处理和优化,就看具体需求了。
如果您有任何问题,欢迎您与我们交流。
请登录后发表评论
注册
社交帐号登录