从 Windows 上的 RSSI 检测蓝牙信号强度

Posted

技术标签:

【中文标题】从 Windows 上的 RSSI 检测蓝牙信号强度【英文标题】:Detecting bluetooth signal strength from RSSI on Windows 【发布时间】:2020-06-11 10:28:10 【问题描述】:

我试图了解如何在 Windows 上以 C# 或 C++ 访问蓝牙(不是 LE)连接的 RSSI。

我的理解是没有直接的“GetRSSI()”类型的命令,但是有什么间接的方法可以访问它吗?

到目前为止,我发现的一切似乎都是针对 LE 连接的。

编辑: 我查看了 AEP 并尝试从连接的 BT 设备获取 SignalStrength AEP。

    foreach (var key in deviceInformation.Properties.Keys)
    
        Debug.WriteLine($"key: deviceInformation.Properties.GetValueOrDefault(key)");
    

给予:

System.ItemNameDisplay: <ommitted>

System.Devices.DeviceInstanceId: 
System.Devices.Icon: C:\Windows\System32\DDORes.dll,-2001
System.Devices.GlyphIcon: C:\Windows\System32\DDORes.dll,-3001
System.Devices.InterfaceEnabled: 
System.Devices.IsDefault: 
System.Devices.PhysicalDeviceLocation: 
System.Devices.ContainerId: 

我省略了项目名称。

所以看起来好像没有 AEP,除非我遗漏了什么?

【问题讨论】:

有一种方法可以使用 WinRT API 在 Windows 10 平台上获取经典蓝牙设备的 RSSI。但是,无论如何都必须连接设备。所以看看 WinRT API 或者使用第三方库。 你有什么具体的例子吗?我可以在 api 中找到 BluetoothSignalStrengthFilter 类,但除了作为 BluetoothLEAdvertisementWatcher 类的一部分之外,我看不到任何关于它的使用方式的解释 很遗憾,我没有任何可以分享的代码,因为它是我们商业产品的一部分。但是,您可以搜索此字符串“System.Devices.Aep.SignalStrength”。它应该会给你一些想法。 我进行了一些研究,但我似乎没有为我连接的蓝牙设备列出任何 AEP - 你能看看我上面的编辑吗? @MikePetrichenko 不是key,是DeviceInformation的一个属性。 【参考方案1】:

我知道这已经晚了,但我刚刚开始了一个新项目,我还想了解有关蓝牙(不是 LE)设备的 SignalStrength 的信息。

@Mike-Petrichenko 给了你一些很好的提示。在遵循他搜索“System.Devices.Aep.SignalStrength”的建议后,我找到了this post

在抛出 OPs 代码并调试了一下之后,我想出了这个解决方案:

private const string SignalStrengthProperty = "System.Devices.Aep.SignalStrength";
var additionalProperties = new[]  SignalStrengthProperty ;

DeviceWatcher mWatcher = DeviceInformation.CreateWatcher(BluetoothDevice.GetDeviceSelector(), additionalProperties);
var rssi = Convert.ToInt16(deviceInformation.Properties[SignalStrengthProperty]);

【讨论】:

以上是关于从 Windows 上的 RSSI 检测蓝牙信号强度的主要内容,如果未能解决你的问题,请参考以下文章

降低 Android 设备上的蓝牙信号强度

altbeacon 以 10Hz 连续检测信标 RSSI 值

来自蓝牙信标的信号强度不一致 - Kontakt.io

[转] 蓝牙RSSI计算距离

Android Developer -- Bluetooth篇 开发实例之六 蓝牙RSSI计算距离

蓝牙测距原理