先说我的应用场景,一块带串口的android板子跟一个外设通过串口直接通信,控制这个外设的启停。如图1(公司规定不能透露太多,只拍了一部分)
开发必备:
1、开源项目
现在关于android串口通信都是根据Google提供的开源项目在实现。
2、了解串口通信流程。
流程:打开串口(需要配置串口号和比特率) ---> 写串口 ---> 读串口 ---> 关闭串口
注意:1)串口号来源:看你的串口线插在哪个串口上,以图1为例,如果接的是com1口,那么串口号我这边选择的/dev/ttys0,一次类推。/dev/ttys0是通过ADReaderInterface.GetSerialPortPath()搜索到的串口路径。
2)比特率来源:接入设备的波特率有厂商指定。直接跟设备商要就行。
3、对jni有一定的了解
关于Android 串口的使用google并没有向上层开源,所以会用到jni去调用C层的
jni的调用 网上已经很多博客都有讲解,自行去百度吧。
项目结构
注:加入jni文件夹,libs文件和src中加入android_serialport_api文件夹(包名一定是这个,不能改)
接下来就是coding了,按流程来。
一、配置串口号和比特率,打开串口
1、我这边是 直接搜索所有的串口号地址加到spinner中,用户根据需求自己选择。
private static int baudrate = 115200; //波特率
2、打开串口
android_serialport_api.SerialPort serialPortMenSuo = null;
serialPortMenSuo = new android_serialport_api.SerialPort(
new File(sn_mensuo.getSelectedItem().toString()),baudrate,0);
注:android_serialport_api.SerialPort 这个方法在上面复制进来的src下的SerialPort.java文件下。参数含义见下图
二、读写数据
1、写数据(向串口设备发送命令)
把字符串转成字节数组。
2、读数据(串口设备向android设备发送数据)
IDateDeal是一个自定义接收数据的接口
private interface IDataDeal {
public void onDataReceived(byte[] buffer, int size);
}
ReadThread 顾名思义这个是读取数据的线程
三、关闭串口
至此 所有的流程都走完了,基本功能也都实现了。祝各位一切顺利....