Android串口操作库:EZ-SerialPort

EZ-SerialPort

EZ-SerialPort是基于Google android-serialport-api 修改与扩展的Android串口操作库。

EZ-SerialPort简化了串口的配置与读写操作,支持了多串口通道的操作,支持了多页面串口数据的同时读取功能。

Demo效果如下:

Gradle 依赖

在app的build.gradle 下添加:

添加依赖如下:

1
2
3
dependencies {
compile 'cn.shorr:ez-serialport:0.1.0'
}

添加适合的CPU平台ABI,如:

1
2
3
4
5
6
7
defaultConfig {
...
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86"
}
}

不配置将默认为所有平台的ABI。

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//1.开始串口连接
private void startSerialPortConnect() {
//配置串口参数
serialPortUtil = new SerialPortUtil(this,
new SerialPortConfig("/dev/ttyMT1", 115200), //串口0
new SerialPortConfig("/dev/ttyMT2", 38400) //串口1
);
//设置为调试模式,打印收发数据
serialPortUtil.setDebug(true);
//绑定串口服务
serialPortUtil.bindService();
//串口0数据读取监听(可在不同Activity中同时设置监听)
serial0Read = new SerialRead(this);
serial0Read.registerListener(0/*默认为0,此参数可省略*/, new Serial0ReadListener());
//串口1数据读取监听(可在不同Activity中同时设置监听)
serial1Read = new SerialRead(this);
serial1Read.registerListener(1, new Serial1ReadListener());
}
//2.设置串口读取监听
private class Serial0ReadListener implements SerialRead.ReadDataListener {
@Override
public void onReadData(byte[] data) {
}
}
//3.串口发送数据
SerialWrite.sendData(Context context, int port, byte[] data);
//如:串口0发送数据
SerialWrite.sendData(this, 0/*默认为0,此参数可省略*/, content.getBytes("GBK"));
//如:串口1发送数据
SerialWrite.sendData(this, 1, content.getBytes("GBK"));
//4.停止串口连接
private void stopSerialPortConnect() {
serial0Read.unRegisterListener();
serial1Read.unRegisterListener();
serialPortUtil.unBindService();
}
//5.获取设备所有的串口信息
SerialPortFinder serialPortFinder = new SerialPortFinder();
String[] devices = serialPortFinder.getAllDevicesPath();

开发建议

由于Android各硬件平台与驱动的差异性,在接收串口数据,即在通过监听获取byte[]字节数组时,一条完整的指令数据有可能被无规律分隔为多条byte[]字节数组。所以此时,需要将多条byte[]字节数组拼接为一条完整的指令,以便于指令的解析工作。

所以,在串口数据格式制定的初期一定要做好相关工作。比如,可以在数据格式中指定开始标记数据长度结束标记等,这样可以方便数据的拼接以及校验等工作。

Github

https://github.com/shorr/EZ-SerialPort

0%