**
1.關於服務與特徵值的簡述
之前說到藍芽的連線過程,那藍芽連線之後具體是如何傳資料的呢。這裡做一下簡要說明。
藍芽4.0是以引數來進行資料傳輸的,即服務端定好乙個引數,客戶端可以對這個引數進行讀,寫,通知等操作,這個東西我們稱之為特徵值(characteristic),
但乙個引數不夠我們用,比如我們這個特徵值是電量的值,另乙個特徵值是裝置讀取的溫度值。
那這時候會有多個特徵值,並且我們還會對它們分類,分出來的類我們稱之為服務(service)。
乙個裝置可以有多個服務,每乙個服務可以包含多個特徵值。為了方便操作,每個特徵值都有他的屬性,例如長度(size),許可權(permission),值(value),描述(descriptor),如下圖。
2.att與gatt
我們剛才介紹服務與特徵值,那具體我們是怎麼去實現的呢.
藍芽4.0版本推出了低功耗規範,引入了兩個核心協議:att(attribute protocol)和gatt(generic attribute protocol).這兩個協議主要目標是ble,但是也可以執行在傳統藍芽上(br/edr)。
att主要是規定了"屬性"的定義,gatt則是將這些"屬性"包裝成我們上面所講的服務、特徵值等。
那我們是怎麼搭建起來我們的服務的呢?
大概可以概述為,由乙個個屬性搭建起來的東西。如下圖,每乙個屬性就會告訴使用者說,我是什麼,我帶有什麼,你能對我做什麼,即描述,值,許可權
序號描述許可權值
屬性1我是 服務a的開頭
唯讀服務號0001
屬性2我是 特徵值1的開頭
唯讀特徵值1的值放在屬性3裡
特徵值1的值型別
特徵值1的值許可權
屬性3我是 特徵值1的值
屬性4我是 特徵值1的特殊操作
讀寫關閉
屬性5我是 特徵值2的開頭
唯讀屬性6
我是 特徵值2的值
屬性7我是 特徵值2的特殊操作
讀寫屬性8
我是 服務b的開頭
唯讀服務號0002
上圖是乙個簡單的表述,真正的屬性表如下圖。
handle
type
permission
value
0x2800
(gatt primary service uuid)
read
e0:ff(2 bytes)
(0xffe0 = ****** keys service custom uuid)
0x2803
(gatt characteristic declaration uuid)
read
10:29:00:e1:ff(5 byte)
(0xffe1 = ****** keys value custom uuid)
(0x0029 = handle 41)
(0x10 = characteristic properties :notify only)
0xffe1
(****** keys state)
(none)
00(1 byte)
(value indicates states of keys)
0x2902
(gatt client characteristic configuration uuid)
read and write
00:00(2 byte)
(value indicates whether notifications or indications are enabled)
0x2800
(gatt primary service uuid)
read
a1:dd(2 byte)
(0xdda1 = other service custom uuid)
屬性的定義是這樣的
handle
type
permission
value
handle: 其實上面那張屬性表,在程式裡只是乙個陣列而已,所以handle這個值其實我們是不需要專門去存的,他只是乙個索引而已。
type:屬性的型別,也即uuid ,藍芽標準組織已經對uuid進行了分類。
如上表中,服務的type就是0x2800,所以每到乙個服務,就會有乙個type型別為0x2800的屬性出現。
而特徵值declaration 的type就是0x2803。至於特徵值value的type可以是使用者自定義的。
permission:屬性的訪問許可權,一般有read、write、 notifications、 indications
value:屬性的值 最長可達512位元組
藍芽後台接收資料 BLE4 0
最近在做乙個藍芽相關的專案,需要在應用進入後台,或者手機屬於鎖屏狀態的情況下,仍然保持藍芽連線,並且能正常接收資料。本來以後會很麻煩,但是學習了下.發現就2步而已。簡單的不能再簡單了。好了。下面是具體實現辦法。1.在 info.plist檔案中,新建一行required background mod...
Android藍芽BLE4 0踩過的坑
一直都負責專案的藍芽模組,期間踩過很多坑,說出來跟大家分享一下。1.從簡單的開始,首先是許可權的問題,在android6.0以上,部分機型需要開啟定位許可權,部分機型需要同時開啟gps。所以使用藍芽之前,你可以動態申請定位許可權,或者直接將targetsdkversion設定為23以下。2.藍芽剛開...
藍芽BLE4 0透傳 智慧型穿戴應用
隨著技術改革公升級和消費觀念公升級,智慧型穿戴產品從過去單一功能向多功能化發展,同時具有更便攜 實用的特點。加入骨感測 人臉識別 地理定位等各種感測器,可以多方位多角度獲取資料資訊。甚至接入語音 體感等人機介面,實現更方便更靈活的互動體驗。智慧型穿戴產品採用的互聯方式主要有nfc wifi 藍芽。n...