BLE 藍牙 與APP 得交互 內設 外設

藍牙設置 


CoreBluetooth框架的核心其實是:peripheral和central,對應他們分別有一組相關的API和類

這兩組api粉筆對應不同的業務常見:左側叫中心模式,就是以你的app作爲中心,連接其他的外設的場景;而右側稱爲外設模式,使用`手機作爲外設`連接其他中心設備操作的場景

服務和特徵(service andcharacteristic)

    * 每個設備都會有1個or多個服務

    * 每個服務裏都會有1個or多個特徵

       * 特徵就是具體鍵值對,提供數據的地方

    * 每個特徵屬性分爲:讀,寫,通知等等

- 外設,服務,特徵的關係

 

BLE中心模式流程

- 1.建立中心角色

- 2.掃描外設(Discover Peripheral)

- 3.連接外設(Connect Peripheral)

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

    * 4.1 獲取外設的services

    * 4.2 獲取外設的Characteristics,獲取characteristics的值,,獲取Characteristics的Descriptor和Descriptor的值

- 5.利用特徵與外設做數據交互(Explore And Interact)

- 6.訂閱Characteristic的通知

- 7.斷開連接(Disconnect)

BLE外設模式流程

- 1.啓動一個Peripheral管理對象

- 2.本地peripheral設置服務,特徵,描述,權限等等

- 3.peripheral發送廣告

- 4.設置處理訂閱,取消訂閱,讀characteristic,寫characteristic的代理方法

藍牙設備的狀態

- 1.待機狀態(standby):設備沒有傳輸和發送數據,並且沒有連接到任何外設

- 2.廣播狀態(Advertiser):週期性廣播狀態

- 3.掃描狀態(Scanner):主動搜索正在廣播的設備

- 4.發起鏈接狀態(Initiator):主動向掃描設備發起連接

- 5.主設備(Master):作爲主設備連接到其它設備.

- 6.從設備(Slave):作爲從設備鏈接到其它設備

藍牙設備的五種工作狀態

- 準備(Standby)              - 廣播(Advertising)

- 監聽掃描(Scanning)         - 發起連接(Initiating)

- 已連接(Connected)

牙和版本使用限制

- 藍牙2.0:越獄設備

- BLE:iOS6以上

- MFI認證設備:無限制

BLE測試

- 兩臺BLE設備

- 如何讓iOS模擬器也能測試BLE?

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

   * 在終端輸入sudo nvrambluetoothHostControllerSwitchBehavior="never"

      * 重啓Mac

      * 用Xcode4.6調試代碼,將程序跑在iOS6.1模擬器上

   * 蘋果把iOS7.0模擬器對BLE的支持移除了

BLE中心模式流程-coding

BLE中心模式流程

- 1.建立中心角色

- 2.掃描外設(Discover Peripheral)

- 3.連接外設(Connect Peripheral)

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

    * 4.1 獲取外設的services

    * 4.2 獲取外設的Characteristics,獲取characteristics的值,,獲取Characteristics、Descriptor和Descriptor的值

- 5.利用特徵與外設做數據交互(Explore And Interact)

- 6.訂閱Characteristic的通知

- 7.斷開連接(Disconnect)

- central模式用的都是左邊的類,而peripheral模式用的是右邊的類

 peripheral模式的流程

- 1.引入CoreBluetooth框架,初始化peripheralManager

- 2.設置peripheralManager中的內容

- 3.開啓廣播advertising

- 4.對central的操作進行響應

    - 4.1 讀characteristics請求

    - 4.2 寫characteristics請求

    - 4.4 訂閱和取消訂閱characteristics

-MFI:(make foriPhone/iPad/iTouch)專門爲蘋果設備製作的設備

- 支持MFI的設備開發使用此框架

iBeacon簡介

- iBeacon起源:蘋果在WWDC2013上正式推出了iBeacon,並且在iOS7設備商配置了該功能

- iBeacon應用:蘋果期望將其作爲一種技術標準,這個標準允許移動App(包括iOS和Android設備)監聽來自於iBeacon設備上的信號並作出響應.

- iBeacon設備:配備有BLE通信功能,並使用BLE向周圍發送自己特有的ID,移動設備上的App在接收到該ID後可以作出相應的反應.比如,我們在店鋪裏設置iBeacon發射器,便可以讓應用接收到信息並將這一信息通知給服務器,服務器向我們的App返回與該店鋪相關的產品或折扣信息.

- 本質上講,iBeacon技術允許App瞭解他們在某個局部範圍內的位置,並向用戶分發基於位置的超文本上下文內容.

MultipeerConnectivity

- 在iOS7中,引入了一個全新的框架——Multipeer Connectivity(多點連接)。

- 利用Multipeer Connectivity框架,即使在`沒有連接到WiFi(WLAN)或移動網絡(xG)`的情況下,距離較近的Apple設備(iMac/iPad/iPhone)之間可基於`藍牙和WiFi(P2P WiFi)`技術進行發現和連接實現近場通信。

- Multipeer Connectivity擴充的功能與利用AirDrop傳輸文件非常類似,可以將其看作AirDrop不能直接使用的補償,代價是需要自己實現。

- 手機不聯網也能跟附近的人聊得火熱的`FireChat`和`See You Around`等近場聊天App、近距離無網遙控交互拍照神器`拍咯App`就是基於Multipeer Connectivity框架實現。

- 相比AirDrop,Multipeer Connectivity在進行發現和會話時並不要求同時打開WiFi和藍牙,也不像AirDrop那樣強制打開這兩個開關,而是根據條件適時選擇使用藍牙或(和)WiFi。

- 粗略測試情況如下:

    * 雙方WiFi和藍牙`都未打開`:無法發現。

    * 雙方都開啓`藍牙`:通過藍牙發現和傳輸。

    * 雙方都開啓`WiFi`:通過WiFi Direct發現和傳輸,速度接近AirDrop(Reliable速率稍低),不知道同一WLAN下是否優先走局域網?

    * 雙方都`同時開啓了WiFi和藍牙`:應該是模擬AirDrop,通過低功耗藍牙技術掃描發現握手,然後通過WiFi Direct傳輸。

常用類

- MCPeerID

類似sockaddr,用於標識連接的兩端endpoint,通常是`暱稱或設備名稱`。該對象只開放了displayName屬性,私有MCPeerIDInternal對象持有的設備相關的_idString/_pid64字段並未公開

在許多情況下,客戶端同時廣播並發現同一個服務,這將導致一些混亂,尤其是在`client/server`模式中。所以,每一個服務都應有一個類型標示符——`serviceType,它是由ASCII字母、數字和“-”組成的短文本串,最多15個字符`。

 

-MCNearbyServiceAdvertiser

類似broadcaster,`可以接收,並處理用戶請求連接的響應。但是,這個類會有回調,告知有用戶要與您的設備連接,然後可以自定義提示框,以及自定義連接處理`。

主線程(com.apple.main-thread(serial))創建MCNearbyServiceAdvertiser並啓動startAdvertisingPeer。

MCNearbyServiceAdvertiserDelegate異步回調(didReceiveInvitationFromPeer)切換回主線程。

在主線程didReceiveInvitationFromPeer中創建MCSession並invitationHandler(YES,session)接受會話連接請求(accept參數爲YES)。

- MCNearbyServiceBrowser

類似servo listen+clientconnect,`用於搜索附近的用戶,並可以對搜索到的用戶發出邀請加入某個會話中`。

主線程(com.apple.main-thread(serial))創建MCNearbyServiceBrowser並啓動startBrowsingForPeers。

MCNearbyServiceBrowserDelegate異步回調(foundPeer/lostPeer)切換回主線程。

主線程創建MCSession並啓動invitePeer。

 

- MCSession

`啓用和管理Multipeer連接會話中的所有人之間的溝通。 通過Sesion,給別人發送數據`

注意,peerID並不具備設備識別屬性。

類似TCP鏈接中的socket。創建MCSession時,需指定自身MCPeerID,類似bind。

爲避免頻繁的會話數據通知阻塞主線程,MCSessionDelegate異步回調(didChangeState/didReceiveCertificate/didReceiveData/didReceiveStream)有一個專門的回調線程——com.apple.MCSession.callbackQueue(serial)。爲避免阻塞MCSeesion回調線程,最好新建數據讀(寫)線程!

 

-MCAdvertiserAssistant/MCBrowserViewController

`MCAdvertiserAssistant   //可以接收,並處理用戶請求連接的響應。沒有回調,會彈出默認的提示框,並處理連接。`

`MCBrowserViewController彈出搜索框,需要手動modal`

 

MCAdvertiserAssistant爲針對Advertiser封裝的管理助手;MCBrowserViewController繼承自UIViewController,提供了基本的UI應用框架。

MCBrowser/MCAdvertiser的回調線程一般是delegate所在線程Queue:com.apple.main-thread(serial)。

 

iOS中的藍牙

概述:OS中提供了4個框架用於實現藍牙連接

 

- 1.GameKit.framework(用法簡單)

    * `只能用於iOS設備之間的同個應用內連接`,多用於遊戲(eg.拳皇,棋牌類),從`iOS7開始過期`

-2.MultipeerConnectivity.framework(代替1)

    * `只能用於iOS設備之間的連接,從iOS7開始引入`,主要用於`非聯網狀態`下,通過wifi或者藍牙進行文件共享(僅限於沙盒的文件),多用於附近無網聊天

- 3.ExternalAccessory.framework(MFi)

    * `可用於第三方藍牙設備交互`,但是藍牙設備必須經過`蘋果MFi認證`(國內很少)

-4.CoreBluetooth.framework(時下熱門)

    * `可用於第三方藍牙設備交互`,必須要支持藍牙4.0

    * 硬件至少是4s,系統至少是iOS6

    * 藍牙4.0以低功耗著稱,一般也叫BLE(Bluetooth Low Energy)

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

設計到的系統/框架

- HealthKit/物聯網HomeKit/wathOS1,2/iBeacon



發佈了72 篇原創文章 · 獲贊 10 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章