一粒褒、什么是藍(lán)牙识颊?
不同于有線傳輸,藍(lán)牙? 設(shè)備使用無線電波連接電話或計算機怀浆。耳機或手表等藍(lán)牙產(chǎn)品包含微型計算機芯片谊囚,上面搭載藍(lán)牙無線電和軟件以便于連接。當(dāng)兩個藍(lán)牙設(shè)備想要互相對話時执赡,它們需要配對镰踏。藍(lán)牙設(shè)備之間的通信在短距離點對點網(wǎng)絡(luò)(亦稱為微微網(wǎng))中發(fā)生。微微網(wǎng)是設(shè)備使用藍(lán)牙技術(shù)連接在一起的網(wǎng)絡(luò)沙合。建立網(wǎng)絡(luò)后奠伪,一臺設(shè)備作為主設(shè)備,其他是從屬設(shè)備首懈。
藍(lán)牙通過發(fā)展绊率,目前最大的特點是:低功耗,高速度究履。
二滤否、iOS 藍(lán)牙框架
首先藍(lán)牙通信協(xié)議(我也不知道具體協(xié)議名字,或許有多層最仑、多個協(xié)議)規(guī)定了如下圖所示的服務(wù)結(jié)構(gòu)藐俺。
一個藍(lán)牙設(shè)備可以有多個profile,一個profile里可以有多個服務(wù), 每個服務(wù)包含多個特征 還可以包含子服務(wù)
一個特征有一個value,還有一些對特征進(jìn)行描述的字段泥彤。
iOS有好幾個框架里有藍(lán)牙部分的支持欲芹,這里只討論CoreBluetooth。
分別對應(yīng)的類是CBService,CBMutableService ,CBCharacteristic,CBMutableCharacteristic 吟吝。沒看到Profile的對應(yīng)菱父。
主設(shè)備用CBCentralManager來控制,從設(shè)備用CBPeripheralManager控制
用法:
我們假設(shè)一種最簡單的列子剑逃,手機要讀取溫度傳感器的數(shù)據(jù)浙宜。
那么用手機A模擬溫度傳感器 ,手機B作為展示和控制蛹磺。
流程為:
手機A
實例化一個 CBPeripheralManager peripheralManager梆奈。
實例化一個 CBMutableService service (因為我們要設(shè)置服務(wù)的特征,所以要用Mutable)
實例化表示當(dāng)前溫度的一個特征 CBMutableCharacteristic tempCharacteristic
將tempCharacteristic 賦予服務(wù) service.characteristics = [tempCharacteristic]
然后用peripheralManager 添加服務(wù) 并發(fā)出廣播称开。
peripheralManager.add(service)
peripheralManager.startAdvertising()
手機B
實例化CBCentralManager centralManager
掃描周圍的廣播 centralManager.scan
掃描到廣播便能得到代表手機A的CBPeripheral peripheralA (peripheral 外設(shè)的意思)
通過centralManager調(diào)用connect方法連接 peripheralA
連接成功后通過 peripheralA.discoverServices 去獲得手機A剛剛發(fā)出的那個服務(wù) service
然后通過service獲取它的特征亩钟,獲取特征的value等乓梨。
手機A可以通過peripheralManager 定時update tempCharacteristic的value
只要value一更新,手機B這邊就會收到value被更新的回調(diào)清酥。
就實現(xiàn)了 手機讀取溫度傳感器的溫度扶镀。
代碼:https://github.com/tigerLBJ100910/Bluetooth-Demo
需要在xcode9上運行