簡體   English   中英

藍牙LE C#廣告和掃描間隔

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM