我有一个与iOS设备通信的BLE模块。
我想使用iBeacon(所以使用iBeacon广告包)和 - 显然 - 使用CoreBluetooth进行连接(和数据交换),但是存在一些问题。
在描述问题之前,我必须告诉您,我需要在发现阶段提供这些信息:
序列号(内部需要) - 6个字符和10个 数字。
A" hw版本"指定它是什么类型的产品(每个产品 使用不同的协议)。
我遇到的问题基本上是如何执行发现阶段,然后连接到特定的已发现对象:
一个。在iBeacon adv数据包中,我应该使用UUID字段进行串行 hw版本的数字和主要/次要字段,但如果我这样做,那么 设备将基本上无法被发现(iBeacon SDK for iOS 在开始监控之前需要知道要查找的UUID 阶段,所以每个设备都不能有所不同。
B中。在iOS中,iBeacon功能可通过CoreLocation库获得, 而标准的BLE功能则可通过CoreBluetooth获得。 如果我使用iBeacon广告包,则发现的对象 CoreBluetooth库没有看到包的任何信息 (所以,问题是:"我怎么知道哪个是串行对象 XYZ"。)
答案 0 :(得分:2)
我意识到我的问题的一个可能的解决方案是以循环方式和#34;广告iBeacon和标准BLE包。让我们说吧。
我试了一下(我宣传了500毫秒的iBeacon封装和500毫秒的标准BLE封装)和标准BLE似乎没问题。
我仍然需要更多地了解iBeacon发现如何对此做出反应,但正如所说它可能是一个解决方案。
答案 1 :(得分:0)
选项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的第一个数据传输将包含硬件编号和序列号。然后,您可以根据硬件编号根据需要调整通信。