【问题标题】:iBeacon & XCode - Discovering with CoreLocation and Connecting with CoreBluetoothiBeacon 和 XCode - 使用 CoreLocation 发现并使用 CoreBluetooth 连接
【发布时间】:2014-05-19 13:08:54
【问题描述】:

我有一个与 iOS 设备通信的 BLE 模块。

我想使用 iBeacon(因此使用 iBeacon 广告数据包)和 - 显然 - 使用 CoreBluetooth 进行连接(和数据交换)来执行发现,但存在一些问题。

在描述问题之前,我必须告诉你,我需要在发现阶段提供这些信息:

  1. 序列号(内部需要) - 6 个字符和 10 数字。

  2. 一个“硬件版本”来指定它是什么类型的产品(每个产品 使用不同的协议)。

我遇到的问题基本上是如何执行发现阶段,然后连接到特定的发现对象:

A.在 iBeacon adv 数据包中,我应该使用 UUID 字段进行串行 硬件版本的数字和主要/次要字段,但如果我这样做, 设备将基本上不可发现(iBeacon SDK for iOS 在开始监控之前需要知道要查找的 UUID 相位,因此每个设备都不能不同)。

B.在 iOS 中,iBeacon 功能可通过 CoreLocation 库获得, 标准 BLE 功能可通过 CoreBluetooth 获得。 如果我使用 iBeacon 广告数据包,则发现的对象 CoreBluetooth 库看不到包的任何信息 (所以,问题是:“我怎么知道哪个是串行的对象 XYZ?”)。

【问题讨论】:

    标签: core-location bluetooth-lowenergy core-bluetooth ibeacon discovery


    【解决方案1】:

    我意识到我的问题的一个可能解决方案是宣传 iBeacon 和标准 BLE 包,比方说以“循环方式”。

    我试过了(我宣传 500 毫秒 iBeacon 包和 500 毫秒标准 BLE 包),标准 BLE 似乎没问题。

    我仍然需要进一步研究 iBeacon 发现对此有何反应,但正如所说的那样,它可能是一个解决方案。

    【讨论】:

    • 嘿,您发现什么是最好的解决方案?现在有同样的问题,并在找到信标后寻找如何连接到标准 BLE。您的 500 毫秒解决方案听起来可行,但也许有更好的方法?
    • 嗨,我和我的团队测试了“500msec”解决方案一段时间,发现它似乎足够稳定,可以将其视为“最终解决方案”。显然,这几乎不取决于您使用的硬件(不是百分百肯定,但我想我们使用的是 Bluegiga 模块)我们诚实地尝试了一段时间寻找其他解决方案,但没有任何成功:((也在这里,这几乎不取决于您需要宣传多少信息)
    【解决方案2】:

    选项 1:如果您想使用 iBeacon 广告,请忘记直接在 ProximityUUID 中编码任何信息。正如您所提到的,您需要在 iOS 中预先了解这一点。相反,制作一个查找表以将 iBeacon 标识符转换为硬件编号/序列号。像这样:

    Proximity UUID                       Major Minor  HW/N  S/N
    2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 10001 10001  0001  abcdef0000000001
    2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 10001 10002  0001  abcdef0000000002
    

    这个系统可以让一个 UUID 拥有 65536*65536 个不同的序列号。您需要将此表存储在服务器端并有一个 Web 服务来根据 UUID/Major/Minor 查找硬件编号和序列号。

    我的公司在http://www.proximitykit.com 提供云服务,让您可以做到这一点。您甚至可以使用我们的 Web 服务 API 以编程方式将项目添加到您的查找表中。 (可能会很大。)

    选项 2: 由于您在建立连接后需要 CoreBluetooth,因此您可能会考虑使用 CoreBluetooth 来处理整个事情。您的广告对于所有硬件类型都是相同的,但在连接后,从设备传输到 iOS 的第一个数据将包含硬件编号和序列号。然后,您可以根据硬件编号根据需要调整通信。

    【讨论】:

    • 首先感谢您的回复。我尝试做与选项 1 类似的事情(对不起,但我不想使用外部服务),将我的序列号放在主要/次要中(它是 4294967295 可能的序列号!),并将硬件版本隐藏在其中。这有点棘手,我不太喜欢它,但它确实有效。我倾向于排除选项 2,因为它基本上意味着连接到范围内的每个 BLE 设备。
    猜你喜欢
    • 2019-05-03
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2013-07-21
    相关资源
    最近更新 更多