是否可以限制信标的范围,以便只有特定近距离(或接近度)内的设备才能识别并连接到信标?让我们说例如0.5米区域以外的设备不应该能够看到或连接到信标。我正在使用iOS设备作为灯塔。在Apple的CoreLocation
API中,peripheralDataWithMeasuredPower类中有一个名为CLBeaconRegion的方法,其中包含:
peripheralDataWithMeasuredPower: 检索可用于将当前设备通告为信标的数据。
(NSMutableDictionary *)peripheralDataWithMeasuredPower:(NSNumber *)measuredPower
参数:
measuredPower : 设备的接收信号强度指示(RSSI)值(以分贝为单位)。该值表示距离一米远的信标的测量强度,并在测距期间使用。指定
nil
以使用设备的默认值。
这可以用来限制信标的范围吗?如果是,我无法理解如何确定为measurePower
参数设置的值?他们试图通过...value represents the measured strength of the beacon from one meter away..
说什么?
如果这是一个非常基本的问题,请原谅。我最近开始iOS开发,非常感谢您的帮助。感谢。
答案 0 :(得分:13)
不幸的是,没有特殊硬件就没有简单的方法来调整iBeacon的范围。
您提到的功率场只是iBeacon传输的校准值。它不会影响iBeacon的实际物理无线电范围。 如果距离iPhone 50米远的地方可以看到发射器,那么改变功率场值就不会改变这一点。它唯一能做的就是改变是校准常数,它是距离的输入iOS软件内部的估计算法(用于精度和邻近域)。改变功率场会影响API返回的估计距离,但不会改变首次检测到iBeacon的实际距离。
改变标准蓝牙的传输功率iBeacon实际上是不可能的。从理论上讲,你可以使用金属屏蔽在发射器周围构建一个“法拉第笼”来静音它的功率,但我的经验是它不是很有效,而且很容易受到屏蔽中的微小缺陷的影响。如果你想改变发射功率,你必须让别人为你建造自定义硬件。
软件替代方案是使用测距API在iBeacon可见时跟踪iBeacon,并且仅在估计距离足够接近时执行操作,比如说你所建议的0.5米。这很有效 - 只在前台。
如果您需要在近距离实际在后台唤醒您的应用,这将无效。您可以做的最好的事情是让监控API在首次检测到iBeacon时唤醒您的应用,然后向用户发送通知并开始测距。如果用户选择将应用程序带到前台(50米处),您可以继续监控,然后在0.5米处执行所需的操作。如果用户没有选择将应用程序带到前台,iOS在暂停应用程序之前只会给你大约5秒的时间来继续测距。在这段时间内,距离不太可能从50米变为0.5米。
答案 1 :(得分:3)
对于我调查的大多数BLE芯片,通常至少有四种传输功率级别设置可用于限制广告范围。
德州仪器CC2541(在其SensorTag开发设备中使用)和CC2540具有+ 4,0,-6和-23作为其功率电平选项。但是,在SensorTag中更改它确实需要重新编译固件。按原样,所提供的固件仅在一个地方提到功率电平,但这只是一个广播的值,以通知任何中央收听者信标有多大 - 以便中央设备可以根据收到的信息更好地计算估计范围信号强度(RSSI)。必须在固件中添加一条额外的线路才能实际更改传输功率。例如:
HCI_EXT_SetTxPowerCmd( HCI_EXT_TX_POWER_0_DBM );
基于此,iOS设备上应该有两个位置可以设置功率级别:一个只是告知听众什么级别,一个是BLE芯片真正的传输功率实际改变的地方。但是,期望这些值仅限于几个列举的选项,这些选择可能会或可能不会满足您的实际范围需求。
(SensorTag的-23设置可能适用于0.5米的检测范围。但如果您希望SensorTag始终进行广告宣传,则需要additional firmware change。)
答案 2 :(得分:1)
您是否看过proximity
属性是否有用? From the apple docs:
CLProximity 反映与信标相对距离的常数。
typedef {
CLProximityUnknown,
CLProximityImmediate,
CLProximityNear,
CLProximityFar
} CLProximity;
我还会尝试尝试将proximity
与accuracy
和rssi
结合起来。
答案 3 :(得分:0)
它将从灯塔到灯塔不等。如果您使用Radius Networks的信标,则它们具有发射功率设置,使您可以基本上限制信标无线电广播到远程范围的能力。我不知道其他品牌是否拥有它,但大多数都不是我所见过的。