先說我的應用場景,一塊帶串口的android板子跟一個外設通過串口直接通信,控制這個外設的啟停。如圖1(公司規定不能透露太多,只拍了一部分)
開發必備:
1、開源項目
現在關于android串口通信都是根據Google提供的開源項目在實現。
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 顧名思義這個是讀取數據的線程
三、關閉串口
至此 所有的流程都走完了,基本功能也都實現了。祝各位一切順利....