当前位置: 首页 > 知识库问答 >
问题:

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

长孙泉
2023-03-14

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

共有1个答案

郭璞
2023-03-14

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

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

这种设计有一个微妙的角落,对你来说可能重要,也可能不重要。该设备可能已连接到手机。这可能是由于其他应用程序(如LightBlue)造成的,但也可能是由于您自己的应用程序。假设你连接到一个设备,然后你的应用程序死亡,你重新启动。该设备可能仍然连接到手机的BLE系统,并且不会发布广告。您发现该设备的方式是使用检索连接的外围设备。但在这种情况下,你永远不会看到一个广告包。如果这个MAC检查是一次性的,那么这种情况对你来说可能不是一个大问题,但是如果客户抱怨你的应用程序找不到设备,那就要记住这一点。(最简单的解决方案是重新启动设备,如果不可能,则重新启动手机。)

保罗建议通过一个特性来暴露你的苹果电脑是一个必要的部分,但是它相对较慢,而且在实践中有点复杂,因为可能有多个设备做广告。如果可以的话,我通常会从广告包开始,只连接到可能正确的设备,然后检查它们的特性。连接是昂贵的。只有在你很有可能是对的时候才联系。

 类似资料:
  • 这听起来很基本,但我是Android BLE开发的初学者。到目前为止,我能够创建我的Nexus9设备作为外围设备和Moto G作为中心设备。而且我正在成功连接设备。但我不知道当我从中央设备发送一个特性时,它将从外设接收到哪里?广告回调仅在广告启动成功而不是(在我的例子中是成功的)时才返回 这是我的外设代码 我正在从中央使用连接的Gatt的writeCharacteristic命令,但不知道如何从外

  • 我有一个ble设备,在android上工作正常,在iOS上检测不到。我在iphone上使用nRFConnect来调试我的ble设备的问题。到目前为止,ios似乎没有显示mac地址以0x90或0x80开头的设备,每个设备都被分配了一个唯一的随机地址。你知道为什么吗?

  • 如何在objective C或swift中获取设备的MAC地址。有没有办法从“标识符”字段获取MAC地址。

  • 我正在尝试制作一个应用程序,它使用Android的新蓝牙低能耗API。为此,我从API Level18附带的BLE示例开始。 当我读到Android不能充当外围设备时,我将Android手机置于中央模式,扫描周围的BLE设备。为此,我用一个模拟心脏传感器的北欧平台做了一些测试。一切都以完美的方式运作! 多谢了。 编辑:经过一些艰苦的测试,我在AOSP页面上提出了一个问题。这里可以查

  • 问题内容: 我想用BLE扫描某些设备。我只想显示我的设备,所以我知道了设备的名称,如果是好的设备,我会将其放在列表中。 我的问题是,如果我更改设备的名称,此检查将为false。因此,我看是否有可能获得一些我添加的用于执行检查的服务的不变的东西。唯一的方法是使用gatt在发现服务后执行此操作,然后再连接到该设备,但是,是否有可能在不连接设备的情况下从该设备发现某些服务? 问题答案: 我不具备andr

  • 从WireShark屏幕抓取显示问题发生时的流量 简短的问题--参考WireShark映像,是什么原因导致Master发送LL_CHANNEL_MAP_IND以及为什么要花这么长时间? 主机产品设备在TI AM4376x处理器上运行我们自己的嵌入式Linux映像。内核是4.14.79,我们的通信栈位于Bluez5之上。WiFi/蓝牙芯片是Jorjin WG7831-BO,运行Tiinit_11.8