Ios5 Corebluetooth,如何获得唯一的UUID?

Ios5 Corebluetooth,如何获得唯一的UUID?,ios5,core-bluetooth,Ios5,Core Bluetooth,我的问题是CBP的UUID似乎不是唯一的 我有两台iPad2和一台bluetooth4.0设备 蓝牙设备的UUID与两款iPad不同 如下图所示。 有没有办法在iOS设备上找到蓝牙设备的唯一UUID 我需要找到一个UUID或mac地址,不会在不同的设备之间改变 非常感谢,请帮帮我 外设使用至少每15分钟更改一次的随机可解析地址,此时外设看起来是新的。要更改此行为,您需要与外围设备配对,然后您将看到UUID,它将是持久的。要回答您的问题,UUID对于相同的配对设备是唯一的,但是如果您更改iOS

我的问题是CBP的UUID似乎不是唯一的

我有两台iPad2和一台bluetooth4.0设备

蓝牙设备的UUID与两款iPad不同

如下图所示。

有没有办法在iOS设备上找到蓝牙设备的唯一UUID

我需要找到一个UUID或mac地址,不会在不同的设备之间改变


非常感谢,请帮帮我

外设使用至少每15分钟更改一次的随机可解析地址,此时外设看起来是新的。要更改此行为,您需要与外围设备配对,然后您将看到UUID,它将是持久的。

要回答您的问题,UUID对于相同的配对设备是唯一的,但是如果您更改iOS设备,它会发生更改,正如您在尝试中注意到的那样


不幸的是,要实现拥有唯一标识符的目标,您必须修改固件并添加应用程序标识符。

我正在寻找一种方法来部署与平台无关的、静态的BLE设备配置。我感到气馁(苹果的UUID是+/-无意义的,而且可以在大多数/所有其他平台上获得的MAC/BDADDR无法从CoreBooth访问)。幸运的是,我注意到“设备信息服务”配置文件(0x180A)包含一个“系统ID”属性(0x2A23),该属性对设备的唯一MAC/BDADDR地址进行编码。但是,我不知道BLE设备是否必须公开此服务。

如果您开发和控制Bluetooth 4.0+设备

选项#1将蓝牙地址分配给设备名称,并将其置于扫描响应中 将蓝牙设备地址指定为设备名称,并通过扫描响应包进行广播

扫描响应包是蓝牙设备在主设备(如智能手机)发送扫描请求后广播的31字节数据

重要

一些蓝牙设备允许在不编程的情况下设置其名称,例如,可以使用AT+name文本命令更改HM-10蓝牙模块名称

选项2在广告数据中发送一些独特的制造商特定数据 您可以在蓝牙广告数据包中添加一些独特的“特定于制造商的数据”,并从iOS读取这些数据。它比从“设备信息服务”中读取“系统ID”属性要快得多,正如在另一个答案中所建议的,因为它不需要连接到蓝牙设备

长篇大论 广告数据是31字节的数据,bluetooth 4.0+在某个时间间隔(从20毫秒到10秒)广播到空中(在任何人连接到它之前),具体取决于此设备配置

还有扫描响应数据,这是蓝牙设备在主设备(如智能手机)发送扫描请求后广播的额外的31字节包。它具有与广告数据包相同的结构

我们总共可以使用31+31=62字节的数据

广告数据由一组广告数据结构(AD struct)组成

第一个字节描述AD结构的长度,包括1个字节的数据类型+可变大小的有效负载

第二个字节描述存储在AD结构中的数据类型

后面的所有字节都是有效负载数据

对于必须包含配置标志AD Struct(与扫描响应无关)的广告数据,它需要3个字节。我们还有28个字节

假设您正在开发自己的GATT服务,那么您需要在广告数据中指定它的标识符。自定义GATT服务UUID标识符只能为128位全长格式(不同于蓝牙标准预定义的16位和32位服务标识符)。在广告数据中,它将消耗2+16=18字节。我们还有10个字节

现在我们可以定义制造商数据 2个字节用于长度和数据类型

有效载荷中的前2个字节用于公司标识符(如《蓝牙核心规范补充文件》第1.4节所要求),公司标识符由

出于测试目的,您可以使用0xFF、0xFF标识符

使用左6个字节,您可以唯一标识281474976710656设备

广告数据样本,用C书写:

#定义间隙ADV标志0x01
#定义间隙ADV 128 UUID 0x06
#定义间隙ADV制造数据0xFF
uint8原始数据[31]={
//len型有效载荷。。。。
0x02,间隙警告标志,0x06,
//GATT服务128位UUID
0x11,间隙ADV_128_UUID,0x1d,0x15,0xee,0x49,
0x10、0x78、0xc8、0xa3、,
0x9f、0xaa、0x82、0x84、,
0x8e,0x28,0xbe,0x43,
//2字节的公司ID
0x09,间隙先进制造数据,0xff,0xff,
//6字节的唯一数据
0xff,0xff,
0xff,0xff,
0xff,0xff,
};

PS:如果您需要发送更多数据,您可以放入扫描响应包,这将为您提供额外的31字节有效负载。

事实上正如您所说:UUID是唯一的,只要您不刷新此处提到的iOS网络缓存:很好发现,这给了我一个唯一的设备id,它在iOS设备中是相同的。这不太可能适用于所有设备,但它适用于我测试的设备(Mio Alpha心率监视器)。感谢它们似乎没有提供有用的系统ID。至少在我的情况下,它总是
00:00:00:00:00:00
。这是正确的实际结论,但解释错误。真正的解释不是外行