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