【问题标题】:How to differentiate to which BLE device's peripheral should I connect If I know mac address of that BLE device in iOS?如果我知道 iOS 中那个 BLE 设备的 mac 地址,如何区分我应该连接哪个 BLE 设备的外围设备?
【发布时间】:2019-06-09 10:49:09
【问题描述】:

在 iOS 中无法获取 CBPeripheral 对象的 mac 地址。 现在我没有了。具有不同 UUID 但具有相同外设名称的 BLE 设备。用户必须首先通过注册命令向该 BLE 设备注册到该 BLE 设备,该设备的 MAC 地址将在 QR 码扫描时获得。但是,我如何才能获得正在注册的设备用户,因为在 iOS 中我没有在外围设备中获取 MAC 地址?

【问题讨论】:

  • 您需要修改外围设备,使其通过 GATT 特征公开一些唯一标识符。然后你可以连接到外围设备并读取值。
  • 您还可以在广告数据中添加一个唯一的 id,这样您甚至可以在连接之前识别各个外围设备。

标签: ios bluetooth bluetooth-lowenergy core-bluetooth cbperipheral


【解决方案1】:

正如 Dorian Roy 所说,一个好的基本方法是将 MAC 编码到广告数据包中的制造商特定数据中。 MAC 是 6 个字节,所以如果你还没有在那里存储太多,你通常应该有空间。如果您的所有设备都具有相同的 OUI(制造商前缀),您通常可以避开低 3 个字节。

实际上,我设计的系统只公布 MAC 的最后一个字节,然后通过连接进行仔细检查以获取完整的 MAC。在同一个房间里有大约 20 台设备在做广告之前,你有超过 50% 的没有碰撞的机会。如果同一个房间里的设备可能少于 3 台,那么发生碰撞的可能性不到 2%(但请记住,这意味着 50 种情况中就有 1 台会发生碰撞,因此您不能忽略它)。显然,包含的字节越多越好。

这种设计有一个微妙的角落案例,可能对您来说很重要,也可能无关紧要。该设备可能已经通过 BLE 连接到手机。这可能是由于另一个应用程序(例如 LightBlue),也可能是由于您自己的应用程序。假设你连接到一个设备,然后你的应用程序死掉了,你又重新启动了。该设备可能仍连接到手机的 BLE 系统,并且不会做广告。您发现该设备的方式是使用retrieveConnectedPeripherals。但在这种情况下,您将永远不会看到广告包。如果此 MAC 检查是一次性事件,那么这种情况对您来说可能不是主要问题,但如果客户抱怨您的应用找不到设备,请记住这一点。 (最简单的解决办法是重启设备,如果不行,就重启手机。)

Paul 建议通过特性暴露你的 MAC 是必要的,但它相对较慢,并且在实践中有点复杂,因为可能有多个设备广告。如果可以的话,我通常会从广告包开始,并且只连接到可能正确的设备,然后检查它们的特性。连接很昂贵。仅当您很有可能是对的时才进行连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多