BLE 设备应无需扫描即可连接

Posted

技术标签:

【中文标题】BLE 设备应无需扫描即可连接【英文标题】:BLE Device Should get connected Without Scanning 【发布时间】:2018-04-06 08:10:34 【问题描述】:

BLE(蓝牙低功耗)设备应该在不扫描到我的 iPhone(应用程序)的情况下连接。

我有通过扫描 QRCode 获得的 BLE 地址。

所以我希望从那里连接特定设备(我传递地址的设备)而不调用 (manager.scanForPeripherals(withServices: nil) ) 因为它将调出所有设备。

现在,当我找到我的特定设备时,我可以扫描我的 BLE 设备的二维码并扫描所有可用的设备。 我正在停止扫描并使用

中的广告数据连接到它
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)

我已经有了BLE设备的地址,有没有办法不用扫描直接连接

提前致谢。任何参考资料都会有所帮助。

【问题讨论】:

如果您对问题有任何疑问,请提及 请求场外资源被认为是题外话。请在你的问题中解释你做了什么研究,你已经尝试了什么以及你遇到了什么问题。那么你不会得到downvotes。我不认为你可以连接到任何 BLE 设备而不扫描它以确认它存在,但其他人可能更了解它 扫描有什么问题?只需几秒钟左右,一旦找到您想要的设备,您就可以简单地连接并停止扫描。首次发现设备后,您可以保存其标识符并致电retrievePeripherals 以尝试避免以后进行扫描。 是强制扫描,因为我已经有了设备地址。(通过扫描二维码)。在 android 中它似乎是可能的(但如果我错了,我不确定是否纠正我)。 【参考方案1】:

如果不执行扫描,您将无法连接到外围设备。在扫描外设管理器时,会为每个外设创建一个唯一的 ID,然后将其用于连接。对于不同 iPhone 上的相同外围设备,此唯一 ID 会有所不同。所以你的想法行不通,你必须执行连接扫描。

【讨论】:

我有BLE的地址,想直接连接,怎么实现呢。如果我进行扫描,将花费很多时间。任何想法 你必须有设备的mac地址。实际上 CB 管理器获取此地址并创建一个与此 mac 对应的唯一 ID,该 ID 对手机来说是唯一的。所以目前还没有机会直接连接它。您可以做的一件事是在第一次扫描时,您可以保存此 UUID 并在以后使用它进行连接,这将节省时间。您必须执行至少 1 次扫描。 抱歉又给您添麻烦了。我想连接到设备(我知道它的 UUID)如何在不进行任何扫描的情况下连接它。【参考方案2】:

如果您希望重新连接到以前发现的设备,您可以存储设备 UUID,然后使用:

let retrievedPeripheral = centralManager.retrievePeripherals(withIdentifiers: [deviceUUID])

这将检索与提供的 UUID 匹配的 CBPeripheral 对象。您可以使用以下方式执行连接:

centralManager.connect(retrievedPeripheral[0], options: nil)

这确实意味着设备必须在范围内并有广告,除非您扫描,否则确实无法检查。 希望这会有所帮助。

【讨论】:

【参考方案3】:

我不知道 Iphone 但在 Windows 上是这样。只需连接已知地址即可。它有一些缺点: 该设备可能无法触及或已连接,因此您必须抓住这些情况。

【讨论】:

以上是关于BLE 设备应无需扫描即可连接的主要内容,如果未能解决你的问题,请参考以下文章

我们可以使用蓝牙重新连接断开的外围设备而无需再次扫描 ios

BLE 设备在不扫描时是不是会读取广告数据包? (自动连接)

如何从 C++ 代码扫描和连接广告 BLE 设备?

MT7921:通过BLE发送指定UUID的广播

Android BLE最完整的工具类(扫描/连接/读写/通知设备)

BLE入门 14 蓝牙LL层连接