1. 程式人生 > >Delphi 的 Blooth LE(藍芽4.0) 程式設計原理簡介

Delphi 的 Blooth LE(藍芽4.0) 程式設計原理簡介

首先,Delphi 官方的例子程式裡面,有BLE的例子,可以先參考。

藍芽的不同版本:2.0 3.0 4.0 其通訊協議有很大的不同。4.0 就是 BLE,低功耗藍芽。

以下是我經過自己寫例子程式碼操作藍芽裝置的測試摸索後對BLE藍芽程式設計原理的理解。安卓手機上測試通過。

Delphi 提供了BLE的控制元件:TBluetoothLE


拖一個控制元件放到介面上,設定控制元件的 Enable 為 True。程式啟動後,該控制元件可以工作。


對一個 BLE 裝置的讀寫操作的基本原理:


BLE 裝置有多個不同的【服務】,Service;每個服務底下,有多個不同的【特徵】, Characteristic。讀寫操作就是針對特徵的【值】。


每個服務有一個 UUID,每個特徵也有一個 UUID。


在 Delphi 底下采用 TBluetoothLE 控制元件操作 BLE 的基本方式:


1. 首先是裝置發現。執行完裝置發現後,TBluetoothLE 裡面會產生多個裝置例項物件。
   啟動裝置發現的程式碼:BluetoothLE1.DiscoverDevices(3000); 這裡的 3000 是超時值。可以是 10 秒甚至更多。
   
   裝置發現(掃描BLE藍芽裝置)中,BluetoothLE1 會觸發事件:OnDiscoverLEDevice。這裡會不停地觸發。掃描動作完成後,會觸發 OnEndDiscoverDevice 事件。可以在這個事件裡面檢視是否掃描到你要的裝置。
   
2. 裝置發現完成後,BluetoothLE1 裡面就有多個裝置的物件例項 TBluetoothLEDevice,通過 BluetoothLE1.DiscoveredDevices[i] 可以獲取到。


3. 針對某個裝置,執行服務發現(掃描其提供什麼服務):BluetoothLE1.DiscoveredDevices[AIndex].DiscoverServices
3.1. 上述服務發現方法被呼叫後,會觸發 OnServicesDiscovered 事件。這個事件提供了 AServiceList: TBluetoothGattServiceList,可以從裡面獲取到這個裝置的所有服務物件。


4. 要操作某個裝置的某個值:
4.1. 首先要根據服務的 UUID 獲取到裝置物件,方法:BluetoothLE1.DiscoveredDevices[i]
4.2. 然後,針對該裝置物件,獲取其服務物件(根據該服務的 UUID),方法:BluetoothLE1.GetService; 
4.3. 獲取特徵物件(採用該特徵的 UUID),方法:BluetoothLE1.GetCharacteristic;
4.4. 如果是寫資料到藍芽裝置,則是修改該特徵物件的值:ACharacteristic.Value := AValue; 然後,將該特徵物件寫入藍芽裝置:BluetoothLE1.WriteCharacteristic(ADevice, ACharacteristic); 到此資料已經寫入藍芽裝置。
4.5. 如果是要監聽某個特徵的廣播,註冊:ADevice.SetCharacteristicNotification(ACharacteristic, True); 註冊完成後,收到藍芽裝置的廣播資料,BluetoothLE1 會觸發 OnE1CharacteristicRead 事件。通過該事件提供的 ACharacteristic: TBluetoothGattCharacteristic 特徵物件,讀到來自藍芽的廣播資料。資料如何解釋,則看具體裝置或具體的定義了。