Android 串口通信

先說(shuō)我的應(yīng)用場(chǎng)景,一塊帶串口的android板子跟一個(gè)外設(shè)通過(guò)串口直接通信,控制這個(gè)外設(shè)的啟停。如圖1(公司規(guī)定不能透露太多,只拍了一部分


圖1

開(kāi)發(fā)必備:

1、開(kāi)源項(xiàng)目

現(xiàn)在關(guān)于android串口通信都是根據(jù)Google提供的開(kāi)源項(xiàng)目在實(shí)現(xiàn)。

Google開(kāi)源項(xiàng)目地址? ? ??

GitHub下載地址

2、了解串口通信流程。

? 流程:打開(kāi)串口(需要配置串口號(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)有向上層開(kāi)源,所以會(huì)用到j(luò)ni去調(diào)用C層的

jni的調(diào)用 網(wǎng)上已經(jīng)很多博客都有講解,自行去百度吧。

項(xiàng)目結(jié)構(gòu)

圖2

注:加入jni文件夾,libs文件和src中加入android_serialport_api文件夾(包名一定是這個(gè),不能改)

接下來(lái)就是coding了,按流程來(lái)。

一、配置串口號(hào)和比特率,打開(kāi)串口

1、我這邊是 直接搜索所有的串口號(hào)地址加到spinner中,用戶根據(jù)需求自己選擇。

private static int baudrate = 115200; //波特率

圖3

2、打開(kāi)串口

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ù)含義見(jiàn)下圖

圖4

二、讀寫數(shù)據(jù)

1、寫數(shù)據(jù)(向串口設(shè)備發(fā)送命令)

圖5

把字符串轉(zhuǎn)成字節(jié)數(shù)組。

2、讀數(shù)據(jù)(串口設(shè)備向android設(shè)備發(fā)送數(shù)據(jù))

圖6

IDateDeal是一個(gè)自定義接收數(shù)據(jù)的接口

private interface IDataDeal {

? ? ? ? public void onDataReceived(byte[] buffer, int size);

}

ReadThread 顧名思義這個(gè)是讀取數(shù)據(jù)的線程

圖7

三、關(guān)閉串口

圖8

至此 所有的流程都走完了,基本功能也都實(shí)現(xiàn)了。祝各位一切順利....

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容