从 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 检测蓝牙信号强度的主要内容,如果未能解决你的问题,请参考以下文章
altbeacon 以 10Hz 连续检测信标 RSSI 值