iOS藍芽開發CoreBluetooth快速入門
在iOS開發中,實現藍芽通訊有兩種方式,一種是使用傳統的GameKit.framework,另一種就是使用在iOS 5中加入的CoreBluetooth.framework。
利用CoreBluetooth框架,我們可以輕鬆實現兩個iOS裝置、iOS裝置與非iOS藍芽裝置的互動。要注意的一點是目前這個框架只能支援藍芽4.0BLE標準,所以對硬體上是有一定要求的,iPhone 4S及以後的裝置,第三代iPad及以後的裝置是支援這一標準的。
術語解釋
我們首先看一下CoreBluetooth框架的結構。這是CoreBluetooth/CoreBluetooth.h檔案中的宣告。
1 2 3 4 |
#ifndef _CORE_BLUETOOTH_H_
#define _CORE_BLUETOOTH_H_
#endif
#import #import #import #import #import #import #import #import #import #import #import
|
其中,CBCentral開頭的都是中心裝置類,CBPeripheral開頭的都是外設類。這就要講到藍芽裝置的兩個角色了。
-
中心裝置:中心裝置可以理解為是處理資料的iOS裝置,比如你的 iPhone、iPad 等。
-
外設:外設顧名思義,就是產生資料的外部裝置。這個外部裝置可以是微控制器、嵌入式裝置甚至是另一個iOS裝置等等。外設可以通過其感測器等產生有用資料,資料後通過藍芽傳給中心裝置使用。
在建立連線的之前,外設向外發出廣播資料(advertisementData,官方描述“A dictionary containing any advertisement and scan response data.”),廣播資料是一個字典類資料,中心裝置可以獲取一定範圍內的外設發出的廣播資料。
現在開始
初始化
為了使用CoreBluetooth框架中的回撥方法,我們要使用CBCentralManagerDelegate、CBPeripheralDelegate這兩個協議。
我們先要初始化一個CBCentralManager類的物件。程式碼如下:
1 2 3 4 5 6 7 |
@interface SKBluetoothManager : NSObject{
CBCentralManager *manager;
id delegate;
}
manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
manager.delegate = self;
|
掃描外設
初始化完成,我們就可以讓管理器開始掃描外設了:
1 |
[manager scanForPeripheralsWithServices:nil options:nil];
|
在裝置發現周圍外設的advertisementData後,會回撥這個方法:
1 |
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI;
|
其中引數central指回調這個方法的中心裝置,peripheral指發現的外設物件CBPeripheral,advertisementData就是前面說的字典型別廣播資料,RSSI是當前外設的訊號強度,單位是dbm。
剛開始對陌生的藍芽裝置除錯時,建議我們先用一個數組NSArray將所掃描到的外設進行儲存:
1 |
[_peripherals addObject:peripheral];
|
連線外設
儲存後,可根據裝置的UUID來確定該裝置是否為我們需要進行操作的藍芽裝置,在確認外設身份後,即可發起對外設的連線操作:
1 2 3 4 5 6 |
if ([peripheral.identifier.UUIDString isEqualToString:kPeripheralUUID]) {
[manager stopScan];
[manager connectPeripheral:peripheral options:nil];
NSLog(@ "連線外設:%@" ,peripheral.description);
self.peripheral = peripheral;
}
|
在此步操作後,我們完成了對藍芽裝置的掃描工作,接下來的回撥方法分為兩種情況:
連線到外設後