Android 經典藍牙(Classic Bluetooth)和低功耗藍牙(BLE)

藍牙模塊簡介

模塊分類協議對比

從藍牙4.0開始包含兩個藍牙芯片模塊:傳統/經典藍牙模塊(Classic Bluetooth,簡稱BT)和低功耗藍牙(Bluetooth Low Energy,簡稱BLE)	
經典藍牙是在之前的藍牙1.0,1.2,2.0+EDR,2.1+EDR,3.0+EDR等基礎上發展和完善起來的, 而低功耗藍牙是Nokia的Wibree標準上發展起來的,是完全不同兩個標準。
1.經典藍牙模塊(BT)
泛指藍牙4.0以下的模塊,一般用於數據量比較大的傳輸,如:語音、音樂、較高數據量傳輸等。
經典藍牙模塊可再細分爲:傳統藍牙模塊和高速藍牙模塊。
傳統藍牙模塊在2004年推出,主要代表是支持藍牙2.1協議的模塊,在智能手機爆發的時期得到廣泛支持。
高速藍牙模塊在2009年推出,速率提高到約24Mbps,是傳統藍牙模塊的八倍。	
傳統藍牙有3個功率級別,Class1,Class2,Class3,分別支持100m,10m,1m的傳輸距離

2.低功耗藍牙模塊(BLE)
泛指藍牙4.0或更高的模塊,藍牙低功耗技術是低成本、短距離、可互操作的魯棒性無線技術,工作在免許可的2.4GHz ISM射頻頻段。
因爲BLE技術採用非常快速的連接方式,因此平時可以處於“非連接”狀態(節省能源),
此時鏈路兩端相互間只是知曉對方,只有在必要時纔開啓鏈路,然後在儘可能短的時間內關閉鏈路(每次最多傳輸20字節)。
低功耗藍牙無功率級別,一般發送功率在7dBm,一般在空曠距離,達到20m應該是沒有問題

Android手機藍牙4.x都是雙模藍牙(既有經典藍牙也有低功耗藍牙),而某些藍牙設備爲了省電是單模(只支持低功耗藍牙)
		
開發者選經典藍牙,還是BLE?(參考: http://baijiahao.baidu.com/s?id=1594727739470471520&wfr=spider&for=pc )
經典藍牙:	
	1.傳聲音
	如藍牙耳機、藍牙音箱。藍牙設計的時候就是爲了傳聲音的,所以是近距離的音頻傳輸的不二選擇。
	現在也有基於WIFI的音頻傳輸方案,例如Airplay等,但是WIFI功耗比藍牙大很多,設備無法做到便攜。
	因此固定的音響有WIFI的,移動的如耳機、便攜音箱清一色都是基於經典藍牙協議的。
	
	2.傳大量數據
	例如某些工控場景,使用Android或Linux主控,外掛藍牙遙控設備的,
	可以使用經典藍牙裏的SPP協議,當作一個無線串口使用。速度比BLE傳輸快多了。
	這裏要注意的是,iPhone沒有開放
	
BLE藍牙:
	耗電低,數據量小,如遙控類(鼠標、鍵盤),傳感設備(心跳帶、血壓計、溫度傳感器、共享單車鎖、智能鎖、防丟器、室內定位)
	是目前手機和智能硬件通信的性價比最高的手段,直線距離約50米,一節5號電池能用一年,傳輸模組成本10塊錢,遠比WIFI、4G等大數據量的通信協議更實用。
	雖然藍牙距離近了點,但勝在直連手機,價格超便宜。以室內定位爲例,商場每家門店掛個藍牙beacon,
	就可以對手機做到精度10米級的室內定位,一個beacon的價格也就幾十塊錢而已

雙模藍牙:
	如智能電視遙控器、降噪耳機等。很多智能電視配的遙控器帶有語音識別,需要用經典藍牙才能傳輸聲音。
	而如果做複雜的按鍵,例如原本鍵盤表上沒有的功能,經典藍牙的HID按鍵協議就不行了,得用BLE做私有協議。
	包括很多降噪耳機上通過APP來調節降噪效果,也是通過BLE來實現的私有通信協議。

Android 經典藍牙(Classic Bluetooth)的API簡介

本文介紹經典藍牙,經典藍牙適用於電池使用強度較大的操作,例如Android之間流式傳輸和通信等(音頻/文件等大數據)。 
從Android 4.3(API 18)纔有API支持低功耗藍牙(BLE),BLE相關API下篇再介紹。
經典藍牙API如下:
android.bluetooth
.BluetoothA2dp 音頻分發配置文件,高質量音頻通過藍牙連接和流式傳輸
.BluetoothAdapter 本地藍牙適配器,是所有藍牙交互的入口,發現設備,查詢配對設備,創建BluetoothServerSocket偵聽其他設備
.BluetoothAssignedNumbers
.BluetoothClass 描述藍牙設備的一般特徵和功能,這是一組只讀屬性,設備類型提示
.BluetoothDevice 遠程藍牙設備,與某個遠程設備建立連接,查詢設備信息,名稱,地址,類和配對狀態
.BluetoothHeadset 提供藍牙耳機支持,以便與手機配合使用,藍牙耳機和免提配置文件
.BluetoothHealth  控制藍牙服務的健康設備配置文件代理
.BluetoothHealthAppConfiguration 第三方藍牙健康應用註冊的應用配置,以便與遠程藍牙健康設備通信
.BluetoothHealthCallback 實現 BluetoothHealth 回調的抽象類
.BluetoothManager 
.BluetoothProfile 藍牙配置文件,藍牙通信的無線接口規範
.BluetoothServerSocket 服務端監聽,連接RFCOMM通道(類似TCP ServerSocket)
.BluetoothSocket 建立RFCOMM通道,藍牙Socket接口(類似TCP Socket),通過InputStream和OutputStream與其他設備傳輸數據

Android經典藍牙的開發步驟如下:
	1.掃描其他藍牙設備
	2.查詢本地藍牙適配器的配對藍牙設備
	3.建立 RFCOMM 通道 (SPP協議)
	4.通過服務發現連接到其他設備
	5.與其他設備進行雙向數據傳輸
	6.管理多個連接

RFCOMM是藍牙簡單傳輸協議, 在兩個藍牙設備間的一條物理鏈上提供多個模擬串口進行傳輸數據, 可同時保持高達60路的通信連接。
SPP(Serial Port Profile)是通過藍牙設備之間的串口進行數據傳輸協議,spp協議處於RFCOMM上層,
如果能使用RFCOMM傳輸數據,就不需要使用SPP(省去一些流程,速度更快),但還是推薦用SPP,兼容性有保證

Android 低功耗藍牙(BLE)的API簡介

從Android 4.3(API 18)才支持低功耗藍牙(Bluetooth Low Energy, BLE)的核心功能,
BLE藍牙協議是GATT協議, BLE相關類不多, 全都位於android.bluetooth包和android.bluetooth.le包的幾個類:
android.bluetooth.
  .BluetoothGattService  包含多個Characteristic(屬性特徵值), 含有唯一的UUID作爲標識
  .BluetoothGattCharacteristic  包含單個值和多個Descriptor, 含有唯一的UUID作爲標識
  .BluetoothGattDescriptor  對Characteristic進行描述, 含有唯一的UUID作爲標識
  
  .BluetoothGatt   客戶端相關
  .BluetoothGattCallback  客戶端連接回調	  
  .BluetoothGattServer  服務端相關
  .BluetoothGattServerCallback 服務端連接回調

android.bluetooth.le.
  .AdvertiseCallback  服務端的廣播回調
  .AdvertiseData  服務端的廣播數據
  .AdvertiseSettings 服務端的廣播設置
  .BluetoothLeAdvertiser 服務端的廣播
  
  .BluetoothLeScanner  客戶端掃描相關(Android5.0新增)
  .ScanCallback  客戶端掃描回調
  .ScanFilter 客戶端掃描過濾
  .ScanRecord 客戶端掃描結果的廣播數據
  .ScanResult 客戶端掃描結果
  .ScanSettings 客戶端掃描設置
  
BLE設備分爲兩種設備: 客戶端(也叫主機/中心設備/Central), 服務端(也叫從機/外圍設備/peripheral)
客戶端的核心類是 BluetoothGatt
服務端的核心類是 BluetoothGattServer 和 BluetoothLeAdvertiser
BLE數據的核心類是 BluetoothGattCharacteristic 和 BluetoothGattDescriptor

參考:

https://github.com/zjw-swun/BluetoothDemo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章