2016-04-21 163 views
1

我期待创建一个跨平台的应用程序,允许我定期通告设备Mac地址(尽管我已经意识到由于某种原因我收到3个单一设备),以便它可以被记录并用于参考短手动用户广告,使得每个广告可以由特定用户识别;然而,似乎我已经陷入了有关ULEID在BLE上的问题了解自定义BLE UUID

搜索了一段时间后,我仍然对BLE服务中的UUID有点困惑。最初我决定使用一个自定义的BLE,它反复无法做出奇怪的错误宣告,或者由于数据包很大,即使数据只有一个字节长,也是如此。我意识到UUID的格式必须是xxxxxxxx-0000-1000-8000-00805F9B34FB。除此之外的任何内容都会发送完整的UUID,当广告未被连接时这个UUID太大。我还发现,我可以在上半部分使用任何UUID前缀(0000XXXX),该前缀不在保留范围0x000E - 0x01FF中。

这是一个正确的假设,我可以使用与标准00000200 - 0000FFFF不冲突的任何UUID。我问,因为我在选择该范围内的UUID时似乎遇到了问题,并且据我了解,在范围之外创建自定义UUID是BLE上的一个坏主意,因为它将被迫使用20-23字节中的16个字节。有关这个的任何输入?

也是预先定义的方式发送用户设备的广告,以便它可以被缓存并用于标识其他用户广告?

编辑:

没有到达该项目需要连接手机的跨平台与其他设备一起以无连接的方式。最初,我计划让设备反复宣传它的身份以及可用于唯一标识用户消息的名称和唯一MAC地址。任何没有缓存用户身份的设备都会简单地丢弃该用户的传入数据包。 - kdgwill 9分钟前

我实际上认为如果我能以某种方式连接到5-10个设备,然而,这个想法并不是在添加新设备时不打扰用户/重复提示。因此,我认为使用广告和洪水会有所帮助,但味精大小各不相同。有没有可能会打扰用户一次连接提示并自动连接每个额外的BLE设备。如果我能以某种方式以1:1的比例连接多个设备,而无需每次都提示用户,同时仍然扫描其他可能的连接,这将非常有用,但我不认为BLE允许这样做。 - kdgwill 8秒前编辑

使用identifierForVendor或CBAdvertisementDataServiceUUIDsKey是唯一标识每个用户的好方法;但是,这意味着如果我不使用1个注册的UUID,我可能只是暂时随机选择一个UUID。那开销将是4-16 +然而很多字节需要识别每个数据包。

+0

一些链接我已经看到但是他们是很多人不是有时发生冲突 **的https://www.bluetooth.com/specifications/assigned-numbers/service-discovery **的https:// WWW .bluetooth.com/specifications/assigned-numbers ** http://processors.wiki.ti.com/index.php/Tutorial:_How_to_Create_a_Custom_Bluetooth_Smart_Embedded_Application_with_the_CC2650DK#UUID – kdgwill

+0

** http://stackoverflow.com/questions/10243769/什么范围的蓝牙uuids可以使用供应商定义配置文件 ** http://stackoverflow.com/questions/28714704/custom-ble-service-with-spp-support * * http://stackoverflow.com/questions/21428455/android-ble-using-custom-service-uuid ** http://stackoverflow.com/questions/18019161/startlescan-with-128-bit-uuids-没有工作在本机android安装执行/ ** https://www.safaribooksonline.com/library/view/getting-started-with/9781491900550/ch04.html – kdgwill

回答

1

如果您向蓝牙联盟注册设备,则只能使用较短的4字节UUID,否则您必须使用较长的16字节UUID。

你是正确的,你可以选择服务(和特性)的16字节的UUID。您应该准随机选择ID,并且始终对该特定类型的服务/特性使用相同的UUID。

由于您发送的每个数据包都必须包含目标服务UUID,因此使用较长的UUID会占用有效负载中可用的大量字节。每个数据包可用的字节越少意味着越多的数据包必须发送给更大的消息,这会增加发送消息所需的时间。如果你不发送消息,而只是使用广告数据,那么这不是问题,尽管你的广告数据可用的字节更少。

MAC地址在使用iOS蓝牙框架的代码中不可用。 iOS 8+可以发送一个随机MAC地址,因此无论如何您都不应该依赖于识别设备。

由于MAC地址不适用于您,您可能希望通过BLE连接连接并发送一个唯一的ID(例如identifierForVendor),或者可能通过CBAdvertisementDataLocalNameKey在广告数据中包含一个小ID。

+0

到达需要在项目以无连接的方式将手机与其他设备连接在一起。最初,我计划让设备反复宣传它的身份以及可用于唯一标识用户消息的名称和唯一MAC地址。任何没有缓存用户身份的设备都会简单地丢弃该用户的传入数据包。 – kdgwill

+0

我实际上认为,如果我可以以某种方式一次连接5-10台设备,这样会更容易;然而,这个想法并不是在添加新设备时不打扰用户/重复提示。因此,我认为使用广告和洪水会有所帮助,但味精大小各不相同。有没有可能会打扰用户一次连接提示并自动连接每个额外的BLE设备。如果我能以某种方式以1:1的比例连接多个设备,而无需每次都提示用户,同时仍然扫描其他可能的连接,这将非常有用,但我不认为BLE允许这样做。 – kdgwill

+0

使用identifierForVendor或CBAdvertisementDataServiceUUIDsKey是唯一标识每个用户的好方法;但是,这意味着如果我不使用1个注册的UUID,我可能只是暂时随机选择一个UUID。那开销将是4-16 +然而很多字节需要识别每个数据包。 – kdgwill