iOS BLE開發(fā)調用的是CoreBluetooth系統(tǒng)原生庫,基本用到的類有:
創(chuàng)新互聯(lián)建站專注于多倫網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供多倫營銷型網站建設,多倫網站制作、多倫網頁設計、多倫網站官網定制、小程序定制開發(fā)服務,打造多倫網絡公司原創(chuàng)品牌,更為您提供多倫網站排名全網營銷落地服務。
CBCentralManager //系統(tǒng)藍牙設備管理對象
CBPeripheral //外圍設備
CBService //外圍設備的服務或者服務中包含的服務
CBCharacteristic //服務的特性
CBDescriptor //特性的描述符
myCentralManager = CBCentralManager()
myCentralManager.delegate = self
myCentralManager.scanForPeripherals(withServices: nil, options: nil)
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
central.connect(self.myPeripheral, options: nil)
}
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
}
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
}
func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?){
}
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
for s in peripheral.services!{
peripheral.discoverCharacteristics(nil, for: s)
}
}
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
print("----發(fā)現(xiàn)特征------")
for c in service.characteristics! {
if c.uuid.uuidString == CHARACTERISTIC{
self.writeCharacteristic = c
peripheral.setNotifyValue(true, for: c)
}
}
}
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?){
}
func writeToPeripheral(_ bytes:[UInt8]) {
if writeCharacteristic != nil {
let data1:Data = dataWithHexstring(bytes)
self.myPeripheral.writeV? ? alue(data1, for: writeCharacteristic, type: CBCharacteristicWriteType.withResponse)
} else{
}
}
func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {
print("didWriteValueForCharacteristic")
}
以上只是作為藍牙從連接打到發(fā)送數(shù)據接收數(shù)據的一個簡單流程,藍牙也可以作為多連接,在數(shù)據返回的方法可以對返回的藍牙設備和你連接的所有藍牙設備進行一個判斷,根據判斷來斷定是哪個藍牙設備返回過來的信息。
另外關于藍牙的UUID,聽說是每個手機連接同一個藍牙設備的UUID會不同,這方面安卓那邊比較簡單的能獲取到藍牙的Mac地址,iOS好像要和廠家那邊協(xié)商一下,我以為你懶得去弄 了所有就暫時這樣;手上我也只有1個手機所有沒有做這方面的測試,有看到這篇文件的朋友或者知道的大神可以留言告訴我是否是這樣的。
只連接到最好的
藍牙開發(fā)連接最好用Mac地址
iOS獲取藍牙外設的Mac地址的兩種方法
iOS 獲取藍牙外設的Mac地址的兩種方法 -
iOS 藍牙開發(fā)(一)
iOS 藍牙開發(fā)(二)
iOS 藍牙開發(fā)(四)
前面記錄了藍牙如何進行掃描、鏈接、以及獲取外設的服務和特征,本篇筆記我將記錄如何實現(xiàn) 與外設做數(shù)據交互(explore and interact) 。
構建方法流程:鏈接成功-獲取指定的服務與特征-訂閱指定的特征值-通過具有寫權限的特征值來寫數(shù)據-最后在函數(shù) didUpdateValueForCharacteristic 中獲取藍牙的反饋信息;
總結:
本篇筆記大概就是在接收到服務和特征后對數(shù)據進行寫入的操作的過程,筆記中的重點在于要熟悉構建特征和服務的方法流程。熟悉流程,我們就能清楚知道當在寫入數(shù)據時,系統(tǒng)藍牙會在函數(shù) didUpdateValueForCharacteristic 方法中給我們反饋寫入是否成功的反饋信息。
GAP(Generic Access Profile):它用來控制設備連接和廣播,GAP 使你的設備被其他設備可見,并決定了你的設備是否可以或者怎樣與合同設備進行交互。
GATT(Generic Attribute Profile):BLE連接都是建立在GATT協(xié)議之上的。GATT 是一個在藍牙連接之上的發(fā)送和接收很短的數(shù)據段的通用規(guī)范,這些很短的數(shù)據段被稱為屬性(Attribute)。
BLE中主要有兩個角色:外圍設備(Peripheral)和中心設備(Central)。一個中心設備可以連接多個外圍設備,一個外圍設備包含一個或多個服務(services),一個服務包含一個或多個特征(characteristics)。
使用CoreBluetooth庫,創(chuàng)建CBPeripheralManager,實現(xiàn)CBPeripheralManagerDelegate代理
創(chuàng)建完該對象,會回調peripheralManagerDidUpdateState:方法判斷藍牙狀態(tài),藍牙可用,給外設配置服務和特征
注意CBAttributePermissions
當中心設備讀寫設置CBAttributePermissionsReadEncryptionRequired/CBAttributePermissionsWriteEncryptionRequired權限的Characteristic時,會彈出彈框,請求建立安全連接
給外設配置服務特征后,會調用peripheralManager:didAddService:error: 服務特征全部添加完后發(fā)起廣播,如果在廣播時設置CBAdvertisementDataServiceUUIDsKey,會把該service廣播出去,中心設備在掃描時可根據該uuid找到該設備。外圍設備靠不斷發(fā)廣播,使中心設備發(fā)現(xiàn)它。
當中央端連接上了此設備并訂閱了特征時會回調 didSubscribeToCharacteristic:
當接收到中央端讀的請求時會調用didReceiveReadRequest:
創(chuàng)建CBCentralManager對象,實現(xiàn)CBCentralManagerDelegate代理
回調centralManagerDidUpdateState:代理方法,當central.state==CBManagerStatePoweredOn時,開啟掃描,設置serviceUUIDs可掃描特定外設,CBCentralManagerScanOptionAllowDuplicatesKey設為NO不重復掃描已發(fā)現(xiàn)設備,YES是允許
掃描到設備會回調centralManager:didDiscoverPeripheral:advertisementData:RSSI:,RSS絕對值越大,表示信號越差,設備離的越遠
關閉掃描
連接設備
發(fā)現(xiàn)服務
發(fā)現(xiàn)特征
iOS 藍牙開發(fā)(二)
iOS 藍牙開發(fā)(三)
iOS 藍牙開發(fā)(四)
在iOS中藍牙相關實現(xiàn)都是在CoreBluetooth這個framework中的,所以我們創(chuàng)建一個單例類中需要先導入 #import CoreBluetooth/CoreBluetooth.h ,再后即可使用這個單例類進行管理我們藍牙的掃描、連接、狀態(tài)等實現(xiàn)。
當 central.state 為CBManagerStatePoweredOn即可開始掃描, 具體方法 [self.centralManager scanForPeripheralsWithServices:nil options:nil] 當調用 scanForPeripheralsWithServices:options: 函數(shù)時就會實時調用其代理方法 - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
peripheral 是外設類 advertisementData 是廣播的值,一般攜帶設備名, serviceUUID 等信息。 RSSI 絕對值越大,表示信號越差,設備離的越遠。如果想裝換成百分比強度, (RSSI+100)/1001 (這是一個約數(shù),藍牙信號值并不一定是-100 - 0的值)
藍牙的連接是當中心設備掃描到可用外設后, 利用函數(shù) [self.centralManager connectPeripheral:peripheral options:nil]; 進行鏈接, 當函數(shù)被調用后, 就會回調其對應的代理函數(shù)。
本篇筆記主要是記錄如何初始化藍牙的 CBCentralManager 的中心管理類,并記錄如何實現(xiàn)掃描周邊外設、如何鏈接、獲取藍牙當前狀態(tài)。
網頁題目:ios藍牙3.0開發(fā),ios1502藍牙
文章URL:http://chinadenli.net/article8/dsshgip.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航、微信公眾號、外貿網站建設、企業(yè)建站、網站收錄、動態(tài)網站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)