[英]Bluetooth LE C# Advertising and Scan Interval
我最近開始開發UWP項目,並一直在嘗試與'Minew S1'BLE設備建立連接,根據其文檔,該設備正在運行三個主要服務。
文檔沒有指出這種方式,但是我發現在BLE掃描期間可以讀取設備數據(frameType,productModel,batteryLevel,溫度,濕度,MAC地址),因為設備對這些掃描做出響應(?)。帶有未記錄的服務(UUID:0000ffe1-0000-1000-8000-00805f9b34fb)和相應的serviceData字符串。
我創建了一個簡單的BluetoothLEAdvertisementWatcher對象,並訂閱了其Received事件。 這樣,我在運行時僅從該對象獲取一個serviceData字符串。 該代碼段如下:
BluetoothLEAdvertisementWatcher bleWatcher;
bleWatcher = new BluetoothLEAdvertisementWatcher();
bleWatcher.ScanningMode = BluetoothLEScanningMode.Active;
bleWatcher.Received += BleWatcher_Received;
bleWatcher.Stopped += BleWatcher_Stopped;
bleWatcher.Start();
private void BleWatcher_Received(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args)
{
DataReader dataReader;
foreach (var item in args.Advertisement.ServiceUuids)
{
if (item == new Guid("0000ffe1-0000-1000-8000-00805f9b34fb"))
{
foreach (var data in args.Advertisement.DataSections)
{
dataReader = DataReader.FromBuffer(data.Data);
byte[] bytes = new byte[data.Data.Length];
dataReader.ReadBytes(bytes);
if (BitConverter.ToString(bytes).Length > 5)
{
S1Sensor s1 = new 1Sensor(BitConverter.ToString(bytes));
Debug.WriteLine("New S1 Sensor advertisement received:");
Debug.WriteLine("Timestamp: " + DateTime.Now + ", Battery level: " + s1.BatteryLevel + "%, Temperature: " +
s1.Temperature + "°C, " + "Humidity: " + s1.Humidity + "%, MAC Address: " + s1.MAC_Address + "==");
}
}
}
}
}
問題1:上面的代碼使用我編寫的S1Sensor幫助程序類方法成功打印了所需的數據。 唯一的問題是,默認情況下,設備的廣告間隔設置為1000毫秒,但是在應用程序運行期間,我只收到一次該字符串(很少兩次)。 有沒有一種方法可以更頻繁地接收和處理這些serviceData? (最好每1000毫秒一次)
問題2:我的另一個問題是,該代碼僅在設備與計算機配對時才返回值。 我認為即使沒有將設備與計算機配對,我也應該能夠在不連接的情況下掃描設備並查看其響應(serviceData)。 即使正在運行此應用程序的計算機未與設備配對,也可以查詢serviceData字符串嗎?
感謝您的時間。
問題1:是否可以更頻繁地接收和處理這些serviceData? (最好每1000毫秒一次)
如果設備處於連接狀態而不是通告狀態,則它將不會通告,並且可能導致您不再接收serviceData。 您需要斷開設備的連接才能使其恢復廣告狀態。 您可以檢查此線程 。
問題2:即使正在運行此應用程序的計算機未與設備配對,也可以查詢serviceData字符串嗎?
從Windows 10 Creators Update中 ,可以通過使用BluetoothLEDevice.GetGattServicesAsync()
, GattDeviceService.GetCharacteristicsAsync()
以及GattCharacteristic.GetDescriptorsAsync()
來查詢不配對的遠程設備來實現。
我使用TI SensorTag BLE設備測試了UWP藍牙低功耗示例。 無需配對,我可以讀取設備數據,如下所示:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.