我有一个Windows 10 UWP应用程序,我使用iBeacons使用RSSI进行室内地理围栏。
到目前为止,我正在获取RSSI,使用卡尔曼滤波器对其进行平滑,然后以米为单位计算距离。这工作得很好。有了这个,我可以说现在我所要做的就是创建一个以米为单位的阈值,并说如果我的计算距离小于,我在区域内,如果大于,我在外面。好吧,我可以这样做,我相信它会起作用。
但是,我注意到MSDN文档中的这个类名为:
half = Fraction(1, 2)
for _ in range(1, 1075):
half = half / 2
print(half)
它有一些很好的属性似乎做我想要它做的事情,如内部和外部阈值以及采样周期和超时。但是,如果我想用它作为我上面解释的方法的替代方法,我不知道如何使用这个过滤器。
我可以实例化过滤器:
BluetoothSignalStrengthFilter
然后我可以创建我的值(在测试期间作为常量):
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
等等其他属性。
问题是,这四个属性是这个类唯一可用的,没有方法或事件或任何东西。那么,我该如何使用这个课程呢?每次收到新的蓝牙广告时,我都会举办一个活动,我会把它放在那里吗?即使我将所有属性设置为什么?
谢谢!
答案 0 :(得分:2)
@Furmek指出,您可以使用BluetoothLEAdvertisementWatcher
接收蓝牙广告。您可以将信号强度过滤器配置为仅在范围内使用BluetoothLEAdvertisementWatcher.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。