藍牙簡介


轉載自網上大佬的文檔,具體鏈接不詳

藍牙

藍牙分為傳統藍牙和BLE藍牙兩種連接方式。對於蘋果的iOS系統來講傳統藍牙需要經過蘋果的安全認證,因此都是走BLE藍牙通道通道進行通信。

BLE是Bluetooth Low Energy的縮寫,又叫藍牙4.0,區別於藍牙3.0和之前的技術。

l  藍牙雙模簡稱BR(統藍牙和BLE藍牙兩種都有),商標為Bluetooth Smart Ready;

l  單模簡稱BLE或者LE,商標為Bluetooth Smart

Android是在4.3后才支持BLE,這說明不是所有藍牙手機都支持BLE,而且支持BLE的藍牙手機一般是雙模的。雙模兼容傳統藍牙,可以和傳統藍牙通信,也可以和BLE通信,常用在手機上,Android4.3和IOS4.0之后版本都支持BR,也就是雙模設備。

藍牙傳輸的最大數據包MTU在不同手機和設備上也是不同,一般是通過設備和手機之間進行通信約定的。

iOS可以通過maximumWriteValueLengthForType獲得設備的最大數據包(iOS9以后);

https://developer.apple.com/documentation/corebluetooth/cbperipheral/1620312-maximumwritevaluelengthfortype?language=objc

Android則是在API 21(Android 5.1)有一個 BluetoothGatt 新增一個requestMtu()的方法來調整MTU。

https://developer.android.com/reference/android/bluetooth/BluetoothGatt

可以通過“nRFConnect-4.6.1.apk”的第三方應用,可以查看支持的MTU大小,如下圖:

 

 

 

MTU大小調整

1.3.1 傳統藍牙

傳統藍牙3.0根據802.11適配層協議應用了Wi-Fi技術,極大提高了傳輸速度。藍牙3.0的數據傳輸率提高到了大約24Mbps

1、傳統藍牙采用的是SPP(Serial Port Profile)協議進行數據傳輸。

2、SPP的UUID:00001101-0000-1000-8000-00805F9B34FB

3、手機一般以客戶端的角色主動連接SPP協議設備

1.3.2 BLE藍牙

BLE藍牙的最大特點就是低功耗,而低速率和簡單的交互協議是降低功耗的重要組成部分,因此它的的傳輸速率只有2Mbps。

BLE關鍵術語和概念的摘要:

一個ble藍牙設備有多個包括多個Profile。

一個Profile中有多個服務Service(通過服務的uuid找到對應的Service)。

一個Service中有多個特征Characteristic(通過特征的uuid找到對應的Characteristic)

一個Characteristic中包括一個value和多個Descriptor(通過Descriptor的uuid找到對應的Descriptor)

其次,要知道一些名詞:

1、profileprofile

可以理解為一種規范,一個標准的通信協議,它存在於從機中。

藍牙組織規定了一些標准的profile,例如 HID OVER GATT,防丟器,心率計等。

每個profile中會包含多個service,每個service代表從機的一種能力。

2、service

可以理解為一個服務,在ble從機中,通過有多個服務,例如電量信息服務、系統信息服務等,每個service中又包含多個characteristic特征值。

每個具體的characteristic特征值才是ble通信的主題。比如當前的電量是80%,所以會通過電量的characteristic特征值存在從機的profile里,這樣主機就可以通過這個characteristic來讀取80%這個數據

3、characteristic

特征值,ble主從機的通信均是通過characteristic來實現,可以理解為一個標簽,通過這個標簽可以獲取或者寫入想要的內容。

官方特征值定義:

https://www.bluetooth.com/specifications/gatt/characteristics/

4、UUIDUUID

統一識別碼,我們剛才提到的service和characteristic,都需要一個唯一的uuid來標識UUID的格式:00001101-0000-1000-8000-00805F9B34FB

綜上,每個從機都會有一個叫做profile的東西存在,不管是上面的自定義的simpleprofile,還是標准的防丟器profile,他們都是由一些列service組成,然后每個service又包含了多個characteristic,主機和從機之間的通信,均是通過characteristic來實現。

 

  

BLE協議棧架構圖

其中有一個UUID非常特殊,它被藍牙聯盟采用為官方UUID,這個UUID如下所示:

 

藍牙聯盟將自己定義的attribute或者數據只用16bit UUID來表示上圖xxxx位置,其實它也是128bit。

例如設備的UUID掃描結果如下圖所示:

 

 

UUID實例

l  第1個UUID 0x2A05標識:

Service Changed      org.bluetooth.characteristic.gatt.service_changed       0x2A05

l  第2個UUID 0x2A00標識:

Device Name            org.bluetooth.characteristic.gap.device_name              0x2A00    

 

Device Name長度可以到248字節,但一般不會需要那么長的名字,一般會建議最長到達40字節就好了。

l  第3個UUID 0x2A01標識:

Appearance     org.bluetooth.characteristic.gap.appearance        0x2A01

 

Appearance即表明這是個什么設備,如鼠標?鍵盤?等等

l  第4個UUID 0x2AA6標識:

Central Address Resolution     org.bluetooth.characteristic.gap.central_address_resolution      0x2AA6

 

BT 4.2添加的新特性。因為在BT 4.2中,為了提高BT的安全性(原來SMP的方式是可以破解的),加入了Random Address的內容。這里的Central Address Resolution就是用來表明暴露GAP Service的這個Central設備,是否支持Resolvable Private Address(RPA)的。

Peripheral設備通過讀對方Central設備的GAP Service的Central Address Resolution,就能知道其是否支持RPA了,如果其支持,那Peripheral就可以在自己的Directed Advertisement中使用RPA了。如果不支持,那還是只能使用public地址了。

關於藍牙的public地址,private地址,請參考:

https://blog.csdn.net/suxiang198/article/details/47730649

l  第5-6個UUID 0xFFF1和0xFFF2標識分別是讀取和寫入;

l  第7-8個UUID標識也是讀取和寫入;

l  第9-11個UUID標識是支持微信的接口;

 

一般讀,寫和通知的UUID 就是 characteristic UUID

另外注意,連接設備前,請先關閉掃描藍牙,否則連接成功后,再次掃描會發生阻塞,掃描不到設備。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM