什么是iBeacon蓝牙配置文件


150

我想用一些蓝牙低功耗开发套件来创建自己的iBeacon。苹果尚未发布iBeacon的规范,但是一些硬件开发人员已经从AirLocate示例代码中逆向工程了iBeacon,并开始销售iBeacon开发套件。

那么什么是iBeacon蓝牙配置文件?

低功耗蓝牙将GATT用于LE配置文件服务发现。因此,我认为我们需要了解iBeacon属性的属性句柄,属性类型,属性值,以及属性权限。因此,对于UUID为E2C56DB5-DFFB-48D2-B060-D0F5A71096E0的iBeacon,主要值1和次要值1是什么,那么蓝牙GATT配置文件服务将是什么?

这是我在Apple论坛上的讨论以及通过文档做出的一些假设。

  1. 您只需查看蓝牙外围设备的配置文件服务(GATT)即可知道它是iBeacon。

  2. 主键和次键在此配置文件服务中的某处编码

以下是一些使用iBeacon开发套件的公司,这些公司似乎已经知道了这一点:

希望我们会及时在Bluetooth.org上发布如下的个人资料:https : //www.bluetooth.org/en-us/specification/adopted-specifications


实际上,现在我将其归结为4个属性值
PaulWoodIII

@ Dan1One我已经使用浅蓝色复制了服务,然后使用Apple的AirLocate示例代码,我无法确定重复的服务的范围,我认为还有更多内容,此外,浅蓝色没有列出属性句柄
PaulWoodIII 2013年

您是否正在寻找一种使用CBPeripheralManager(在后台运行)或其他(非iOS)软件或硬件来创建iBeacon的方法?这将导致所需的细节。
2013年

@Wain正如第一段所述,我正在尝试安装自己的硬件。但是,正如我在链接问题中指出的那样,使用CBPeripheralManager在后台对iBeacon进行广告宣传可能对回答链接问题很有用
PaulWoodIII 2013年

1
大!您可以在这里为将来的程序员共享该文档吗?当我在2013年问这个问题时,它肯定还不存在
PaulWoodIII '16

Answers:


228

对于具有ProximityUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0,主要0,次要0和已校准的-59RSSI Tx Power 的iBeacon ,传输的BLE广告包如下所示:

d6 be 89 8e 40 24 05 a2 17 6e 3d 71 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 52 ab 8d 38 a5

该数据包可以按以下方式分解:

d6 be 89 8e # Access address for advertising data (this is always the same fixed value)
40 # Advertising Channel PDU Header byte 0.  Contains: (type = 0), (tx add = 1), (rx add = 0)
24 # Advertising Channel PDU Header byte 1.  Contains:  (length = total bytes of the advertising payload + 6 bytes for the BLE mac address.)
05 a2 17 6e 3d 71 # Bluetooth Mac address (note this is a spoofed address)
02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 # Bluetooth advertisement
52 ab 8d 38 a5 # checksum

该数据包的关键部分是蓝牙广告,可以按以下方式分解:

02 # Number of bytes that follow in first AD structure
01 # Flags AD type
1A # Flags value 0x1A = 000011010  
   bit 0 (OFF) LE Limited Discoverable Mode
   bit 1 (ON) LE General Discoverable Mode
   bit 2 (OFF) BR/EDR Not Supported
   bit 3 (ON) Simultaneous LE and BR/EDR to Same Device Capable (controller)
   bit 4 (ON) Simultaneous LE and BR/EDR to Same Device Capable (Host)
1A # Number of bytes that follow in second (and last) AD structure
FF # Manufacturer specific data AD type
4C 00 # Company identifier code (0x004C == Apple)
02 # Byte 0 of iBeacon advertisement indicator
15 # Byte 1 of iBeacon advertisement indicator
e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 # iBeacon proximity uuid
00 00 # major 
00 00 # minor 
c5 # The 2's complement of the calibrated Tx Power

可以配置为发送特定广告的任何Bluetooth LE设备都可以生成上述数据包。我已经配置了使用Bluez发送此广告的Linux计算机,并且运行Apple的AirLocate测试代码的iOS7设备使用上面指定的字段将其作为iBeacon接收。请参阅:将BlueZ Stack用作外围设备(广告商)

博客包含有关逆向工程过程的完整详细信息。


这很棒!正是我要寻找的。但是有人可以解释我如何计算校验和吗?
本杰明·格罗纳

我还有一个问题需要您帮助我们进一步完善规格。什么是正确的广播间隔(以毫秒为单位)?我注意到我使用的德克萨斯州仪器代码作为我的iBeacon的基础时,在显示附近的iBeacon列表时,苹果的Airlocate应用程序的行为有点不一致。
PaulWoodIII

UUID /接近UUID是特定于iBeacon的BLE配置文件还是由设备制造商决定?区分iBeacon设备的首选方法是:BT MAC地址,UUID或主要/次要值?
nickaknudson

David,使用Core Bluetooth GATT API时,您是否能够使用特定的广告包配置iOS设备?我找不到选项。您可以为服务和特征定义自定义UUID,但不能为广告定义自定义UUID。
miguel 2013年

1
@ReinaldoJunior AD =广告数据。参见slackhappy给出的参考答案。
RenniePet 2015年

47

它似乎基于广告数据,尤其是制造商数据:

4C00 02 15 585CDE931B0142CC9A1325009BEDC65E 0000 0000 C5

<company identifier (2 bytes)> <type (1 byte)> <data length (1 byte)>
    <uuid (16 bytes)> <major (2 bytes)> <minor (2 bytes)> <RSSI @ 1m>
  • 苹果公司标识符(小端),0x004c
  • 数据类型0x02 => iBeacon
  • 数据长度,0x15 = 21
  • uuid:585CDE931B0142CC9A1325009BEDC65E
  • 专业:0000
  • 小:0000
  • 1米处的测量功率:0xc5 = -59

我有一个示例AirLocate应用示例,在Linux上使用了这个node.js脚本


遗憾的是,该脚本不再可用。您愿意再分享一次吗?
Thomaschaaf 2014年

@Thomaschaaf对不起,我在这里删除的是Github中旧版本的链接。我还更新了bleacon,使其不需要生成hcitool / hciconfig。
sandeepmistry 2014年

“ 1米处的测量功率:0xc5 = -59”如何将0xc5计算为-59?
andreasbecker.de 2014年

@ andreasbecker.de您采用了两者的补码
-sandeepmistry

@sandeepmistry到node.js脚本的链接现在已断开。
tedyyu

20

只是为了调和sandeepmistry的答案和davidgyoung的答案之间的区别:

02 01 1a 1a ff 4C 00

是广告数据格式规范的一部分[1]

  02 # length of following AD structure
  01 # <<Flags>> AD Structure [2]
  1a # read as b00011010. 
     # In this case, LE General Discoverable,
     # and simultaneous BR/EDR but this may vary by device!

  1a # length of following AD structure
  FF # Manufacturer specific data [3]
4C00 # Apple Inc [4]
0215 # ?? some 2-byte header

AD中缺少服务[5]定义。我认为iBeacon协议本身与GATT和标准服务发现无关。如果下载RedBearLab的iBeacon程序,您会发现它们碰巧使用GATT来配置广告参数,但这似乎是特定于其实现的,而不是规范的一部分。例如,根据LightBlue和我尝试过的其他类似程序,AirLocate程序似乎并未使用GATT进行配置。

参考文献:

  1. 核心蓝牙规范v4,第3卷,C部分,11
  2. Vol 3,Part C,18.1
  3. Vol 3,Part C,18.11
  4. https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers
  5. 第3卷,C部分,18.2

谢谢@slackhappy,我已经更新了答案。2个字节的标头是0x02数据类型,0x15 = 21数据长度。
sandeepmistry 2013年

谢谢@slackhappy这很好,但是我可以问一个愚蠢的问题吗?如果我想发送诸如“免费喝咖啡”之类的消息,我是否可以将FF示例中的替换为字符串的十六进制值?(还会将AD结构的长度更新为套件吗?)
2013年



0

iBeacon配置文件包含31个字节,其中包括以下内容

  1. 前缀-9字节-其中包括adv数据和Manufacturer数据
  2. UUID-16字节
  3. 主要-2个字节
  4. 次要-2个字节
  5. TxPower-1字节

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.