藍(lán)牙

iOS中用到的框架是CoreBluetooth.framework,主要用于和第三方藍(lán)牙的交互,這個(gè)不需要蘋(píng)果的認(rèn)證,但是必須是藍(lán)牙4.0以上的設(shè)備。藍(lán)牙4.0也叫BLE(Bluetooth Low Energy 藍(lán)牙低功耗)所以一般都稱(chēng)之為BlE開(kāi)發(fā),從iPhone4s及其以后的設(shè)備、從iOS6及其以后的系統(tǒng)都是支持BLE的。所以說(shuō)IOS的BLE開(kāi)發(fā)其實(shí)就是CoreBluetooth.framework這個(gè)框架的使用,一般情況下現(xiàn)在所說(shuō)的IOS藍(lán)牙開(kāi)發(fā)也都是BLE開(kāi)發(fā)。我們現(xiàn)在所做的智能家居,智能手環(huán),類(lèi)似的這些東西基本都是使用的這種方式與iPhone連接的。
核心概念
CBCentralManager:中心設(shè)備(用來(lái)連接到外部設(shè)備的管家)
CBPeripheralManager:外部設(shè)備(第三方的藍(lán)牙4.0設(shè)備)
當(dāng)手機(jī)作為中心設(shè)備去連接第三方藍(lán)牙設(shè)備的時(shí)候,首先需要了解下面幾個(gè)概念
服務(wù):每一個(gè)外部設(shè)備都會(huì)擁有若干個(gè)服務(wù),比如說(shuō)你的智能手環(huán)可能會(huì)擁有一個(gè)管理你心率的服務(wù),還有一個(gè)管理你跑步情況的服務(wù)。這些服務(wù)是你的硬件工程師設(shè)定的,作為我們?cè)陂_(kāi)發(fā)的時(shí)候只需要知道有哪些服務(wù)就可以了,每一個(gè)服務(wù)都會(huì)有一個(gè)唯一的UUID,就是一個(gè)字符串,用于辨別區(qū)分是哪個(gè)服務(wù)(外部設(shè)備也會(huì)有其對(duì)應(yīng)的一個(gè)UUID),如果你連接到這個(gè)設(shè)備的話(huà),你是可以搜索到這些服務(wù)的。

特征:每一個(gè)服務(wù)里邊都會(huì)有若干個(gè)特征,我們就是通過(guò)這些特征值來(lái)與設(shè)備進(jìn)行交互的,還拿手環(huán)的例子來(lái)說(shuō),比如在它的管理你跑步情況的服務(wù)中可能有兩個(gè)特征值,一個(gè)特征是讀取手環(huán)內(nèi)你跑步的數(shù)據(jù),一個(gè)特征是用于你的APP發(fā)送數(shù)據(jù)給這個(gè)服務(wù),進(jìn)行一些設(shè)置什么的,同樣每個(gè)服務(wù)中的特征也是由你的硬件工程師設(shè)置好的,你只需要用就好了,當(dāng)然這些特征值也會(huì)有其對(duì)應(yīng)的一個(gè)唯一的UUID。

特征的屬性:這些個(gè)特征的屬性也是不盡相同有的是用來(lái)讀數(shù)據(jù)的,有的是用來(lái)訂閱通知的,有的是用來(lái)發(fā)送數(shù)據(jù)的,這些屬性同樣也都是設(shè)定好的,我們只需要知道哪一個(gè)特征是什么屬性就好了。這些屬性種類(lèi)有一個(gè)枚舉:

也就是說(shuō)每個(gè)外設(shè)下面有多個(gè)服務(wù),每個(gè)服務(wù)下面有多個(gè)特征,我們和外設(shè)交互數(shù)據(jù)通過(guò)特征進(jìn)行讀、寫(xiě)、通知的;

藍(lán)牙中心模式流程如下:

  1. 建立中心角色
  2. 掃描外設(shè)(discover)
  3. 連接外設(shè)(connect)
  4. 掃描外設(shè)中的服務(wù)和特征(discover)
  • 4.1 獲取外設(shè)的services
  • 4.2 獲取外設(shè)的Characteristics,獲取Characteristics的值,獲取Characteristics的Descriptor和Descriptor的值
  1. 與外設(shè)做數(shù)據(jù)交互(explore and interact)
  2. 訂閱Characteristic的通知
  3. 斷開(kāi)連接(disconnect)

特征屬性

typedef NS_OPTIONS(NSUInteger, CBCharacteristicProperties) {
CBCharacteristicPropertyBroadcast                                               = 0x01,
CBCharacteristicPropertyRead                                                    = 0x02,
CBCharacteristicPropertyWriteWithoutResponse                                    = 0x04,
CBCharacteristicPropertyWrite                                                   = 0x08,
CBCharacteristicPropertyNotify                                                  = 0x10,
CBCharacteristicPropertyIndicate                                                = 0x20,
CBCharacteristicPropertyAuthenticatedSignedWrites                               = 0x40,
CBCharacteristicPropertyExtendedProperties                                      = 0x80,
CBCharacteristicPropertyNotifyEncryptionRequired NS_ENUM_AVAILABLE(NA, 6_0)     = 0x100,
CBCharacteristicPropertyIndicateEncryptionRequired NS_ENUM_AVAILABLE(NA, 6_0)   = 0x200
};
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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