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 BLE藍芽4.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裝置的專案了,在此總結一下吧。(如有不到位或者不太對的地方,希望各位多多指教) 二、關於藍
以面向物件的思維,搭建Android與多ble藍芽裝置併發通訊小框架
此框架支援多種不同型別的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