我从谷歌代码获得此代码:
void QBluetoothDeviceDiscoveryAgent::deviceDiscovered(const QBluetoothDeviceInfo &info)
QBluetoothDeviceInfo::rssi().
但是如何从`QBluetoothServiceDiscoveryAgent获得rssi距离? 我试过了 QBluetoothServiceDiscoveryAgent serviceInfo; quint i = serviceInfo.device()。rssi();
这里我= -43
如何将其转换为距离? 我得到了链接 Understanding ibeacon distancing 但如何获得发射机功率?根据公式计算距离?
答案 0 :(得分:0)
确保您了解QBluetoothDeviceInfo :: rssi()的含义。调用此函数会立即返回上次扫描设备时最后存储的值 。如果您只收到一个广告包,恰好是在e.x. -90dB,然后立即连接,此功能将继续返回-90,直到断开连接并再次扫描。连接设备通常不发送广告包,因此您可以通过Qt读取的RSSI在连接期间不会更新。
至于接近度,获得好的价值并不容易。要准确地从RSSI转换为几何距离,您必须知道发送方的原始/预期信号强度(或 TX功率级 == RSSI在1米距离 )。该值在设备之间会有所不同。更糟糕的是,在实践中,它还可能有很大差异,具体取决于发送者的电池电量,发送器/接收器彼此的物理方向,各个部件的质量,来自其他RF设备的随机干扰。 ...
BLE-folk有一个博客,解释你应该做什么。 You can read it up here。链接的文章没有读取或假设发送者的理论最大RSSI,而是建议随着时间的推移收集多个RSSI值(+做一些均值/模式过滤),并使用当前的平均值与之前的值进行比较确定您是否正在接近或离开发件人。使用您需要收集的真实数据进行一些微调,加上文档读取和常识,您可以为许多甚至大多数发送器设备开发接近度计算,这些接近度计算精确到大约一米甚至更少在附近。最后,您需要在多少设备之间进行权衡,以便进行“校准”。因为TX功率水平较高或较低,你可以通过移动值来获得。
缺点是 - 您无法测试市场上每种可能的设备,正如我之前所说,不同的设备具有不同的TX功率级别。通过这种方法,您可以开发一种算法,以便为具有大致相同信号配置的设备获得相当好的测量结果,但其他设备看起来很遥远。这篇文章的作者谈到为不同的供应商创建不同的配置文件,但这并不会有所帮助(考虑两个相同的信标("大/小"),一个用于大型,一个用于小型室内位置 - 仅使用RSSI,您无法可靠地确定您是否接近小信标或中等范围接近大信标,除非他们通过GAP或其他方式识别自己(如果您计划部署在MacOS上,则忘记MAC地址或的iOS)。
另外,为Android BLE开发的兜风做好准备。一些供应商知道他们的BLE实现非常糟糕和破坏,他们甚至禁用所有ROM上的HCI-Logging-Feature来隐藏它。其他人可以像以太网那样通过以太网进行BLE-nuked。