iOS藍牙4.0開發Central(CoreBluetooth)

? ? ? ? ?當前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.創建中央設備管理器對象,并指定代理

創建CBCentralManager

b.創建了CBCentralManager,會執行他的第一個代理方法centralManagerDidUpdateState:

CBCentralManager的幾種狀態

c.當檢測到本機藍牙處于打開狀態,就可以搜索外圍設備了,scanForPeripheralsWithServices:這個方法就是搜索周邊設備的方法,WithServices:后面可以帶上特定設備的服務UUID,就只會搜索到指定設備,如果帶nil可以搜索到所以設備,

搜索外圍設備

d.當執行搜索方法后,會走-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI回調

scanForPeripheralsWithServices:執行后的回調

從中可以得到搜索到的藍牙設備的一些參數,設備名稱、identifier、特征uuid、信號質量等參數,在這里面,如果你是用特征uuid進行搜索的,那么將只能搜索到特定的設備,搜索到回調你就可以直接連接該設備;如果你是搜索所有設備的,你可以將搜索到的設備添加到數組里,用列表展示出來,然后在列表選擇你要連接的設備。

e.連接藍牙設備connectPeripheral:

連接藍牙

連接藍牙成功有成功的回調,連接藍牙成功后可以停止搜索周邊藍牙設備stopScan

連接藍牙成功的回調

連接藍牙失敗也有失敗的回調,可以看連接失敗的原因

連接藍牙失敗的回調

f.連接到藍牙設備后,在成功的回調里設置設備的代理,在設備上掃描它所帶的服務,如上面連接藍牙成功的回調里那樣[_periperal discoverServices:nil];掃描所有服務,之后會執行CBPeripheral的代理方法

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信息回調,如果藍牙是異常斷開,可以加一句連接藍牙的方法,實現藍牙斷線重連

添加:藍牙4.0的開發,交互時一般是使用16進制,接收到的數據包是不能超過20字節的,下面給大家提供16進制的數據包轉成16進制的字符串以及16進制字符串轉成16進制的數據

16進制數據轉16進制字符串
16進制字符串轉16進制數據

純屬個人筆記,理解有誤莫見怪,如覺得對你有所幫助還給個贊,給點鼓勵,如覺得有理解錯誤或者代碼錯誤,還請留言告知,謝謝!下面是我一個藍牙燈泡的demo的代碼地址,大家可以去下載看看。

github.com/zshuo50/BLE.git

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 藍牙簡介 藍牙( Bluetooth? ):是一種無線技術標準,可實現固定設備、移動設備和樓宇個人域網之間的短距離...
    Chefil閱讀 2,070評論 2 19
  • 歡迎訪問我的博客 muhlenXi,該文章出自我的博客,歡迎轉載,轉載請注明來源: http://muhlenxi...
    賣碼維生閱讀 6,130評論 5 17
  • 1、能打仗,打勝仗 公司最重要的目的是賺錢,公司發展好的時候可能天下太平,一旦遇到困難,還是業績為王。一定要有能打...
    水中船閱讀 204評論 0 0
  • 1.MediaPlayer框架播放視頻/網絡流媒體/網絡音頻 iOS提供了MPMoviePlayerControl...
    solozyx閱讀 1,017評論 0 0
  • 總希望有那么一個人,我在他面前可以永遠是個孩子。
    TY__閱讀 151評論 0 0