iOS藍牙4.0開發(fā)Peripheral(CoreBluetooth)

? ? ? ? ?上篇文章iOS藍牙4.0開發(fā)Central(CoreBluetooth) - 簡書已經講述了作為中央設備的客戶端,現在來講講CoreBluetooth作為外圍設備的情況粱锐。外圍設備(Peripheral)負責發(fā)布廣播服務才顿,告訴周邊中央設備它的可以服務及特征逝变。

一般流程:

1嗤瞎、創(chuàng)建外圍設備管理器CBPeripheralManager并設置代理

2欧引、設置外圍設備的服務和特征怀各,并添加到數據庫中

3倔韭、對外發(fā)布服務的廣播

4、接收來自連接上的中心設備的各種請求(讀和寫)

5瓢对、向訂閱了特征值改變的中心設備發(fā)送通知

詳細步驟(附帶部分代碼):

要求:在Xcode導入CoreBluetooth動態(tài)庫寿酌;

在你的類中引用CoreBluetooth/CoreBluetooth.h;

iOS10還需要加入藍牙的權限說明NSBluetoothPeripheralUsageDescription

a硕蛹、創(chuàng)建外圍設備的管理對象份名,并指定代理

創(chuàng)建CBPeripheralManager

b、創(chuàng)建了CBPeripheralManager妓美,會執(zhí)行它的第一個代理peripheralManagerDidUpdateState:僵腺,通過藍牙的狀態(tài)來執(zhí)行下一步動作,當藍牙開啟狀態(tài)下可以去設置服務和特征壶栋。

peripheralManagerDidUpdateState:代理方法

c辰如、設置外圍設備的服務和特征,并添加到數據庫

? ? ? ? 設置服務和特征贵试,外設的服務和特征通常是通過一個128位的藍牙UUID來表示的琉兜,但是通過SIG定義或分發(fā)的通用UUID可以被縮短為16位,例如:服務的16位UUID180D,這個UUID是UUID0000180D-0000-1000-8000-00805F9B34FB簡便形式.

這里我先定義幾個UUID

uuid

構建服務和特征樹毙玻,創(chuàng)建可變特征時豌蟋,可以指定它的屬性、value值和許可桑滩。當你給某個特征指定一個值梧疲,如果你需要這個該特征的值是可寫的或希望這個特征的值在其所屬服務的生命周期中是可以改變的,你必須指定這個value值為nil运准。這樣做來確保這個值是動態(tài)的和當外設管理器接收來自中心設備的讀和寫請求是可以被外設管理器請求幌氮。

服務和特征樹

到此就有了兩個服務了,第一個服務有一個通知特征和一個可讀寫的特征胁澳,另一個服務只有一個只讀的特征该互。

d、添加服務和特征到數據庫中

添加服務到數據庫

e韭畸、數據庫添加成功后會調用- (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error代理方法宇智,在代理方法中就可以開始對外廣播了

廣播

到此蔓搞,外部的中央設備就可以搜索并連接上了。

f随橘、響應來自連接上的中心設備的讀和寫請求

當中心設備針對你的可讀特征的服務發(fā)送請求時喂分,會執(zhí)行didReceiveReadRequest:的回調,通過判斷是否有可讀的權限太防,返回請求成功的響應

didReceiveReadRequest:

寫的請求跟讀相類似

didReceiveWriteRequests:

在這個代理方法中可以取到中心設備寫入的值妻顶,通過寫入的值我們可以編好一些指令,實現某些動作蜒车,從而來實現交互讳嘱。

g、給已經訂閱的中心設備發(fā)送更新特征的值(Notify)

當中心設備訂閱了特征上的值酿愧,外設管理器會調用peripheralManager:central:didSubscribeToCharacteristic:方法

didSubscribeToCharacteristic:

需要給中心設備更新數據沥潭,都可用CBPeripheralManager 的 updateValue:forCharacteristic:onSubscribedCentrals:把更新數據發(fā)送過去,作為外設可以定時給中心設備發(fā)送狀態(tài)更新嬉挡,也就實現了外設跟中心設備的交互钝鸽。

中心設備如取消了訂閱,外設一樣會接收到回調消息

didUnsubscribeFromCharacteristic:

如果需要Demo的請到這GitHub - zshuo50/BLEFollow下載參考庞钢,希望對你的學習有所幫助拔恰。可以在AppStore下載LightBlue這個軟件來作為調試工具基括,不論是中央設備還是外部設備它都能滿足你的需求颜懊。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市风皿,隨后出現的幾起案子河爹,更是在濱河造成了極大的恐慌,老刑警劉巖桐款,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咸这,死亡現場離奇詭異,居然都是意外死亡魔眨,警方通過查閱死者的電腦和手機媳维,發(fā)現死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冰沙,“玉大人侨艾,你說我怎么就攤上這事⊥鼗樱” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵袋励,是天一觀的道長侥啤。 經常有香客問我当叭,道長,這世上最難降的妖魔是什么盖灸? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任蚁鳖,我火速辦了婚禮,結果婚禮上赁炎,老公的妹妹穿的比我還像新娘醉箕。我一直安慰自己,他們只是感情好徙垫,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布讥裤。 她就那樣靜靜地躺著,像睡著了一般姻报。 火紅的嫁衣襯著肌膚如雪己英。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天吴旋,我揣著相機與錄音损肛,去河邊找鬼。 笑死荣瑟,一個胖子當著我的面吹牛治拿,可吹牛的內容都是我干的。 我是一名探鬼主播笆焰,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼劫谅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仙辟?” 一聲冷哼從身側響起同波,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叠国,沒想到半個月后未檩,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡粟焊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年冤狡,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片项棠。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡悲雳,死狀恐怖,靈堂內的尸體忽然破棺而出香追,到底是詐尸還是另有隱情合瓢,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布透典,位于F島的核電站晴楔,受9級特大地震影響顿苇,放射性物質發(fā)生泄漏。R本人自食惡果不足惜税弃,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一纪岁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧则果,春花似錦幔翰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茸时,卻和暖如春贡定,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背可都。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工缓待, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渠牲。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓旋炒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親签杈。 傳聞我的和親對象是個殘疾皇子瘫镇,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內容