iOS 藍牙入門

藍牙- iOS

現(xiàn)在離職了,碰上十一假期凡壤,把在公司學到的藍牙開發(fā)基本技能整理一下,用作備忘雁佳、分享涨享。

demo放出來 喜歡的star一下 筋搏!

希望大家看完這篇文章會對藍牙開發(fā)有個基本的了解,能開發(fā)簡單的藍牙App厕隧。

基礎(chǔ)知識

?本文針對iOS開發(fā)

藍牙的特點:

與WIFI通訊相比奔脐,藍牙**低耗**,對于設(shè)備電量要求比較低吁讨;**速度快**,極限好像是20ms,超過這個時間髓迎,雖然代碼不再執(zhí)行,但低層代碼還在不停的發(fā)送數(shù)據(jù)挡爵,容易使得手機發(fā)燙竖般,除了特殊需求(音樂實時律動,手指取色發(fā)送),一般不要發(fā)送太快茶鹃。

藍牙相關(guān)的框架:

CoreBluetooth.frameWork

藍牙相關(guān)的類:

CBCentralManager? 中心設(shè)備 --> 手機

CBPeripheral? 周邊設(shè)備 --> 藍牙設(shè)備

?藍牙的基本屬性(特指在iOS開發(fā)中涣雕,常用到的一些屬性)

- UUID:唯一標識符,可用來區(qū)分設(shè)備闭翩,具體請自行Google挣郭。

- RSSI: 信號強弱值,防丟器之類的可以用這個疗韵。

- name: 設(shè)備名稱兑障。

- service UUID(重點):服務。一個Server 會包含多個characteristic蕉汪,用UUID來區(qū)分流译。

這個是有國際規(guī)范標注的,具體請自行Google者疤,硬件的工程師應該比較了解福澡。

- characteristic(重點):特征。用UUID來區(qū)分驹马。

?Characteristic 里面有個notify,只有打開才能接受到藍牙的返回數(shù)據(jù)革砸。Characteristic 里面也有很多屬性,但本文不展開講解糯累。

具體例子講解

?藍牙開發(fā)的流程



基本流程代碼講解

1. ? 創(chuàng)建手機中心 算利,首先你要有一個中心CBCentralManager 這個中心代表你的設(shè)備,它提供了一系列的代理方法來管理與之相連的周邊對象CBPeripheral泳姐。

CBCentralManager * BLEManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];

BLEManager.delegate = self;

2. ?開始掃描 效拭,注意了掃描是耗性能、耗電、容易發(fā)熱的允耿,所以當找到并連接上設(shè)備的時候需要停止掃描借笙。

if ([self isLECapableHardware]) {//判斷是否打開藍牙

[BLEManager scanForPeripheralsWithServices:nil options:nil];}

}

3.? 結(jié)束掃描?,不停的掃描會相當?shù)南碾娏亢虲pu较锡。

[BLEManager stopScan];

4. ?獲取周邊對象 ,掃描開始后盗痒,你會在代理方法里面獲取到掃描的周邊對象(再次提醒蚂蕴,**周邊對象**就是代表本手機以外的藍牙設(shè)備,比如手環(huán)俯邓、藍牙燈骡楼、防丟器什么的。)

5. 獲取服務 稽鞭,通過service UUID在目標周邊對象的所有服務中找到你需要的服務鸟整。

6. 獲取特征 , 同樣通過characteristic UUID 獲取到相應的特征朦蕴,保存成全局變量篮条,后面發(fā)送會用到。

7. ?發(fā)送數(shù)據(jù) 吩抓, 發(fā)送數(shù)據(jù)需要至少需要五個參數(shù):手機涉茧、連接上的周邊對象、特征疹娶、數(shù)據(jù)伴栓、是否返回。

8. 接收返回數(shù)據(jù) 雨饺,在這里接收钳垮、處理周邊對象的返回數(shù)據(jù),注意這里一共提供了幾個參數(shù)额港,具體使用看需求而定饺窿。

> 強烈建議大家把 CBCentralManager.h 里面的代理方法全部看一遍(就是翻譯一遍,別偷懶)锹安。

tips

編輯數(shù)據(jù)

//拆分高低位

Byte bindIndexLow = needIndex & 0xff;

Byte bindIndexHigh = (needIndex >> 8) & 0xff;

int i == 0

char char_array[30] = {0x00};//定義一個字節(jié)數(shù)組

char_array[i++] = 0x01;? //16進制

char_array[i++] = 20;? //10進制

char_array[i++] = 0x8F;? //

char_array[i++] = 0x07;? //

NSData* data = [NSData dataWithBytes:(const void *)char_array length:sizeof(char) * i];

[peripheral writeValue:data forCharacteristic:calibrationCharacteristic type:CBCharacteristicWriteWithResponse];

*? 檢驗工具 lightblue

墻裂推擠使用lightblue 檢測藍牙設(shè)備短荐,它能讀取到藍牙的所有參數(shù),特別需要注意的是里面的serveruuid 和 特征叹哭,里面的notify和read忍宋。理論上來說 lightblue 上能完成的操作 app也應該能完成 同時這也是開發(fā)中用來檢驗硬件收發(fā)數(shù)據(jù)是否正常,如果lightblue 跟硬件通訊正常风罩,問題極有可能出在app上糠排。

*? 重連

iOS的框架自帶重連機制,千萬不要因為設(shè)備斷開就手動調(diào)用立馬掃描超升,不要掃描入宦,不要掃描哺徊。具體看

[Core Bluetooth Programming Guide]

*? 多連

iOS框架支持多連,同樣只要connect就行乾闰,當然要注意區(qū)分不同的設(shè)備

* 防劫持

很多防丟器和一些家庭級的藍牙會有防劫持功能落追,具體得看需求和硬件而定,一般來說要求手機在限定時間內(nèi)提交密碼。

*? 進階一:隊列發(fā)送

由于藍牙的發(fā)送性能的限制涯肩,如果你需要高速發(fā)送數(shù)據(jù)時轿钠,盡量把發(fā)送封裝成一個工具類,把需要發(fā)送的數(shù)據(jù)存到一個數(shù)組隊列里面病苗,然后定時發(fā)送數(shù)據(jù)疗垛。

*? 進階二:丟包重發(fā)

結(jié)合隊列發(fā)送,如果業(yè)務需求要求收發(fā)嚴密硫朦,不許丟包贷腕。可以對每一包發(fā)送的數(shù)據(jù)進行臨時保存咬展,在一定時間內(nèi)沒有接收到返回就發(fā)送第二次泽裳,發(fā)送三次后仍無返回即發(fā)送下一包數(shù)據(jù)或提示用戶等業(yè)務邏輯處理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挚赊,一起剝皮案震驚了整個濱河市诡壁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荠割,老刑警劉巖妹卿,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蔑鹦,居然都是意外死亡夺克,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門嚎朽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铺纽,“玉大人,你說我怎么就攤上這事哟忍〗泼牛” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵锅很,是天一觀的道長其馏。 經(jīng)常有香客問我,道長爆安,這世上最難降的妖魔是什么叛复? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上褐奥,老公的妹妹穿的比我還像新娘咖耘。我一直安慰自己,他們只是感情好撬码,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布儿倒。 她就那樣靜靜地躺著,像睡著了一般耍群。 火紅的嫁衣襯著肌膚如雪义桂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天蹈垢,我揣著相機與錄音,去河邊找鬼袖裕。 笑死曹抬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的急鳄。 我是一名探鬼主播谤民,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疾宏!你這毒婦竟也來了张足?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤坎藐,失蹤者是張志新(化名)和其女友劉穎为牍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岩馍,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡碉咆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛀恩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疫铜。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖双谆,靈堂內(nèi)的尸體忽然破棺而出壳咕,到底是詐尸還是另有隱情,我是刑警寧澤顽馋,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布谓厘,位于F島的核電站,受9級特大地震影響趣避,放射性物質(zhì)發(fā)生泄漏庞呕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望住练。 院中可真熱鬧地啰,春花似錦、人聲如沸讲逛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盏混。三九已至蔚鸥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間许赃,已是汗流浹背止喷。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留混聊,地道東北人弹谁。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像句喜,于是被迫代替她去往敵國和親预愤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容