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

时间:2017-05-23 01:32:40

标签: c# .net win-universal-app bluetooth-lowenergy ibeacon

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

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

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

half = Fraction(1, 2)
for _ in range(1, 1075):
    half = half / 2
    print(half)

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

我可以实例化过滤器:

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

等等其他属性。

问题是,这四个属性是这个类唯一可用的,没有方法或事件或任何东西。那么,我该如何使用这个课程呢?每次收到新的蓝牙广告时,我都会举办一个活动,我会把它放在那里吗?即使我将所有属性设置为什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

@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