BLE中這些概念,你都了解嗎
本文轉載自微信公眾號「嵌入式從0到1」,可以通過以下二維碼關注。轉載本文請聯系嵌入式從0到1公眾號。
我們使用Android 手機上的藍牙調試助手與TB-02-kit模塊進行了數據通訊,很多人可能對其中很多概念不是很了解,今天我們就來梳理一下整個數據通訊過程和其中涉及到的一些概念,有理解不到位的地方歡迎留言處指出。
藍牙發展史
藍牙發展史
藍牙和BLE區別
藍牙是一種短距離的2.4 GHz無線通訊技術,可實現設備之間的數據交換。
一般將藍牙3.0之前的BR/EDR藍牙稱為傳統藍牙(經典藍牙BT:BlueTooth),而將藍牙4.0規范下的LE藍牙稱為低功耗藍牙。
低功耗藍牙是在傳統藍牙的基礎上發展而來的。
BLE技術采用非常快速的連接方式,因此可以處于“非連接”狀態(節省能源),此時鏈路兩端相互間只是知曉對方,只有在必要時才開啟鏈路,然后在盡可能短的時間內關閉鏈路——這樣設計的目的就是為了低功耗。
BLE優點:搜索速度快、連接速度快、超低功耗保持連接和傳輸數據,缺點是,傳輸速率略低。
BLE藍牙模塊主要應用領域
1、移動擴展設備
2、汽車電子設備
3、健康醫療用品:心跳帶、血壓計等
4、定位應用:室內定位、井下定位等
5、近距離數據采集:無線抄表、無線遙測等
6、數據傳輸:智能家居室內控制、藍牙調光、打印機等
BLE數據通訊
一個Gatt包含多個服務(Service);一個服務包含多個特征(Characteristic);一個特征包含多個描述符;
反過來可以說,一個描述符對應一個特征;一個特征對應一個服務;一個服務對應一個Gatt。
Service、Characteristic、Descriptor,這三部分都由UUID作為唯一標示符。
如上圖所示,在我們之前使用的BLE調試寶軟件中,我們可以看到,圖中所示的前三個服務就是BLE必需的三個基本服務:
- #define GAP_SERVICE_UUID 0x1800 // Generic Access Profile
- #define GATT_SERVICE_UUID 0x1801 // Generic Attribute Profile
- #define DEVINFO_SERV_UUID 0x180A // Device Information
一般來說,剩下的一個服務就是與BLE模塊進行數據通訊的Service ,而Service中的Characteristic是手機與BLE終端交換數據的關鍵。
所以我們上文數據通訊的操作都是在與Unknown Characteristic 進行的數據通訊。
為什么會定義這么多名詞呢?
藍牙連接成功之后,數據的傳輸是對特征值(Characteristic)這個參數進行讀,寫,通知等操作;
為了方便管理,我們可能有不止一個特征值,我們可以根據需要創建多個特征值,比如一個特征值用于記錄環境濕度的值,一個特征值用于記錄設備的溫度值,等等。
我們也可以對這些特征值進行歸類,每一類就相當于一個服務(Service),一個設備可以有多個服務,每個服務可以包含多個特征值。
為了說明方便,每個特征值都有他的屬性,所以我們還會見到其他一些名詞,例如:權限(permission),值(value),描述(descriptor)等。
To do
下一篇網文,我們就使用Qt開發一個Android系統下的BLE調試軟件,實現與藍牙模塊的數據收發,實際上就是實現與下面UUID的Unknown Service 中 Unknown Characteristic 進行數據的讀寫操作。
- static const QLatin1String serviceUuid("{00010203-0405-0607-0809-0a0b0c0d1910}");