先說(shuō)我的應(yīng)用場(chǎng)景蚌成,一塊帶串口的android板子跟一個(gè)外設(shè)通過(guò)串口直接通信,控制這個(gè)外設(shè)的啟停凛捏。如圖1(公司規(guī)定不能透露太多担忧,只拍了一部分)
開發(fā)必備:
1、開源項(xiàng)目
現(xiàn)在關(guān)于android串口通信都是根據(jù)Google提供的開源項(xiàng)目在實(shí)現(xiàn)坯癣。
Google開源項(xiàng)目地址? ? ??
2瓶盛、了解串口通信流程。
? 流程:打開串口(需要配置串口號(hào)和比特率) ---> 寫串口 ---> 讀串口 ---> 關(guān)閉串口
? 注意:1)串口號(hào)來(lái)源:看你的串口線插在哪個(gè)串口上,以圖1為例惩猫,如果接的是com1口窒所,那么串口號(hào)我這邊選擇的/dev/ttys0,一次類推。/dev/ttys0是通過(guò)ADReaderInterface.GetSerialPortPath()搜索到的串口路徑帆锋。
? ? ? ? ? 2)比特率來(lái)源:接入設(shè)備的波特率有廠商指定。直接跟設(shè)備商要就行禽额。
3锯厢、對(duì)jni有一定的了解
?關(guān)于Android 串口的使用google并沒(méi)有向上層開源,所以會(huì)用到j(luò)ni去調(diào)用C層的
jni的調(diào)用 網(wǎng)上已經(jīng)很多博客都有講解脯倒,自行去百度吧实辑。
項(xiàng)目結(jié)構(gòu)
注:加入jni文件夾,libs文件和src中加入android_serialport_api文件夾(包名一定是這個(gè)藻丢,不能改)
接下來(lái)就是coding了剪撬,按流程來(lái)。
一悠反、配置串口號(hào)和比特率残黑,打開串口
1、我這邊是 直接搜索所有的串口號(hào)地址加到spinner中斋否,用戶根據(jù)需求自己選擇梨水。
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 這個(gè)方法在上面復(fù)制進(jìn)來(lái)的src下的SerialPort.java文件下茵臭。參數(shù)含義見下圖
二疫诽、讀寫數(shù)據(jù)
1、寫數(shù)據(jù)(向串口設(shè)備發(fā)送命令)
把字符串轉(zhuǎn)成字節(jié)數(shù)組旦委。
2奇徒、讀數(shù)據(jù)(串口設(shè)備向android設(shè)備發(fā)送數(shù)據(jù))
IDateDeal是一個(gè)自定義接收數(shù)據(jù)的接口
private interface IDataDeal {
? ? ? ? public void onDataReceived(byte[] buffer, int size);
}
ReadThread 顧名思義這個(gè)是讀取數(shù)據(jù)的線程
三、關(guān)閉串口
至此 所有的流程都走完了缨硝,基本功能也都實(shí)現(xiàn)了摩钙。祝各位一切順利....