Windows 10 UWP BTLE 信标地理围栏使用 RSSI

Windows 10 UWP BTLE beacon geofencing using RSSI

我有一个 Windows 10 UWP 应用程序,我正在使用 iBeacons 使用 RSSI 进行室内地理围栏。

到目前为止,我正在获取 RSSI,使用卡尔曼滤波器对其进行平滑处理,然后以米为单位计算距离。这工作得很好。有了这个,可以说现在我所要做的就是创建一个以米为单位的阈值,如果我计算的距离小于,我就在该区域内,如果大于,我就在外面。好吧,我可以做到,我非常有信心它会奏效。

但是,我在 MSDN 文档中注意到这个 class 名为:

Bluetooth​Signal​Strength​Filter

它有一些很好的属性,似乎可以做我想要它做的事情,例如阈值内外以及采样周期和超时。但是,如果我想用它来替代我上面解释的方法,我不确定如何使用这个过滤器。

我可以实例化过滤器:

private BluetoothSignalStrengthFilter signalFilter = new BluetoothSignalStrengthFilter();   

然后我可以创建我的值(作为测试期间的常量):

private const int BeaconInRangeThresh = -75; //The minimum RSSI value in dBm on which RSSI events will be propagated or considered in range.
private const int BeaconOutRangeThresh = -76; //The minimum RSSI value in dBm on which RSSI events will be considered out of range.
private const int SamplingInterval = 5; //The interval at which received signal strength indicator (RSSI) events are sampled.
private const int SamplingTimeout = 5; //Timeout in seconds

最后,我可以将这些属性设置为实例化的 class,如下所示:

signalFilter.InRangeThresholdInDBm = BeaconInRangeThresh;

其他属性依此类推。

问题是,这四个属性是此 class 唯一可用的东西,没有方法或事件或任何东西。那么,我该如何使用这个class呢?每次收到新的蓝牙广告时,我都会引发一个事件,我要把它放在那里吗?就算我设置了所有的属性又怎样?

谢谢!

正如@Furmek 指出的那样,您可以使用BluetoothLEAdvertisementWatcher 来接收蓝牙广告。您可以将信号强度过滤器配置为仅在使用 Bluetooth​LE​Advertisement​Watcher.SignalStrengthFilter 范围内时传播事件。您可以注册 Received 事件,以便 每次收到新的蓝牙广告时都引发事件

        // Create and initialize a new watcher instance.
        watcher = new BluetoothLEAdvertisementWatcher();

        ...

        //Configure the signal strength filter.
        watcher.SignalStrengthFilter.InRangeThresholdInDBm = -70;
        watcher.SignalStrengthFilter.OutOfRangeThresholdInDBm = -75;

        ...

        // Attach a handler to process the received advertisement. 
        watcher.Received += OnAdvertisementReceived;

更多信息您可以参考Bluetooth advertisement sample