? ? ? ? ?當前BLE應用非常廣泛,不再僅僅局限于兩個設備之間的數據傳輸,它還應用在很多方面,例如智能家居,智能硬件等。下面來講講iOS藍牙4.0的開發技術。
? ? ? ? ?iOS藍牙4.0的開發,只需要一個CoreBluetooth框架就能搞定。CoreBluetooth有類似于客戶端——服務端,作為服務端的設備稱為外圍設備(Peripheral),作為客戶端的設備稱為中央設備(Central),下面我主要講作為客戶端時的開發:?
一般流程:
1.創建中央設備管理器對象CBCentralManager并指定代理
2.確定iPhone藍牙已打開,掃描外圍設備,并指定搜索到的設備連接
3.查找外圍設備的服務和特征,通過可用特征來讀取特征數據
4.通過發送指令,來控制外圍設備
詳細流程(夾帶詳細步驟代碼):
要求:在Xcode導入CoreBluetooth動態庫;
在你的類中引用CoreBluetooth/CoreBluetooth.h;
iOS10還需要加入藍牙的權限說明NSBluetoothPeripheralUsageDescription
a.創建中央設備管理器對象,并指定代理
b.創建了CBCentralManager,會執行他的第一個代理方法centralManagerDidUpdateState:
c.當檢測到本機藍牙處于打開狀態,就可以搜索外圍設備了,scanForPeripheralsWithServices:這個方法就是搜索周邊設備的方法,WithServices:后面可以帶上特定設備的服務UUID,就只會搜索到指定設備,如果帶nil可以搜索到所以設備,
d.當執行搜索方法后,會走-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI回調
從中可以得到搜索到的藍牙設備的一些參數,設備名稱、identifier、特征uuid、信號質量等參數,在這里面,如果你是用特征uuid進行搜索的,那么將只能搜索到特定的設備,搜索到回調你就可以直接連接該設備;如果你是搜索所有設備的,你可以將搜索到的設備添加到數組里,用列表展示出來,然后在列表選擇你要連接的設備。
e.連接藍牙設備connectPeripheral:
連接藍牙成功有成功的回調,連接藍牙成功后可以停止搜索周邊藍牙設備stopScan
連接藍牙失敗也有失敗的回調,可以看連接失敗的原因
f.連接到藍牙設備后,在成功的回調里設置設備的代理,在設備上掃描它所帶的服務,如上面連接藍牙成功的回調里那樣[_periperal discoverServices:nil];掃描所有服務,之后會執行CBPeripheral的代理方法
通過循環遍歷,找出特征uuid對應的特性,有可讀、可寫、通知等,通過可讀的特性可以讀取藍牙設備發送的數據;通過可寫特性,給可寫的uuid寫入特定的16進制字符串,可以來控制藍牙設備的動作;通過通知特性,可以接收到藍牙的設備的廣播通知。
g.下面介紹寫、讀、通知相對應的方法:
? ? ? ? 寫:[peripheral writeValue:xxx forCharacteristic:xxx ?type:xxx];
? ? ? ? 讀:[peripheral readValueForCharacteristic:xxx];
? ? ? ? 通知:[peripheral setNotifyValue:YES forCharacteristic:xxx];
執行了寫讀通知方法,都有對應的回調方法
h.最后一個斷開藍牙以及藍牙斷開后的回調方法
斷開藍牙:[_centeralManager cancelPeripheralConnection:_peripheral];
如果藍牙斷開或者異常斷開,上圖的回調方法都會有error信息回調,如果藍牙是異常斷開,可以加一句連接藍牙的方法,實現藍牙斷線重連