iOS藍芽開發 藍芽連線和資料讀寫

2022-09-20 20:39:09 字數 3365 閱讀 4194

在做藍芽開發之前,最好先了解一些概念:

服務(services):藍芽外設對外廣播的必定會有乙個服務,可能也有多個,服務下面包含著一些特徵,服務可以理解成乙個模組的視窗;

特徵(characteristic):存在於服務下面的,乙個服務下面也可以存在多個特徵,特徵可以理解成具體實現功能的視窗,一般特徵都會有value,也就是特徵值,特徵是與外界互動的最小單位;

uuid:可以理解成藍芽上的唯一識別符號(硬體上肯定不是這個意思,但是這樣理解便於我們開發),為了區分不同的服務和特徵,或者給服務和特徵取名字,我們就用uuid來代表服務和特徵。

藍芽連線可以大致分為以下幾個步驟

1.建立乙個central manager例項進行藍芽管理

2.搜尋外圍裝置

3.連線外圍裝置

4.獲得外圍裝置的服務

5.獲得服務的特徵

6.從外圍裝置讀資料

7.給外圍裝置傳送資料

其他:提醒

首先我們先導入系統的ble的框架

#import

必須遵守2個協議

/** 中心管理者 */

@property (nonatomic, strong) cbcentralmanager *cmgr;

/** 連線到的外設 */

@property (nonatomic, strong) cbperipheral *peripheral;

1.建立乙個central manager例項進行藍芽管理

-(cbcentralmanager *)cmgr

return _cmgr;}

//只要中心管理者初始化 就會觸發此**方法 判斷手機藍芽狀態

- (void)centralmanagerdidupdatestate:(cbcentralmanager *)central

break;

case 5:

break;

default:

break;

}}2.搜尋外圍裝置 (我這裡為了舉例,採用了自己身邊的乙個手環)

// 發現外設後呼叫的方法

- (void)centralmanager:(cbcentralmanager *)central // 中心管理者

diddiscoverperipheral:(cbperipheral *)peripheral // 外設

advertisementdata:(nsdictionary *)advertisementdata // 外設攜帶的資料

rssi:(nshgmzdnnumber *)rssi // 外設發出的藍芽訊號強度

, rssi = -55

根據列印結果,我們可以得到運動手環它的名字叫 oband-75

*/// 需要對連線到的外設進行過濾

// 1.訊號強度(40以上才連線, 80以上連線)

// 2.通過裝置名(裝置字串字首是 oband)

// 在此時我們的過濾規則是:有oband字首並且訊號強度大於35

// 通過列印,我們知道rssi一般是帶-的

if ([peripheral.name hasprefix:@"oband"])

}3.連線外圍裝置

// 中心管理者連線外設成功

- (void)centralmanager:(cbcentralmanager *)central // 中心管理者

didconnectperipheral:(cbperipheral *)peripheral // 外設

// 外設連線失敗

- (void)centralmanager:(cbcentralmanager *)central didfailtoconnectperipheral:(cbperipheral *)peripheral error:(nserror *)error

// 丟失連線

- (void)centralmanager:(cbcentralmanager *)central diddisconnectperipheral:(cbperiphgmzdnheral *)peripheral error:(nserrowww.cppcns.comr *)error

4.獲得外圍裝置的服務 & 5.獲得服務的特徵

// 發現外設服務裡的特徵的時候呼叫的**方法(這個是比較重要的方法,你在這裡可以通過事先知道uuid找到你需要的特徵,訂閱特徵,或者這裡寫入資料給特徵也可以)

- (void)peripheral:(cbperipheral *)peripheral diddiscovercharacteristicsforservice:(cbservice *)service error:(nserror *)error

}5.從外圍裝置讀資料

// 更新特徵的value的時候會呼叫 (凡是從藍芽傳過來的資料都要經過這個**,簡單的說這個方法就是你拿資料的唯一方法) 你可以判斷是否

- (void)peripheral:(cbperipheral *)peripheral didupdatevalueforcharacteristic:(cbcharacteristic *)characteristic error:(nserror *)error

}6.給外圍裝置傳送資料(也就是寫入資料到藍芽)

這個方法你可以放在button的響應裡面,也可以在找到特徵的時候就寫入,具體看你業務需求怎麼用啦

[self.peripherale writevalue:_batterydata forcharacteristic:self.characteristic type:cbcharacteristicwritewithresponse];

//第乙個引數是已連線的藍芽裝置 ;第二個引數是要寫入到哪個特徵; 第三個引數是通過此響應記錄是否成功寫入

// 需要注意的是特徵的屬性是否支援寫資料

- (void)yf_peripheral:(cbperipheral *)peripheral didwritedata:(nsdata *)data forcharacteristic:(nonnull cbcharacteristic *)characteristic

;

列印出特徵的許可權(characteristic.properties),可以看到有很多種,這是乙個ns_options的列舉,可以是多個值

常見的又read,write,noitfy,indicate.知道這幾個基本夠用了,前倆是讀寫許可權,後倆都是通知,倆不同的通知方式

*/// nslog(@"%s, line = %d, char.pro = %d", __function__, __line__, characteristic.properties);

// 此時由於列舉屬性是ns_options,所以乙個列舉可能對應多個型別,所以判斷不能用 = ,而應該用包含&

}本文標題: ios藍芽開發 藍芽連線和資料讀寫

本文位址:

ios開發藍芽 BLE

import 中心管理者 property nonatomic,strong cbcentralmanager themanager property nonatomic,strong cbperipheral theperpher property nonatomic,strong cbchara...

開發藍芽程式

這幾天需要開發乙個藍芽程式,指定用widcomm驅動,網上查了下資料,找到32feet.net 的乙個開源專案,利用這個專案可以實現想要的功能.不過先得裝乙個widcomm驅動程式,網上有很多破解版本.開發時,看裡面的幫助文件,還有很好的例子,幾乎都是用vb寫的,可以參照介面轉化為c 需要說明的是 ...

iOS開發 藍芽學習的總結

前言 藍芽我們知道在外設方面用的比較多,況且目前在醫療運動等方便使用也比較廣泛,博主個人對於外設這一塊其實挺看重的,未來必定是可穿戴裝置的天下,在達不到完全把功能整合到穿戴裝置的技術和降低成本的條件下,外設是乙個很好的選擇,藍芽無疑起到決定性的作用。最近在看藍芽,關於藍芽,也許你很了解這個名詞,但是...