前言
最近工作進(jìn)行了藍(lán)牙方面的開發(fā)刀疙,踩了不少坑囤捻。為了避免用過就忘食听,也是想拓展下藍(lán)牙開發(fā)更深更廣的領(lǐng)域籍救,于是寫博客進(jìn)行記錄习绢。根據(jù)我用到的知識大概要分這么幾個部分講解:藍(lán)牙基礎(chǔ)篇,LE篇,A2dp篇闪萄,再之后其他的涉獵可能要看我后續(xù)能學(xué)習(xí)的多深入了梧却。先一篇一篇寫吧,最后再做整體的章節(jié)梳理败去。(本篇先介紹藍(lán)牙基礎(chǔ)科普知識放航,了解這個有助于系統(tǒng)性的學(xué)習(xí)藍(lán)牙相關(guān)知識,如果是單純想要快速上手android藍(lán)牙開發(fā)圆裕,請看下一篇)
藍(lán)牙是一種短距離無線通信技術(shù)广鳍。(原本以為藍(lán)牙不能像4G那樣遠(yuǎn)距離傳輸是因為藍(lán)牙的波長太短不適合遠(yuǎn)距離傳輸,結(jié)果他倆的無線電波頻率都差不多吓妆,藍(lán)牙不適合遠(yuǎn)距離主要是因為輸出功率不夠)
藍(lán)牙版本發(fā)展史
1994年赊时,也就是我出生那年。愛立信為了為旗下產(chǎn)品提供更好的信息傳輸方式而研發(fā)了藍(lán)牙行拢,其命名為“藍(lán)牙”是在1997年蛋叼。
2002年,藍(lán)牙1.1版正式推出剂陡,相當(dāng)于是1.0的穩(wěn)定版狈涮。1.2又加入了抗干擾跳頻功能。
藍(lán)牙1.x的版本傳輸速率只有800kpbs左右鸭栖,藍(lán)牙2.0使用了EDR技術(shù)使得傳輸速度能夠達(dá)到3Mbps歌馍。
藍(lán)牙3.0的速度達(dá)到了24Mbps,支持藍(lán)牙的各種設(shè)備開始爆發(fā)式出現(xiàn)晕鹊,但是功耗問題也暴露了出來松却。
藍(lán)牙4.0將藍(lán)牙的使用功耗大幅度降低,不僅如此還提升了其連接速度和傳輸距離(可達(dá)100m)溅话,4.1晓锻,4.2更是增加了藍(lán)牙傳輸?shù)陌踩浴#˙LE低功耗藍(lán)牙)
藍(lán)牙5.0更快的傳輸速度飞几,更遠(yuǎn)的傳輸距離(300m)砚哆,精準(zhǔn)的定位(誤差在1m內(nèi))。
藍(lán)牙協(xié)議相關(guān)
經(jīng)典藍(lán)牙(又稱傳統(tǒng)藍(lán)牙):主要是針對4.0低功耗藍(lán)牙之前的藍(lán)牙協(xié)議(BR / EDR協(xié)議)的總稱 屑墨。
低功耗藍(lán)牙:牙是針對于4.0增加的BLE協(xié)議(即Bluetooth Low Energy)躁锁。另外android版本4.3以上才支持BLE。
針對于上面兩種模式現(xiàn)在藍(lán)牙設(shè)備分為了單模和雙模兩種卵史,顧名思義战转,單模即是指只支持經(jīng)典藍(lán)牙或者低功耗藍(lán)牙中的一種模式。雙模則是既兼容經(jīng)典藍(lán)牙又兼容低功耗藍(lán)牙以躯。
藍(lán)牙應(yīng)用層協(xié)議:
HSP(HeadsetPro-file)代表耳機(jī)功能槐秧,提供手機(jī)與耳機(jī)之間通信所需的基本功能。
HFP(HandProfile)則代表免提功能,HFP在HSP的基礎(chǔ)上增加了某些擴(kuò)展功能刁标。
A2DP(Advanced Audio Distribution Profile)指的是 藍(lán)牙音頻傳輸模型協(xié)定颠通,是一種音頻的高清晰度傳輸協(xié)議。
AVRCP(Audio/VideoRemote Control Profile)也就是音頻/視頻遙控規(guī)格命雀,用于從控制器(如立體聲耳機(jī))向目標(biāo)設(shè)備(如裝有 Media Player 的電腦)發(fā)送命令(如前跳、暫停和播放)斩箫。
OPP(Object Push Profile)藍(lán)牙通信程序部分需采用用于設(shè)備之間傳輸數(shù)據(jù)對象吏砂。
PBAP(PhonebookAccess Profile)電話號碼簿訪問協(xié)議。
藍(lán)牙BLE相關(guān)
BLE四種工作模式:
1.主設(shè)備模式:藍(lán)牙模塊可以對周圍設(shè)備進(jìn)行搜索并選擇需要連接的從機(jī)進(jìn)行連接乘客,可以發(fā)送和接收數(shù)據(jù)狐血。
2.從設(shè)備模式:藍(lán)牙模塊只能被主機(jī)搜索,不能主動搜索易核。從設(shè)備跟主機(jī)連接以后匈织,也可以和主機(jī)設(shè)備進(jìn)行發(fā)送和接收數(shù)據(jù)。
3.廣播模式:藍(lán)牙模塊可以進(jìn)行一對多的廣播牡直。
4.mesh組網(wǎng)模式:藍(lán)牙模塊可以實現(xiàn)簡單的自組網(wǎng)絡(luò)缀匕,每個模塊只需要設(shè)置相同的通訊密碼就可以加入到同一網(wǎng)絡(luò)當(dāng)中,每一個模塊都可以發(fā)起數(shù)據(jù)碰逸,每個模塊可以收到數(shù)據(jù)并且進(jìn)行回復(fù)乡小。并且不需要網(wǎng)關(guān),即使某一個設(shè)備出現(xiàn)故障也會跳過并選擇最近的設(shè)備進(jìn)行傳輸饵史。
藍(lán)牙UUID
UUID 是通用唯一識別碼(Universally Unique Identifier)满钟。
藍(lán)牙中關(guān)于UUID的介紹一般會關(guān)聯(lián)到service UUID(服務(wù)),Characteristic UUID(特性)胳喷,還有Property(屬性)這幾個概念湃番。
簡單的理解就是藍(lán)牙提供了不同的service (每個service 都有與眾不同的UUID),而Characteristic是從屬于service的(同樣每個Characteristic都有與眾不同的UUID)吭露,每一個Characteristic又有一個或多個Property(當(dāng)然Property是沒有UUID的概念)吠撮。
可以把service理解成一個家庭,每個家庭都有不同的戶口id讲竿,Characteristic 就像家庭中的人纬向,每個人有自己的身份證號,Property就是指某個家庭成員所擁有的能力(比如說我的能力“Property”有吃飯戴卜,睡覺逾条,寫B(tài)ug等等)。
關(guān)于屬性我再舉幾個詳細(xì)的例子投剥,能更好的理解這些概念了:
Read:讀屬性师脂,具有該屬性的Characteristic UUID 是可讀的。
Write:寫屬性,具有該屬性的Characteristic UUID 是可以接收寫入數(shù)據(jù)的吃警。
Notify:通知屬性糕篇,具有該屬性的Characteristic UUID是可以發(fā)送通知的。
最后講一下有關(guān)UUID的格式問題:
完整的格式(也是唯一的酌心,其他格式只是對應(yīng)這種格式的縮減版拌消,都可以映射成這種格式)是128bit長度的數(shù)據(jù)。除此之外還有32bit長度和16bit長度的兩種精簡版
UUID的編碼規(guī)則(了解就好不需用深入研究安券,128bit轉(zhuǎn)換成16進(jìn)制子串是32位長度墩崩,下面這個位是指16進(jìn)制的第幾位):
1)1~8位采用系統(tǒng)時間,在系統(tǒng)時間上精確到毫秒級保證時間上的惟一性侯勉;
2)9~16位采用底層的IP地址鹦筹,在服務(wù)器集群中的惟一性;
3)17~24位采用當(dāng)前對象的HashCode值址貌,在一個內(nèi)部對象上的惟一性铐拐;
4)25~32位采用調(diào)用方法的一個隨機(jī)數(shù),在一個對象內(nèi)的毫秒級的惟一性练对。
32bit長度和16bit長度UUID擴(kuò)展為128bit的UUID:
若 16 bit UUID為xxxx遍蟋,那么 128 bit UUID 為 0000xxxx-0000-1000-8000-00805F9B34FB
若 32 bit UUID為xxxxxxxx,那么 128 bit UUID 為 xxxxxxxx-0000-1000-8000-00805F9B34FB
還有些技術(shù)詞概念和專業(yè)詞匯等以后遇到了再過來補(bǔ)充螟凭。
android 藍(lán)牙開發(fā) 基礎(chǔ)篇鏈接:
http://www.reibang.com/p/c223425ade4d