iOS中藍牙的實現方案

iOS中提供了4個框架用於實現藍牙鏈接網絡

GameKit.framework(用法簡單)session

只能用於iOS設備之間的鏈接,多用於遊戲(好比五子棋對戰),從iOS7開始過時框架

 

MultipeerConnectivity.framework性能

只能用於iOS設備之間的鏈接,從iOS7開始引入,主要用於文件共享(僅限於沙盒的文件)測試

 

ExternalAccessory.framework代理

可用於第三方藍牙設備交互,可是藍牙設備必須通過蘋果MFi認證(國內較少)調試

 

CoreBluetooth.framework(時下熱門)code

可用於第三方藍牙設備交互,必需要支持藍牙4.0遊戲

硬件至少是4s,系統至少是iOS6ip

藍牙4.0以低功耗著稱,通常也叫BLE(Bluetooth Low Energy)

目前應用比較多的案例:運動手壞、嵌入式設備、智能家居

 

GameKit框架簡介

使用GameKit框架,能夠在遊戲中增長對等鏈接,又稱對端鏈接或點對點鏈接,Peer To Peer。

使用GameKit框架中的對等網絡鏈接API,能夠在遊戲玩家之間創建一個對等網絡,並在遊戲/應用實例之間交換數據。

GameKit框架可使用藍牙在玩家之間建立網絡,玩家甚至不須要鏈接到互聯網,就能夠彼此對戰。

經過藍牙實現對等網絡鏈接

爲玩家雙方呈現一個GKPeerPickerController,提供了一個標準的用戶界面鏈接兩臺設備

ViewControoler遵循GKPeerPickerControllerDelegate協議,處理來自GKPeerPickerController(對端選擇器)的信息

創建鏈接後,使用GKSession類能夠向對端設備發送數據

在receiveData:fromPeer:inSession:context代理方法中編寫代碼來處理接收到的數據

藍牙對等網絡演練——發送照片(1)

演練目標:經過藍牙彼此發送照片

演練步驟:

1.  基於照片選擇項目進行擴展,僅從照片庫選擇照片

2. 添加GameKit框架

3. 建立對等鏈接

3.1 實例化對端選擇器

3.2 設置代理,並遵循協議

3.3 顯示對端選擇器

4. 鏈接創建代理方法

peerPickerController:didConnectPeer:toSession:

4.1記錄對端鏈接會話

4.2 設置數據接收處理

4.3 關閉對端選擇器

 GameKit的藍牙開發步驟

顯示能夠鏈接的藍牙設備列表

GKPeerPickerController *ppc = [[GKPeerPickerController alloc] init];

ppc.delegate = self;

[ppc show];

 

在代理方法中監控藍牙的鏈接

- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session {

    NSLog(@"鏈接到設備:%@", peerID);

    // 關閉藍牙設備顯示界面

    [picker dismiss];

    // 設置接收到藍牙數據後的監聽器

    [session setDataReceiveHandler:self withContext:nil];

    // 保存session

    self.session = session;

}

GameKit的藍牙開發步驟

處理接收到的藍牙數據

- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context {

 

}

利用GKSession給其餘設備發送數據

給指定的鏈接設備發送數據

- (BOOL)sendData:(NSData *) data toPeers:(NSArray *)peers withDataMode:(GKSendDataMode)mode error:(NSError **)error;

給全部鏈接的設備發送數據

- (BOOL)sendDataToAllPeers:(NSData *) data withDataMode:(GKSendDataMode)mode error:(NSError **)error;

GameKit的藍牙開發注意

只能用於iOS設備之間的鏈接

只能用於同一個應用程序之間的鏈接

最好別利用藍牙發送比較大的數據

 

Core Bluetooth

Core Bluetooth測試比較麻煩,正常狀況下,得至少有2臺真實的藍牙4.0設備

如何讓iOS模擬器也能測試藍牙4.0程序?

買一個CSR藍牙4.0 USB適配器,插在Mac上

在終端輸入sudo nvram bluetoothHostControllerSwitchBehavior="never"

重啓Mac

用Xcode 4.6調試代碼,將程序跑在iOS 6.1的模擬器上

(蘋果把iOS 7.0模擬器對BLE的支持移除掉了)

 

Core Bluetooth的使用場景

運動手環、智能家居、嵌入式設備等等(金融刷卡器、心電測量器)

Core Bluetooth的基本常識

每一個藍牙4.0設備都是經過服務(Service)和特徵(Characteristic)來展現本身的

一個設備必然包含一個或多個服務,每一個服務下面又包含若干個特徵

 

特徵是與外界交互的最小單位

好比說,一臺藍牙4.0設備,用特徵A來描述本身的出廠信息,用特徵B來收發數據

 

服務和特徵都是用UUID來惟一標識的,經過UUID就能區別不一樣的服務和特徵

 

設備裏面各個服務(service)和特徵(characteristic)的功能,均由藍牙設備硬件廠商提供,好比哪些是用來交互(讀寫),哪些可獲取模塊信息(只讀)等

 

Core Bluetooth的開發步驟

 

創建中心設備

 

掃描外設(Discover Peripheral)

 

鏈接外設(Connect Peripheral)

 

掃描外設中的服務和特徵(Discover Services And Characteristics)

 

利用特徵與外設作數據交互(Explore And Interact)

 

斷開鏈接(Disconnect)

藍牙的現狀

 

絕大多數智能手機支持藍牙 4.0(BLE)

 

藍牙芯片發展迅速,在性能和效率方面都有很大提升,且不斷變得更小更便宜

 

iBeacon + 藍牙,前景一片光明

應用之一:室內導航

Estimote公司爲iBeacon提供基站

3個iBeacon基站的預購價格爲99美圓(約合人民幣610元)

Estimote公司推出的iBeacon基站的最遠傳輸距離爲50m,可是他們推薦在10m範圍內的使用效果最好

 

一塊鈕釦電池就能爲一個iBeacon基站提供長達 2 年的使用壽命,並且是在設備不斷對外發射信號的狀況下

相關文章
相關標籤/搜索