1. 程式人生 > >BLE 藍芽 與APP 得互動 內設 外設

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



相關推薦

BLE APP 互動 內設 外設

藍芽設定  CoreBluetooth框架的核心其實是:peripheral和central,對應他們分別有一組相關的API和類 這兩組api粉筆對應不同的業務常見:左側叫中心模式,就是以你的app作為中心,連線其他的外設的場景;而右側稱為外設模式,使用`手機作為外設`

Android BLE4.0開發—Android手機BLE終端通訊

轉載自: https://blog.csdn.net/fu908323236/article/details/76208997 這篇部落格主要講解AndroidBLE藍芽4.0的基本概念,以及基礎用法。  BLE 即 Bluetooth Low Energy,藍芽低功耗技術,是藍芽

用AppInventor自制app通過pyboard nano做通訊(上)

** 用AppInventor自制app通過藍芽與pyb nano做通訊(上) ** App Inventor 原是Google實驗室(Google Lab)的一個子計劃,由一群Google工程師和勇於挑戰的Google使用者共同參與設計完成。Google Ap

IOS之BLE讀取資料寫入資料

1.本篇文章歸納了詳細的藍芽讀取,與藍芽寫入的通訊。 2.藉助公司最近一直研發藍芽裝置專案,博主一路走過來,也遇到不少的坑,希望在此能夠給予更多看官的幫助。 藍芽的讀取 UUID的主要類檔案,歸納放置在一個檔案:Constants.h #define APP

Android開發ble裝置的通訊

一、寫在前面的話 一直想寫一篇關於藍芽與ble裝置通訊的部落格,但是一直也不知道從何下手,可能是之前思路不清晰吧,也就一直拖拖拖,拖到現在。最近又做到關於ble裝置的專案了,在此總結一下吧。(如有不到位或者不太對的地方,希望各位多多指教) 二、關於藍

以面向物件的思維,搭建Androidble裝置併發通訊小框架

  此框架支援多種不同型別的ble裝置,同時連線、收發資料,互不干擾。比如APP同時連兩個LED藍芽燈、兩個手環、一個藍芽加熱器,當然連線單個ble裝置,或者只連線一種ble裝置同樣適用本框架。 前言   小白請繞道百度,本文適合有一定Android、ble藍芽、面向物件基礎的同學進階探討,只講關鍵技術點,細

IOS--swift BLE通訊管理(多裝置)

之前一直做的是Android,公司IOS端突然要同時進行多個專案,IOS同學表示壓力山大,所以臨危受命由我來完成專案中關於BLE通訊的功能模組,由於之前做過Android版本的,並且執行狀況良好,一直都比較穩定,因此分享出來,也希望大家能提出好的建議。 總共有4個swift檔案。 如圖

BlueTooth 4 0技術細節

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android BLE 快速開發框架。

FastBle 專案地址:Jasonchenlijian/FastBle  簡介:Android BLE 藍芽快速開發框架。 更多:作者   提 Bug    標籤: 藍芽- Thanks to th

app互動

export const connectWebViewJavascriptBridge = (callback) => { if (window.WebViewJavascriptBridge) { callback(WebViewJavascriptBridge) }

[原創]經驗分享,如何選擇一款適合你的低功耗BLE模組?

隨著智慧手機普及,及感測器的廣泛應用,低功耗藍芽得到大量使用。但由於天線方向有原因,許多客戶還是會選擇外購模組而不是自己來設計。再說如果用量不大,自己來設計而且還需要研發軟體,投入產出不成比,也沒多大必要。 那麼如何選擇一款適合的藍芽模組呢? 按照需求從大到小來羅列: 1

DIY手工-2D印表機(傳輸-APP控制)-畢業設計------(一)

        本人是名自動化專業學生,漸漸也到了畢業季,到了畢業季,除了花銷特別大好像也沒什麼了吧,哈哈,但是突然想起還有畢業設計,想起這幾年好像沒做過什麼成品的東西,尷尬,別人總是會問你做了什麼 ,我...... ,我還真反駁不了耶,好吧  我承認!        回顧

ble模組音訊資料透傳晶片ic選型對比說明

簡介 ble藍芽晶片模組的選型,無論是做半成品,還是做成品,我覺得選擇一個合適的方案,太重要了。選型的平衡點就是剛剛合適,既不浪費,也不要不夠。同時我覺得儘量選擇一些充分競爭的大品類的晶片,來做一些小眾市場的應用,其實這種方式是最優的。因為你可以享受到最大出貨量和充分競爭帶來

BlueTooth 4 0技術細節

  雖然藍芽(Bluetooth)3.0都還尚未完全普及,Bluetooth SIG(藍芽技術聯盟,Bluetooth Special InterestGroup,後文簡稱BluetoothSIG)卻又再次推出了藍芽4.0規範,並表示這又是藍芽發展史上一次重大的革新。值藍芽4.0推出之時,我們特地採訪了Blu

IOS Ble開發實現

1.本篇博文闡述如何開發Ble藍芽。在藍芽中的一些常見服務,掃描,以及連結; 主藍芽類檔案.h 主藍芽類檔案.m UUID檔案 藍芽列表展示的檔案 一:引入Ble藍芽的框架<CoreBluetooth/CoreBluetooth.h>

ble技術

/**   *搜尋BLE終端   *   */ public class BleManager{ private BluetoothManager bluetoothManager;     public static BluetoothAdapter mBluetoot

初學BLE底層開發的常識

藍芽微控制器 CC254x :完全支援BLE,採用經典51核心(C8051)。 EW 是 IAR Embedded Workbench 的簡稱,是C/C++的編譯環境和偵錯程式,應用於嵌入式系統的開發工具。 IAR 有各種平臺,我們開發cc2540用IAR for  80

[Android]三步實現聊天APP

先看下結構目錄   ChatService.java —— 藍芽連線 DeviceList.java   —— 裝置顯示 MainActivity.java—— 主介面 1.許可權 要獲取藍芽功能,先在AndroidManifest.x

android物聯網初步,利用手機微控制器通訊,實現led燈開關和定時

                轉載請註明出處。                 這次是一個課程設計,利用微控制器開發一個物聯網系統。我們利用了手機藍芽與單片機板子上的藍芽通訊,通過 控制訊號來控制微控制器上led燈的亮滅和定時。  網上有很多的搜尋藍芽的例程,大家可以自己

Android ble使用注意

以下均為自己在Android ble開發專案中遇到的問題 1.儘量不要在BluetoothGattCallback裡面的回撥函式中執行讀寫通知操作,最多一個,因為例如在onServicesDiscovered回撥函式中只會傳一個寫操作,不管裡面有多少個,而通知如setCharacteristicN