胡成
摘要
近年來隨著智能可穿戴設備不斷發(fā)展,短距離的無線通訊技術顯得越來越重要,尤其是具有低待機功耗和運行功耗的低功耗(BLE)藍牙技術。本文基于Android系統(tǒng),對低功耗藍牙技術協(xié)議棧、以及開發(fā)流程進行了研究分析,從而在Android系統(tǒng)上實現(xiàn)低功耗藍牙主從設備的通訊。
【關鍵詞】低功耗藍牙 Android系統(tǒng) 技術協(xié)議棧
隨著社會經濟的發(fā)展和人們生活質量的提高,智能可穿戴設備將應用的越來越廣泛。目前,各種智能可穿戴設備已經慢慢進入我們的日常生活中,最常見有智能手表、智能手環(huán)、智能眼鏡等,這些智能可穿戴設備大部分與智能手機綁定,通過藍牙進行數(shù)據(jù)共享。低功耗藍牙低待機功率和運行功率的特點非常符合當前智能可穿戴設備的發(fā)展需求。
1 BLE藍牙協(xié)議棧結構分析
BLE藍牙協(xié)議棧分為兩個部分,分別是控制器和主機??刂破饔晌锢韺樱≒HY)、鏈路層(LL)、主機控制接口(HCD組成。主機由邏輯鏈路控制及自適應協(xié)議層(L2CAP)、安全管理層(SM)、屬性協(xié)議層(ATT)、通用訪問配置文件層(GAP)、通用屬性配置文件層(GATT)組成。具體的協(xié)議說明如下。
1.1 物理層
對于低功耗藍牙,其物理層運行在2.4GHz全球通用的免許可證頻段,總共可使用40個頻道,頻道間隔為2MHz。
1.2 鏈路層
用于控制射頻設備的工作狀態(tài),包括5種工作狀態(tài):準備、廣播、掃描、啟動和連接。
1.3 主機控制接口
為主機和控制器之間的通信提供了一種標準化的接口。
1.4 邏輯鏈路控制及自適應協(xié)議層
用于為更高層提供數(shù)據(jù)封裝服務。
1.5 安全管理層
定義了配對和密匙分發(fā)的方式,實現(xiàn)安全連接和數(shù)據(jù)交換。
1.6 屬性協(xié)議層
用于所有低功耗藍牙的數(shù)據(jù)傳輸,具有快速、簡單的特點。
1.7 通用訪問配置文件層
是所有其他配置文件的基礎,定義了在BLE藍牙設備間建立系帶鏈路的通用方法,負責處理設備的接入方式和過程,包括設備發(fā)現(xiàn)、鏈路建立、啟動安全功能以及設備配置。
1.8 通用屬性配置文件層
定義了使用ATT的服務框架和配置文件(profiles)的結構,相當于ATT層提供給用戶開發(fā)的接口。
2 Android低功耗藍牙開發(fā)
低功耗藍牙是在Android4.3版本之后才增加的功能。開發(fā)低功耗藍牙的應用都要遵守GATT協(xié)議,具體的開發(fā)流程如下所示。
2.1 授權及初始化
要進行BLE應用的開發(fā),必須在AndroidManifest.xml文件中加入相應的開發(fā)權限。開發(fā)時,首先驗證所使用的Android操作系統(tǒng)版本是否支持BLE功能。若支持則還需要檢查手機是否具有藍牙硬件。然后應用程序通過BluetoothManagement類可以獲取本地藍牙適配器,獲取適配器之后,需要查看是否開啟,可以調用isEnabled()。當返回值為true時,則表示藍牙設備已經打開,此時可以以ACTION_REQUEST_ENABLE為參數(shù)新建一個intent,再使用startActivityForResult調用intent對象開啟藍牙。
2.2 搜索設備
使用BluetoothAdapter類的startLeScan()搜索BLE設備,該方法使用了BluetoothAdapter.LeScanCallback接口作為參數(shù),通過接口中的回調函數(shù)得到BIE設備。整個搜索過程會占用一定的系統(tǒng)資源和電能的消耗,在定時搜索后需要調用stopLeScan()停止掃描。
2.3 連接設備
Android手機與B1E設備連接,就是需要與GATT服務器建立連接??梢酝ㄟ^如下示例代碼實現(xiàn)。
final BluetoothDevice device=mBluetoothAdapter.getRemoteDevice(“mac字符串”);
mBluetoothGatt=device.connectGatt(mContext,false,mGattCallback);
通過以上代碼可以讓客戶端應用程序與GATT服務器建立連接。其中參數(shù)mGattCallback是一個基于GATT服務的回調,需要實現(xiàn)多個回調函數(shù),通過這些回調函數(shù)可以將設備的連接狀態(tài)、服務和特性傳遞到客戶端應用程序的業(yè)務層。
2.4 設備通信
設備連接成功之后,可以使用BluetoothGatt類的讀寫方法對藍牙的Characteristic進行操作從而實現(xiàn)數(shù)據(jù)讀寫。主動讀取數(shù)據(jù)時,mGattCallback中的onCharacteristicReado會被執(zhí)行,通過mBluetoothGatt.readCharacteristic(characteristic)讀取數(shù)據(jù)。使用通知方式實現(xiàn)數(shù)據(jù)讀取時,則當從設備數(shù)據(jù)有變化,onCharacteristicChanged()會被執(zhí)行,提供更新的數(shù)據(jù)。寫數(shù)據(jù)時通過mBluetoothGatt.writeCharacteristic(characteristic)寫入,此時需要先將數(shù)據(jù)字節(jié)數(shù)字用setValue()寫入到Characteristic中。
3 結束語
目前許多智能可穿戴設備備受人們的歡迎,搭載于智能手機的Android操作系統(tǒng),可以通過低功耗藍牙控制智能可穿戴設備。報告顯示,Android操作系統(tǒng)已經占領了全球智能移動手機最大份額,未來基于Android操作系統(tǒng)的智能可穿戴設備具有巨大的市場前景,低功耗藍牙技術也將會有廣闊的發(fā)展前景。
參考文獻
[1]孫光宇,張玲玲.Android物聯(lián)網開發(fā)從入門到實戰(zhàn)[M].北京:清華大學出版社,2015:112-115.
[2]錢志鴻,劉丹.藍牙技術數(shù)據(jù)傳輸綜述[J].通信學報,2012,33(04):143-151.
[3]周進波,張磊,張敏,袁欽鵬.基于Android系統(tǒng)藍牙開發(fā)的研究與實現(xiàn)[J].光學儀器,2013,32(01):35-36.