Android 藍(lán)牙開發(fā)(三)-藍(lán)牙的詳細(xì)介紹

一、前言:

前面的兩篇文章,主要是在 Android 官網(wǎng)關(guān)于藍(lán)牙介紹的基礎(chǔ)上加上自己的理解完成的。主要針對的是 Android 開發(fā)中的一些 API 的使用。
第一篇文章 Android 藍(lán)牙開發(fā)(一) 主要是介紹了普通的藍(lán)牙在 Android 開發(fā)中的運用。
第二篇文章 Android 藍(lán)牙開發(fā)(二) 主要是介紹了低功耗藍(lán)牙的開發(fā)。
這篇文章主要介紹的是藍(lán)牙的歷史和一些關(guān)于藍(lán)牙的通用知識,還有廣播包的知識。要想徹底了解藍(lán)牙開發(fā),這些基礎(chǔ)的知識也是需要的,就像網(wǎng)絡(luò)協(xié)議一樣,這些都是基礎(chǔ)的內(nèi)容。我們的 API 的調(diào)用都是以這個為基礎(chǔ)的,了解這些,開發(fā)過程中遇到問題,才可以知道什么怎么一回事。

下篇文章主要講的就是實際開發(fā)中的一些坑。

二、藍(lán)牙介紹:

1、藍(lán)牙的發(fā)展歷史

  • 藍(lán)牙技術(shù)最初是由愛立信創(chuàng)制的。技術(shù)始于愛立信公司 1994 方案,它是研究在移動電話和其他配件間進行低功耗、低成本無線通信連接的方法。發(fā)明者希望為設(shè)備間的通訊創(chuàng)造一組統(tǒng)一規(guī)則(標(biāo)準(zhǔn)化協(xié)議)用來解決用戶間相互不兼容的移動電子設(shè)備。
  • 1998 年 5 月 20 日,索尼以立信、國際商業(yè)機器、英特爾、諾基亞及東芝公司等業(yè)界龍頭創(chuàng)立“特別興趣小組”(Special Interest Group SIG),即藍(lán)牙技術(shù)聯(lián)盟的前身,目標(biāo)是開發(fā)一個成本低、效益高、可以在短距離范圍內(nèi)隨意無線連接的藍(lán)牙技術(shù)標(biāo)準(zhǔn)。負(fù)責(zé)藍(lán)牙規(guī)范的制定和推廣的國際組織。
  • 1998年推出了 0.7 規(guī)格,1999 年推出了 0.8、0.9等等。1999 年 7 月正式公布 1.0 版本,使用 2.4GHz頻譜,最高資料傳輸速度 1Mbps。2001 年的 1.1 版本正式列入 IEEE 標(biāo)準(zhǔn)。

藍(lán)牙其實就是一種近距離無線通信技術(shù)。

圖片
  • 低功耗藍(lán)牙 BLE
    全稱是 Bluetooth Low Energy 簡稱 BLE 。最大的特點就是低功耗,有些 BLE 設(shè)備一個紐扣電池可以使用一兩年。這對于現(xiàn)在的穿戴設(shè)備以及各種物聯(lián)網(wǎng)傳感器來說是一個很大的突破。同時它的傳輸?shù)臄?shù)據(jù)就很少。

  • 在 Android 4.3 的時候開始支持低功耗藍(lán)牙。僅僅支持中心模式,就是只可以連接其他藍(lán)牙外設(shè)。到了 2014 年 Android 5.0 開始也支持周邊模式。

2、協(xié)議棧

image.png

從下到上分別為:控制器(Controller)-->主機(host)-->應(yīng)用(Application)

  • 控制器:協(xié)議棧的底層的實現(xiàn),直接和硬件相關(guān),由芯片廠商實現(xiàn),包括物理層、鏈路層、主機控制接口。
  • 主機:協(xié)議棧的上層實現(xiàn)是硬件的抽象,與具體的硬件廠商沒有關(guān)系。
  • 應(yīng)用層:使用主機層提供的 API 開發(fā)的應(yīng)用。

詳細(xì)介紹各個層的含義:

  • PHY(Physical Layer)物理層,藍(lán)牙是工作在 2.4GHz 附近,這是工業(yè)、科學(xué)、醫(yī)療 ISM 的頻段,免許可證。WIFI 也是工作在同一個頻段。藍(lán)牙把頻段切分為 40 個通道,其中 3 個廣播通道,37 個數(shù)據(jù)通道,按照一個規(guī)律跳頻通信。
  • LL(Linker Layer)鏈路層,用于控制設(shè)備的射頻狀態(tài),設(shè)備將處于五種狀態(tài)之一:等待、廣告、掃描、初始化、連接。廣播設(shè)備不需要建立連接就可以發(fā)送數(shù)據(jù),而掃描設(shè)備接受廣播設(shè)備發(fā)送的數(shù)據(jù);發(fā)起連接的設(shè)備通過發(fā)送連接請求來回應(yīng)廣播設(shè)備,如果廣播設(shè)備接受請求,那么廣播設(shè)備與發(fā)起連接的設(shè)備將會進入連接狀態(tài)。發(fā)起連接的設(shè)備稱為主機,接受連接請求的設(shè)備稱為從機。
  • HCI(Host Controller Interface):主機和控制器就是通過這個接口來進行通訊的,通訊的介質(zhì)就是 HCI 命令。這層在協(xié)議棧中是可選的,一些小型終端可能沒有,但是 Android 設(shè)備上肯定有,這層是藍(lán)牙上層和芯片的交互必經(jīng)之路,對于藍(lán)牙硬件開發(fā)者,這里的 log 能夠很好的幫助解決問題。
  • HOST 部分要復(fù)雜。有鏈路控制和適配層(L2CAP),安全管理(SM)等。重點看屬性協(xié)議層,也就是 ATT。它是整個 BLE 通信的基礎(chǔ)。ATT負(fù)責(zé)數(shù)據(jù)封裝,向外暴露為 “屬性”,提供“屬性”的為服務(wù)端,獲取“屬性”的為客戶端。ATT 是專門為 BLE 低功耗藍(lán)牙而設(shè)計的傳輸協(xié)議,結(jié)構(gòu)簡單,傳輸數(shù)據(jù)短。
  • GATT(Generic Attribute Profile):全稱叫做通用屬性配置文件,是基于 ATT 做的進一步的邏輯封裝,定義數(shù)據(jù)的交互方式和含義,APP 開發(fā)就是用的這一層。GATT 定義了三個非常重要的概念:服務(wù)(Service)、特征(Characteristic)、描述(Descripter)。他們的
    關(guān)系如下圖
image.png

一個 Service 可以包含若干個 Characteristic,一個 Characteristic 可以包含屬性(properties)和值(value),還可以包含多個 descripter 。Characteristic 實際上具有讀、寫、通知等權(quán)限。我們在對一個 BLE 設(shè)備發(fā)起連接成功以后,對他進行讀寫操作,其實就是對 Characteristic 的操作。圖中的 Profile 是一組服務(wù)的集合,這些服務(wù)組個起來就形成了一個特定的使用場景了,里面的服務(wù)是嵌入式工作人員可以添加的。BLE 藍(lán)牙使用 UUID 來區(qū)分 Service、Characteristic 、Descripter。

GAP(Generic Access Profile):通用訪問控制配置文件。定義了 BLE 整個通信過程中的流程,負(fù)責(zé)處理設(shè)備訪問模式和程序,包括設(shè)備發(fā)現(xiàn)、建立連接、終止連接等等。GAP 層總是作為下面四種角色之一:(1)廣播者:不可連接的廣播設(shè)備。(2)觀察者:掃描設(shè)備,但不發(fā)起建立連接 (3)外部設(shè)備:可連接的廣播設(shè)備,可以在單個鏈路層連接中作為從機。(4)集中器:掃描廣播設(shè)備并發(fā)起連接,可以在單鏈路層連接中作為主機。

三、應(yīng)用開發(fā)

BLE 應(yīng)用可以分為兩大類:基于非連接的和基于連接的

1、基于非連接的:

意思就是外設(shè)和周邊設(shè)備不發(fā)生連接,主要靠掃描到的廣播來獲取信息。發(fā)送廣播的一方叫做 broadcaster 監(jiān)聽廣播的一方叫做 oberver 在 GAP 層有對應(yīng)的角色定義。

網(wǎng)絡(luò)拓?fù)鋱D:

image.png

這種方式就是廣播設(shè)備不斷的向外發(fā)送廣播(含有特定的信息),然后觀察者接受到廣播按照兩者之間約定好的協(xié)議進行解析拿到有用的信息。例如:iBeacon,通過這種設(shè)備我們可以實現(xiàn)室內(nèi)定位。

其實這些設(shè)備的角色可以即使廣播者又是觀察者。接收到廣播后作出了處理,然后又發(fā)送廣播。這樣就形成了雙向的網(wǎng)絡(luò),類似于因特網(wǎng),這就是藍(lán)牙 Mesh 組網(wǎng)。

廣播數(shù)據(jù)包格式:


image.png

每個廣播數(shù)據(jù)包由 31 byte 組成。分為有效數(shù)據(jù)和無效數(shù)據(jù)兩部分。

  • 無效數(shù)據(jù)部分:因為廣播數(shù)據(jù)包的長度必須是 31 字節(jié),如果有效數(shù)據(jù)不夠 31 個字節(jié)那么剩下的就用 0 來補全。這一部分就是無效的,也就是無效數(shù)據(jù)。

  • 有效數(shù)據(jù)部分:包含若干個廣播數(shù)據(jù)單元,稱為 AD Structure。每個 AD Structure 的組成格式是:第一個字節(jié)是長度值 Length,表示接下來的 Length 個字節(jié)是數(shù)據(jù)部分。數(shù)據(jù)分別的第一個字節(jié)表示數(shù)據(jù)類型 AD Type,剩下的 Length - 1 是真正的數(shù)據(jù)。數(shù)據(jù)類型很重要,有標(biāo)準(zhǔn)的規(guī)定,決定了數(shù)據(jù)代表什么意思和怎么解析

例子:

E/TAG:scandata:02011A05FFAC0134560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

這里是掃描的數(shù)據(jù)包(轉(zhuǎn)換成了 16 進制,兩個代表一個字節(jié)),第一個字節(jié)是 02 表示后面的兩個字節(jié)是數(shù)據(jù)部分,然后第二個字節(jié)是 01 表示了數(shù)據(jù)的類型。后面一個字節(jié)就是真正的數(shù)據(jù)了。這個廣播數(shù)據(jù)單元就分析完了。下面就是另一個數(shù)據(jù)單元了。依次類推,關(guān)于數(shù)據(jù)類型的解釋,官網(wǎng)有。

圖片

這是數(shù)據(jù)類型對應(yīng)的含義表。

2、基于連接的:

就是兩個設(shè)備建立 GATT 連接,需要雙方進行通信。這里的兩個角色是,外設(shè)設(shè)備(Peripheral)和中心設(shè)備(一般是手機)Centeral。

網(wǎng)絡(luò)拓?fù)鋱D:


image.png

一個中心設(shè)備可連接多個外設(shè),但是一個外設(shè)只能連接一個中心(外設(shè)連接成功后就會停止對外廣播,別人就發(fā)現(xiàn)不了它了)。其中一個中心設(shè)備的連接外設(shè)的數(shù)量也是有限的。


鏈接:https://mp.weixin.qq.com/s?__biz=MzU5NzA2NjQzMg==&mid=2247484141&idx=1&sn=fd7e71864189b3631ce529afeb4cf669&scene=21#wechat_redirect

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容