如果我知道iOS中该BLE设备的MAC地址,如何区分该连接到哪个BLE设备外围设备?

时间:2019-01-15 12:12:57

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

在iOS中无法获取CBPeripheral对象的mac地址。 现在我没有了。具有不同UUID但具有相同外围设备名称的BLE设备。用户必须先通过向该BLE设备注册命令来注册该BLE设备,该设备的QR码扫描时将获得其MAC地址。但是如何像在iOS中那样向未注册MAC的设备用户进行注册呢?

1 个答案:

答案 0 :(得分:0)

如Dorian Roy所指出的,一个好的基本方法是将MAC编码为广告数据包中制造商特定的数据。 MAC为6个字节,因此,如果尚未在其中存储太多,通常应该有空间。如果所有设备都具有相同的OUI(制造商前缀),通常可以低3个字节。

我实际上已经设计了一些系统,这些系统仅通告MAC的最后一个字节,然后通过连接进行仔细检查以获取完整的MAC。在同一房间内大约有20台设备投放广告之前,您有50%的机会不会发生冲突。如果同一房间中的设备可能少于3个,则发生冲突的机率不到2%(但请记住,这意味着50个情况中有1个发生冲突,因此您不能忽略它)。显然,您包含的字节越多越好。

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

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