iOS藍芽4 0入門

2021-07-03 15:45:07 字數 4582 閱讀 4453

一 藍芽介紹

隨著藍芽低功耗技術ble(bluetooth low energy)的發展,藍芽技術正在一步步成熟,如今的大部分移動裝置都配備有藍芽4.0,相比之前的藍芽技術耗電量大大降低。從ios的發展史也不難看出蘋果目前對藍芽技術也是越來越關注,例如蘋果於2023年9月發布的ios7就配備了ibeacon技術,這項技術完全基於藍芽傳輸。但是眾所周知蘋果的裝置對於許可權要求也是比較高的,因此在ios中並不能像android一樣隨意使用藍芽進行檔案傳輸(除非你已經越獄)。在ios中進行藍芽傳輸應用開發常用的框架有如下幾種:

gamekit.framework:ios7之前的藍芽通訊框架,從ios7開始過期,但是目前多數應用還是基於此框架。

multipeerconnectivity.framework:ios7開始引入的新的藍芽通訊開發框架,用於取代gamekit。

corebluetooth.framework:功能強大的藍芽開發框架,要求裝置必須支援藍芽4.0。

前兩個框架使用起來比較簡單,但是缺點也比較明顯:僅僅支援ios裝置,傳輸內容僅限於沙盒或者**庫中使用者選擇的檔案,並且第乙個框架只能在同乙個應用之間進行傳輸(乙個ios裝置安裝應用a,另乙個ios裝置上安裝應用b是無法傳輸的)。當然corebluetooth就擺脫了這些束縛,它不再侷限於ios裝置之間進行傳輸,你可以通過ios裝置向android、windows phone以及其他安裝有藍芽4.0晶元的智慧型裝置傳輸,因此也是目前智慧型家居、無線支付等熱門智慧型裝置所推崇的技術。

本文要介紹的

corebluetooth從

iphone4s開始支援,專門用於與ble裝置通訊。

二 裝置和特徵

什麼是服務和特徵呢(service and characteristic)?

每個藍芽4.0的裝置都是通過服務和特徵來展示自己的,乙個裝置必然包含乙個或多個服務,每個服務下面又包含若干個特徵。特徵是與外界互動的最小單位。比如說,一台藍芽4.0裝置,用特徵a來描述自己的出廠資訊,用特徵b來與收發資料等。

服務和特徵都是用uuid來唯一標識的,uuid的概念如果不清楚請自行google,國際藍芽組織為一些很典型的裝置(比如測量心跳和血壓的裝置)規定了標準的service uuid。例如,我所用的裝置uuiid如下

#define     ble_service_uuid       @"9f989d1f-9e7b-b4d7-9322-59f2dcc2d646"

三 實現過程

1 建立中心角色

首先在我自己類的標頭檔案中要包含corebluetooth的標頭檔案,並繼承兩個協議,**如下:

[objc]view plain

copy

#import 

cbcentralmanager

*manager;  

manager = [[cbcentralmanageralloc

]initwithdelegate

:self

queue

:nil]

2 掃瞄外設(discover)

//步驟2 掃瞄

[self.manager scanforperipheralswithservices:nil options:nil];

3連線外設(connect)

- (void)centralmanager:(cbcentralmanager *)central diddiscoverperipheral:(cbperipheral *)peripheral advertisementdata:(nsdictionary *)advertisementdata rssi:(nsnumber *)rssi

}

//連線指定的裝置  

-(bool)connect:(cbperipheral *)peripheral

4掃瞄外設中的服務和特徵(discover)

- (void)centralmanager:(cbcentralmanager *)central didconnectperipheral:(cbperipheral *)peripheral  

- (void)peripheral:(cbperipheral *)peripheral diddiscoverservices:(nserror *)error  

for (cbservice *service in peripheral.services)

} }

- (void

)peripheral:(

cbperipheral

*)peripheral

diddiscovercharacteristicsforservice

:(cbservice

*)service

error

:(nserror

*)error   

for(cbcharacteristic

*characteristic in service

.characteristics

)    

}  for

(cbcharacteristic

* characteristic in service

.characteristics

)    

}  if

([self

.delegate

respondstoselector

:@selector

(didfoundcharacteristic:withperipheral:error:)])  

[self

.delegate

didfoundcharacteristic

:nil

withperipheral

:nil

error

:nil

];  

}  

5與外設做資料互動(explore and interact)

-(

void

)msrread  

;  unsigned char

char

*ptmp;  

intnsendlen = 

0;  

unsigned char

uccrc[

3] = ;  

_commandtype = command_msr_read;  

ptmp = command;  

*ptmp = 0x0

2;//start

ptmp++;  

*ptmp = 0xc1

;//main cmd

ptmp++;  

*ptmp = 0x0

7;//sub cmd

ptmp++;  

nsendlen = 2

;  *ptmp = nsendlen/256

;  ptmp++;  

*ptmp = nsendlen%256

;  ptmp++;  

*ptmp = 0x0

0;//sub cmd

ptmp++;  

*ptmp = 0x0

0;//sub cmd

ptmp++;  

crc1

6ccitt(command+

1,ptmp-command-

1,uccrc);  

memcpy(ptmp,uccrc,2

);  

nsdata

*data = [[nsdata

alloc

]initwithbytes

:&command

length:9

];  

nslog(@"send data:%@"

, data);  

[g_bleinstance.recvdata

setlength:0

];  

[g_bleinstancewritechar

:data];  

}  

//收到資料

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

// nslog(@"收到的資料:%@",characteristic.value);

[self decodedata:characteristic.value];

}

// 解碼返回的資料

- (void)decodedata:(nsdata *)receivedata

6斷開連線(disconnect)。

if (self.peripheral != nil)

iOS藍芽4 0開發 BLE

模型與corebluetooth的對應關係 這裡主要討論模型一,這也是當前大多數手環裝置和ios 互動的方式 開發流程 1.建立工程,匯入corebluetooth.framework 2.初始化 cbcentralmanager 並準備掃瞄周圍藍芽裝置 初始化 themanager cbcentr...

iOS藍芽4 0 BLE 開發

本文將一步一步講解如何使用corebluetooth框架來與各種可穿戴裝置進行通訊,使用 小公尺手環 來進行基本的測試。macbook pro mac os x 10.10 xcode 6.3.2 iphone 5s v8.1 小公尺手環 從上面這幅圖可以看到,我們的ios裝置是central,用來...

iOS藍芽4 0開發01 前期準備

根據實際需求選擇藍芽4.0,蘋果開放了ble通道,支援藍芽4.0的裝置都可以被檢索到,4.0之前的只能是ios裝置和mfi認證的裝置才能被檢索到。引用 開發準備工作,使用xcode的模擬器來對ble 藍芽4.0 進行除錯工作,需買乙個支援mac的csr藍芽4.0介面卡。引用 0808說明,因為出現6...