聲明:這篇文章是樓主beautifulzzzz學習網上關于藍牙的相關知識的筆記,其中比較多的受益于xubin341719的藍牙系列文章,同時還有其他網上作者的資料。由于有些文章隻做參考或統計不足,如涉及版權請在下面留言~。同時我也在部落格分類中建立一個藍牙通信分類,用來研究分享藍牙相關技術。
主要參考資料的來源:xubin341719[下面是該前輩的BT系列文章]
下載下傳連接配接:Bluetooth PROFILE SPECIFICATIONS (基本涵蓋所有藍牙協定)、buletooth core 2.1-4.0 SPECIFICATION(三藍牙版本的核心協定v2.1\v3.0\v4.0)、藍牙核心技術與應用 馬建倉 版(藍牙協定相關初學者必讀,開發者參考)
藍牙核心技術概述(一):藍牙概述
藍牙核心技術概述(二):藍牙使用場景
藍牙核心技術概述(三): 藍牙協定規範(射頻、基帶鍊路控制、鍊路管理)
藍牙核心技術概述(四):藍牙協定規範(HCI、L2CAP、SDP、RFOCMM)
藍牙核心技術概述(五):藍牙協定規範(irOBEX、BNEP、AVDTP、AVCTP)
有道筆記分享連結:http://note.youdao.com/share/?id=950d00cefa9b7fd3c559eec349805b24&type=note
下面是摘抄筆記内容:
藍牙,是一種支援裝置短距離通信(一般10m内)的無線電技術。能在包括行動電話、PDA、無線耳機、筆記本電腦、相關外設等衆多裝置之間進行無線資訊交換。利用“藍牙”技術,能夠有效地簡化移動通信終端裝置之間的通信,也能夠成功地簡化裝置與網際網路Internet之間的通信,進而資料傳輸變得更加迅速高效,為無線通信拓寬道路。藍牙采用分散式網絡結構以及快跳頻和短包技術,支援點對點及點對多點通信,工作在全球通用的2.4GHz ISM(即工業、科學、醫學)頻段。其資料速率為1Mbps。采用時分雙工傳輸方案實作全雙工傳輸。
Bluetooth的系統構成

1、無線射頻單元(Radio):負責資料和語音的發送和接收,特點是短距離、低功耗。藍牙天線一般體積小、重量輕,屬于微帶天線。
2、基帶或鍊路控制單元(LinkController):進行射頻信号與數字或語音信号的互相轉化,實作基帶協定和其它的底層連接配接規程。
3、鍊路管理單元(LinkManager):負責管理藍牙裝置之間的通信,實作鍊路的建立、驗證、鍊路配置等操作。
4、藍牙軟體協定實作:如上圖紫色部分,這個後面我們做詳細說明。
低耗電藍牙相關規範
(二)藍牙協定組成
2.1 藍牙協定架構
藍牙協定體系中的協定按SIG的關注程度分為四層:
1.核心協定:BaseBand、LMP、L2CAP、SDP;
2.電纜替代協定:RFCOMM;
3.電話傳送控制協定:TCS-Binary、AT指令集;
4.選用協定:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、WAE。
除上述協定層外,規範還定義了主機控制器接口(HCI),它為基帶控制器、連接配接管理器、硬體狀态和控制寄存器提供指令接口。在圖1中,HCI位于L2CAP的下層,但HCI也可位于L2CAP上層。
藍牙核心協定由SIG制定的藍牙專用協定組成。絕大部分藍牙裝置都需要核心協定(加上無線部分),而其他協定則根據應用的需要而定。總之,電纜替代協定、電話控制協定和被采用的協定在核心協定基礎上構成了面向應用的協定。
藍牙協定棧允許采用多種方法,包括 RFCOMM 和 Object Exchange (OBEX ), 在裝置之間發送和接收檔案。如果想發送和接收流資料(而且想采用傳統的序列槽應用程式,并給它加上藍牙支援),那麼 RFCOMM 更好。反過來,如果想發送對象資料以及關于負載的上下文和中繼資料,則 OBEX 最好。
藍牙應用程式活動圖,如下:
2.1.1 序列槽仿真RFCOMM介紹
藍牙—RFCOMM協定
找到服務,RFCOMM是通過不同的頻道(channel)來提供不同的Profile的,是以需要找到要用的服務在裝置上的哪個頻道上,這是通過同一個軟體包裡的sdptool來完成的,就是SDP,服務發現協定
2.2 藍牙profile
2.2.1 藍牙profile概述
參考 對藍牙profile的了解
從3.0版本開始(據說2.1也是支援的?TBD),藍牙才開始支援BluetoothProfile。BluetoothProfile是藍牙裝置間資料通信的無線接口規範。想要使用藍牙無線技術,裝置必須能夠翻譯特定藍牙配置檔案,配置檔案定義了可能的應用.
藍牙配置檔案表達了一般行為,藍牙裝置可以通過這些行為與其他裝置進行通信.
藍牙技術定義了廣泛的配置檔案,描述了許多不同類型的使用安全.按藍牙規格中提供的指導,開發商可建立應用程式以用來與其他符合藍牙規格的裝置協同工作.在最低限度下,各配置檔案規格應包含下列主題的相關資訊.
① 與其他配置檔案的相關性
② 建議的使用者界面格式
③ 配置檔案使用的藍牙協定堆棧的特定部分.
為執行其任務,每個配置檔案都使用堆棧各層上的特定選項和參數.若需要,也可包括必需的服務記錄概要。ProfilesAPI層則分别對Audio、Data、Control等提供了不同的子產品。目前已規範有四大類、十三種協定規格。
Bluetooth的一個很重要特性,就是所有的Bluetooth産品都無須實作全部的Bluetooth規範。為了更容易的保持Bluetooth裝置之間的相容,Bluetooth規範中定義了Profile。Profile定義了裝置如何實作一種連接配接或者應用,你可以把Profile了解為連接配接層或者應用層協定。
❤ 常用的profile介紹請參考“藍牙Profile的概念和常見種類”,幾種種最基本的配置檔案為:
1.通用通路配置檔案(Generic Access Profile, GAP)
GAP是所有其他配置檔案的基礎,它定義了在藍牙裝置間建立基帶鍊路的通用方法.除此之外,GAP還定義了下列内容:
① 必須在所有藍牙裝置中實施的功能
② 發現和連結裝置的通用步驟
③ 基本使用者界面術語.
GAP確定了應用程式和裝置間的高度互操作性,還允許開發人員利用現有的定義更加容易地定義新的配置檔案.GAP處理未連接配接的兩個裝置間的發現和建立連接配接過程.此配置檔案定義了一些通用的操作,這些操作可供引用GAP的配置檔案,以及實施多個配置檔案的裝置使用.GAP確定了兩個藍牙裝置可通過藍牙技術交換資訊,以發現彼此支援的應用程式.不符合任何其他藍牙配置檔案的藍牙裝置必須與GAP符合以確定基本的互操作性和共存.
2.服務發現應用配置檔案(Service Discovery Application Profile, SDAP)
SDAP描述了應用程式如何使用SDP發現遠端裝置上的服務.由于GAP的要求,任何藍牙裝置都應能夠連接配接至其他藍牙裝置.基于此,SDAP要求任何應用程式都應當能夠發現它要連接配接的其他藍牙裝置上的可用服務.此配置檔案可承擔搜尋已知和特定服務及一般的任務.SDAP涉及了稱為“服務發現使用者應用程式”的一個應用程式,這是藍牙裝置查找服務所必需的.此應用程式可與向/從其他藍牙裝置發送/接收服務查詢的SDP相接.SDAP依賴于GAP,并可以重新使用部分GAP.
3.串行端口配置檔案(Serial Port Profile, SPP)
SPP定義了如何設定虛拟串行端口及如何連接配接兩個藍牙裝置.SPP基于ETSI TS 07.10規格,使用RFCOMM協定提供串行商品仿真.SPP提供了以無線方式替代現有的RS-232串行通信應用程式和控制信号的方法.SPP為DUN,FAX,HSP和LAN配置檔案提供了基礎.此配置檔案可以支援最高128kb/s的資料率.SPP依賴于GAP.
4.通用對象交換配置檔案(Generic Object Exchange Profile, GOEP)
GOEP可用于将對象從一個裝置傳輸到另一個裝置.對象可以是任意的.如:圖檔,文檔,名片等.此配置檔案定義了兩個角色:提供拉提或推送對象位置的伺服器及啟動操作的用戶端.使用GOEP的應用程式假定鍊路和信道已按GAP的定義建立.GOEP依賴于串行端口配置檔案.
GOEP為使用OBEX協定的其他配置檔案提供了通用藍圖,并為裝置定義了用戶端和伺服器角色.對于所有的OBEX事務.GOEP規定應由用戶端啟動所有事務.但是此配置檔案并沒有描述應用程式就如何定義要交換的對象或如何實施交換.這些細節留給屬于GOEP的配置檔案.即OPP,FTP和SYNC去完成.通常使用此配置檔案的藍牙裝置為筆記本電腦,PDA,手機及智能電話.
注意:藍牙1.1版本規範所有藍牙裝置的最小實作必須支援通用通路配置檔案,服務發現應用配置檔案和串行端口配置檔案.
在兩台電腦或者Labtop之間就可以建立這種連接配接,如下圖所示:
SPP是基于RFCOMM的,spp 協定處于rfcomm的上層,spp的應用需走rfcomm層。如果你使用RFCOMM能夠實作,那麼也就不需要使用SPP,而卻速度還會比SPP來做快,因為省略了采用profile的一些資料標頭等。不過,還是推薦采用SPP來做,相容性有保證,這也是為什麼藍牙本質上資料和語音的傳送卻出現HFP,HSP,SPP,OPP等諸多具體應用profile的原因。
Bluez SPP實作代碼分析
2.2.2 藍牙profile架構
每個attribute屬性被UUID(通用唯一辨別符)唯一辨別 ,UUID是标準128-bit格式的ID用來唯一辨別資訊。attributes 被 ATT 格式化characteristics和services形式進行傳送。
特征(Characteristics)— 一個characteristics包含一個單獨的value值和0 –n個用來描述characteristic 值(value)的descriptors。一個characteristics可以被認為是一種類型的,類似于一個類。
描述符(descriptor)—descriptor是被定義的attributes,用來描述一個characteristic的值。例如,一個descriptor可以指定一個人類可讀的描述中,在可接受的範圍裡characteristic值,或者是測量機關,用來明确characteristic的值。
服務(service)—service是characteristic的集合。例如,你可以有一個所謂的“Heart RateMonitor”service,其中包括characteristic,如“heart rate measurement ”。你可以在 bluetooth.org找到關于一系列基于GATT的profile和service。
如上圖所示:藍牙裝置可以包括多個Profile,一個Profile中有多個Service,一個Service中有多個Characteristic,一個Characteristic中包括一個value和多個Descriptor。
profile架構和android低功耗藍牙管理和使用簡介
2.3 藍牙4.0和4.1
它們有什麼差别?全面解析藍牙技術4.0和4.1标準
♪ 藍牙4.0實際是個三位一體的藍牙技術,它将傳統藍牙、低功耗藍牙和高速藍牙技術融合在一起,這三個規格可以組合或者單獨使用。也就是說 BLE是藍牙4.0增加的,之前沒有?(TBD)
藍牙4.0專門面向對成本和功耗都有較高要求的無線方案,其主打特性就是省電、省電、省電。極低的運作和待機功耗使得一粒紐扣電池甚至可連續工作一年之久。它有低功耗、經典、高速三種協定模式。其中:高速藍牙主攻資料交換與傳輸;經典藍牙則以資訊溝通、裝置連接配接為重點;低功耗藍牙以不需占用太多帶寬的裝置連接配接為主。這三種協定規範能夠互相組合搭配,進而适應更廣泛的應用模式。正因為有了三種可以互相組合搭配的協定,藍牙4.0是以成為唯一一個綜合協定規範。它有着極低的運作和待機功耗。此外,低成本和跨廠商互操作性,3毫秒低延遲、AES-128加密等諸多特色,可以用于計步器、心律螢幕、智能儀表、傳感器物聯網等衆多領域,大大擴充藍牙技術的應用範圍。
♪ 藍牙4.1主打IOT(Internet Of Things全聯網),最新的藍牙4.1标準是個很有前途的技術,其智能、低功耗、高傳輸速度、連接配接簡單的特性将适合用在許多新興裝置上。
藍牙4.1裝置可以同時作為發射方和接受方,并且可以連接配接到多個裝置上。舉個例子,智能手表可以作為發射方向手機發射身體健康指數,同時作為接受方連接配接到藍牙耳機、手環或其他裝置上。藍牙4.1使得批量資料可以以更高的速率傳輸,當然這并不意味着可以用藍牙高速傳輸流媒體視訊,這一改進的主要針對的還是剛剛興起的可穿戴裝置。例如已經比較常見的健康手環,其發送出的資料流并不大,通過藍牙4.1能夠更快速地将跑步、遊泳、騎車過程中收集到。因為新标準加入了對IPv6專用通道聯機的支援,通過IPv6連接配接到網絡,實作與Wi-Fi相同的功能,解決可穿戴裝置上網不易的問題。
藍牙4.0和藍牙4.1的比較
2.3.1 藍牙4.0低功耗(BLE)
TI低功耗藍牙(BLE)介紹
① 低功耗藍牙Bluetooth Low Energy(BLE)是藍牙4.0增加的。(?TBD) ,蘋果系列都支援4.0.
② Android4.3(API級别18)引入内置平台支援BLE的central角色,同時提供API和app應用程式用來發現裝置,查詢服務,和讀/寫characteristics。與傳統藍牙(ClassicBluetooth)不同,藍牙低功耗(BLE)的目的是提供更顯著的低功耗。這使得Android應用程式可以和具有低功耗的要求BLE裝置,如接近傳感器,心髒速率螢幕,健身裝置等進行通信。
③ BLE低功耗藍牙軟體有2個主要組成: OSAL作業系統抽象層和 HAL硬體抽象層,多個Task任務和事件在OSAL管理下工作,而每個任務和事件又包括3個組成:BLE 協定棧,profiles和應用程式。
BLE藍牙協定棧結構
附圖1 BLE藍牙協定棧結構圖
分為兩部分:控制器和主機。對于4.0以前的藍牙,這兩部分是分開的。所有profile(姑且稱為劇本吧,用來定義裝置或元件的角色)和應用都建構在GAP或GATT之上。下面由結構圖的底層元件開始介紹。
附圖 2 BLE低功耗藍牙系統架構圖,圖中的Task用附圖1BLE藍牙協定棧結構圖來描述
通用屬性規範(GATT)—GATTprofile是一個通用規範用于在BLE鍊路發送和接收被稱為“屬性(attributes)”的資料片。目前所有的低功耗應用 profile都是基于GATT。
藍牙SIG定義了許多profile用于低功耗裝置。Profile(配置檔案)是一個規範,規範了裝置如何工作在一個特定的應用場景。注意:一個裝置可以實作多個profile。例如,一個裝置可以包含一個心髒監測儀和電池電平檢測器。
主從機連接配接建立過程:
2.3.2 藍牙4.0(BLE)主從通信透傳子產品
低功耗藍牙子產品主透傳協定是針對低功耗藍牙子產品從透傳協定設計的,通過本協定子產品可替代手機裝置與從透傳協定子產品連接配接,實作透傳功能或直驅控制功能。此協定子產品可用作從透傳協定子產品開發過程中的輔助工具。
BLE主透傳協定子產品(以下簡稱MTTM)可以工作在透傳模式(TTM)或指令模式(CM)。
MTTM上電啟動後,處于待機模式(SBM),此時處于空閑狀态,無睡眠,需要使用者通過AT指令控制子產品連接配接從裝置。在成功與從裝置建立連結後,MTTM會自動查找從裝置的透傳通道,如果從裝置屬于BLE從透傳協定子產品(以下簡稱STTM),MTTM預設進入透傳模式,否則預設進入指令模式。
透傳模式下,使用者CPU可以通過子產品的通用序列槽與STTM進行雙向通訊。從MTTM序列槽輸入的資料将轉發到STTM,并從STTM的序列槽輸出;從STTM輸入的資料将轉發到MTTM,并從MTTM的序列槽輸出,進而實作透明傳輸功能,使用者資料的具體含義由上層應用程式自行定義。
透傳中資料的格式也是profile,或藍牙标準profile或自定義simple profile。基本結構依然是:
1、profile
profile可以了解為一種規範,一個标準的通信協定,它存在于從機中。藍牙組織規定了一些标準的profile,例如 HID OVER GATT ,防丢器 ,心率計等。每個profile中會包含多個service,每個service代表從機的一種能力。
2、service
service可以了解為一個服務,在ble從機中,通過有多個服務,例如電量資訊服務、系統資訊服務等,每個service中又包含多個characteristic特征值。每個具體的characteristic特征值才是ble通信的主題。比如目前的電量是80%,是以會通過電量的characteristic特征值存在從機的profile裡,這樣主機就可以通過這個characteristic來讀取80%這個資料
3、characteristic
characteristic特征值,ble主從機的通信均是通過characteristic來實作,可以 了解為一個标簽,通過這個标簽可以擷取或者寫入想要的内容。
4、UUID
UUID,統一識别碼,我們剛才提到的service和characteristic,都需要一個唯一的uuid來辨別
每個從機都會有一個叫做profile的東西存在,不管是上面的自定義的simpleprofile,還是标準的防丢器profile,他們都是由一些列service組成,然後每個service又包含了多個characteristic,主機和從機之間的通信,均是通過characteristic來實作。
實際産品中,每個藍牙4.0的裝置都是通過服務和特征來展示自己的,服務和特征都是用UUID來唯一辨別的。一個裝置必然包含一個或多個服務,每個服務下面又包含若幹個特征。特征是與外界互動的最小機關。藍牙裝置硬體廠商通常都會提供他們的裝置裡面各個服務(service)和特征(characteristics)的功能,比如哪些是用來互動(讀寫),哪些可擷取子產品資訊(隻讀)等。比如說,一台藍牙4.0裝置,用特征A來描述自己的出廠資訊,用特征B來與收發資料等。
?4.0中profile的存在是幹嘛用的呢,隻是一種組織形式存在?
服務和特征都是用UUID來唯一辨別的,UUID的概念如果不清楚請自行google,國際藍牙組織為一些很典型的裝置(比如測量心跳和血壓的裝置)規定了标準的service UUID(特征的UUID比較多,這裡就不列舉了)
4.0 BLE資料傳輸可參考下述系列:
藍牙4.0 BLE 資料傳輸 (一)
(三)Android Bluetooth 架構
1、面向庫的架構視圖
2、面向程序的架構視圖
參考 藍牙4.0 For IOS
iOS 有兩個架構支援藍牙與外設連接配接。
一個是 ExternalAccessory。從ios3.0就開始支援,也是在iphone4s出來之前用的比較多的一種模式,但是它有個不好的地方,External Accessory需要拿到蘋果公司的MFI認證。
另一個架構則是本文要介紹的CoreBluetooth,在藍牙4.0出來之後(注意,硬體上要4s以上,系統要ios6以上才能支援4.0),蘋果開放了BLE通道,專門用于與BLE裝置通訊(因為它的API都是基于BLE的)。這個不需要MFI,并且現在很多藍牙裝置都支援4.0,是以也是在IOS比較推薦的一種開發方法。現CoreBluetooth在的開發幾乎全部基于該架構,本節隻介紹CoreBluetooth。
1,CoreBluetooth介紹
CoreBluetooth架構的核心其實是兩個東西,peripheral和central, 可以了解成外設和中心。對應他們分别有一組相關的API和類,如下圖所示:
如果你要程式設計的裝置是手機的central,那麼你大部分用到peripheral API。反之亦然,裝置是peripheral,iphone手機是central,是以将大部分使用central API。使用peripheral程式設計的例子也有很多,比如像用一個ipad和一個iphone通訊,ipad可以認為是central,iphone端是peripheral,這種情況下在iphone端就要使用上圖右邊部分的類來開發了。
作為一個中心(central)要實作完整的通訊,一般要經過這樣幾個步驟:
(1)建立中心角色—
(2)掃描外設(discover)(通過接收從裝置廣播來掃描、發現裝置,獲得peripheral ID)—
a, 如果資料中已經和某些藍牙裝置綁定,可以使用BluetoothAdapter.getBondedDevices();方法獲得已經綁定的藍牙裝置清單。通過指定特定的peripheral的UUID,central隻會discover這個特定的裝置。
b, 搜尋周圍的藍牙裝置受用BluetoothAdapter.startDiscovery()方法
c, 搜尋到的藍牙裝置都是通過廣播傳回,so..。需要注冊廣播接收器來獲得已經搜尋到的藍牙裝置
(3)連接配接外設(connect)(根據peripheral ID連接配接指定的外設)—
(4)掃描外設中的服務和特征(discover)(一個裝置裡的服務和特征往往比較多,一般會在發現服務和特征的回調裡通過service、characteristic UUID去比對我們關心那些)—
(5)與外設做資料互動(explore and interact)—
(6)斷開連接配接(disconnect)。
2, 裝置ID描述DID
每個與蘋果裝置相容的藍牙接入都必須:支援藍牙裝置ID描述,1.3版本或者更高;使用藍牙SIG配置設定的Assigned Numbers文檔中的公司辨別作為他的Vendor ID值,也就是VID,如果生産商沒有藍牙SIG公司辨別,那麼藍牙HID描述接入可能會使用USB Implementers Forum配置設定的VID;使用他的VID值來辨別最終的産品生産商;使用版本值來唯一辨別軟體的版本;使用ProductID值唯一辨別産品。Device ID描述使得蘋果産品能夠識别遠端的藍牙接入,該資訊可以用來在與遠端接入互動的時候連接配接藍牙描述間的交替互操作。是以Device ID中的資訊記錄非常重要。
理想情況下,這兩個裝置應該有不同的産品ID。但是,當他們擁有完全相同的硬體、軟體和特性的時候擁有相同的ProductID也是可以允許的。如果他們有任何的不同,就都應該有不同的Product ID。
3,IOS的藍牙低功耗
藍牙4.0标準引入了藍牙低功耗,一種針對有限電池資源的藍牙接入的無線技術。如果支援藍牙低功耗的話,接入點需要支援下面的這些特性。(這裡更多的是藍牙晶片商要做的事情)
角色
藍牙接入需要實作藍牙4.0标準中定義的外圍角色廣告通道
藍牙接入需要在所有三個廣告通道中針對每個廣告事件進行廣告廣告PDU
藍牙接入需要使用如下廣告PDU中的一個:ADV_IND;ADV_NOCONN_IND;ADV_SCAN_IND。其中ADV_DIRECT_IND不推薦使用。廣告資料
由藍牙接入發送的廣告資訊應該至少包含藍牙4.0标準中包含的如下資訊:Flags;TX Power Level;Local Name;Services。如果需要降低電量消耗或者并不是所有的廣告資料都适合放入到廣告PDU中的時候,接入點可能将Local Name和TX Power Level資料方知道SCAN_RSP PDU中。需要注意的是根據它的狀态,蘋果産品可能不會總是執行激活掃描。主要的服務應該總是放在廣告PDU中進行廣告。次要的服務不應該進行廣告。對于接入點不重要的服務資訊可能會因為廣告PDU中的空間不足而被忽略。廣告資料和SCAN_RSP PDU中的掃描響應資料應該遵循藍牙4.0标準中的格式。廣告間隔
藍牙接入的廣告間隔應該慎重考慮,因為他會影響到發現和連接配接的性能。對于低功耗的接入,電池資源也應該被考慮在内。為了能夠被蘋果産品發現,藍牙接入應該首先使用推薦的廣告間隔20ms,并持續至少30秒。如果在這30秒内沒有被發現,那麼接入點可能會選擇節省電池電量然後增加廣告間隔,蘋果推薦使用如下依次延長的事件間隔來發現藍牙接入點:645 ms;768 ms;961 ms;1065 ms;1294 ms連接配接參數
藍牙接入負責用來LE連接配接的連接配接參數。接入點需要請求合适的連接配接參數來在合适的時候發送一個L2CAP連接配接參數跟新請求。如果他沒有符合如下規則,那麼連接配接參數請求可能會被拒絕:Interval Max * (Slave Latency + 1) ≤ 2 seconds;Interval Min ≥ 20 ms;Interval Min + 20 ms ≤ Interval Max;Slave Latency ≤ 4;connSupervisionTimeout ≤ 6 seconds以及Interval Max * (Slave Latency + 1) * 3 < connSupervisionTimeout。蘋果裝置不會讀取或者使用Peripheral Preferred Connection Parameters特性中的參數。隐私
藍牙接入應該在任何情況下都能夠滿足Resovable Private Address。因為私隐方面的考慮,蘋果裝置将會使用藍牙4.0标準中定義的随機裝置位址。授權
藍牙接入不需要請求特殊的授權,如配對、認證或加密等來發現服務和特性。隻有在擷取特性值或者描述值的時候可能會需要特殊的授權。9配對
藍牙接入不應該請求配對。如果處于安全考慮,接入點需要與Central建立綁定關系,外圍可以使用Insufficient Authentication錯誤碼在必要的時候拒絕ATT請求。是以蘋果裝置可能會需要按照既定的安流程程來執行過程。配對可能會需要基于蘋果産品的使用者認證。服務
通用接入描述服務:藍牙接入應該實作按照藍牙标準4.0中的Device Name特性
通用屬性描述服務:隻有當接入有能力在生命周期内更改他的服務的時候,該接入點才需要實作Service Changed特性。蘋果産品可以使用Service Changed服務特性來決定它是否可以使用之前讀取的或者緩存的來自裝置的資訊。
裝置資訊服務:藍牙接入應該實作裝置資訊服務。服務的UUID不應該包含在廣告資料當中。如下的特性需要被支援:Manufacturer Name String;Model Number String;Firmware Revision String;Software Revision String
4,IOS APP開發 的藍牙操縱API
手機APP要想獲得藍牙裝置的一些額外的資訊如電量或者操作藍牙裝置,必須通過IOS API。那麼IOS底層必然有某種方式來與藍牙裝置互動。 那麼電量通過什麼來讀寫呢?自定義 service characteristic?
任何免提的藍牙耳機都可以在iOS裝置的狀态欄中顯示一個用來辨別他電池電量的圖示。這個特性被所有的iOS裝置所支援,包括iPhone、iPod和iPad。耳機的藍牙知識通過兩個iOS藍牙HFP AT指令:HFP Command AT+XAPL
HFP指令AT+XAPL
- 描述:允許通過耳機自定義AT指令
- 發起者:耳機
- 格式:AT+XAPL=[vendorID]-[productID]-[version],[features]
- 參數:
- vendorID: 辨別生産商的vendor ID的十六進制表示,但是沒有0x字首
- productID: 辨別生産生的product ID的十六進制表示,但是沒有0x字首
- version: 軟體的版本
- features: 用10進制辨別的位辨別:
- 1 = 耳機支援電池電量報告
- 2 = 耳機暫停或者正在充電
- 其他值保留
- 例子: AT+XAPL=ABCD-1234-0100,3
- 響應: +XAPL=iPhone,[features]
HFP指令AT+IPHONEACCEV
- 描述:報告耳機的狀态變更
- 格式:AT+IPHONEACCEV=[Number of key/value pairs ],[key1 ],[val1 ],[key2 ],[val2 ],...
-
- Number of key/value pairs : 接下來參數的數量
- key: 被報告狀态變化的類型
- 1 = 電量等級
- 2 = 暫停狀态
- val: 更改的值
- Battery events:0-9之間數字的字元串 A string value between '0' and '9'.
- Dock state: 0 = undocked, 1 = docked.
- Example: AT+IPHONEACCEV=1,1,3
(五)硬體接口
一般藍牙晶片通過UART、USB、SDIO、I2S、PcCard和主要晶片通信。如下圖所示,通過UART和主要晶片通信。
最後叮囑:大家有好的的藍牙通信的資料連結在下面留言分享下~多謝♪(^∇^*)