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