什么是iBeacon蓝牙配置文件

我想用一些蓝牙低功耗开发套件创建我自己的iBeacon。 苹果公司尚未发布iBeacons规范,但是一些硬件开发商已经反向从AirLocate示例代码中设计出iBeacon并开始销售iBeacon开发套件。

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

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

下面是我通过讨论苹果论坛和文档所做的一些假设。

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

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

下面是一些公司的iBeacon开发工具包,似乎已经有了这个数字:

  • http://redbearlab.com/ibeacon/
  • http://kontakt.io/

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

对于具有ProximityUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 ,主要的0 ,较小的0以及校准的-59 RSSI的Tx功率,传输的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 

任何可以配置为发送特定广告的蓝牙LE设备都可以生成上述数据包。 我已经使用Bluez配置了一台Linux计算机来发送这个广告,而运行Apple AirLocate测试代码的iOS7设备将它作为一个具有上面指定字段的iBeacon。 请参阅: 使用BlueZ堆栈作为外围设备(广告客户)

这个博客有关于逆向工程过程的完整细节。

它似乎基于广告数据,特别是制造商的数据:

 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> 
  • 苹果公司标识符(Little Endian),0x004c
  • 数据类型,0x02 => iBeacon
  • 数据长度,0x15 = 21
  • uuid:585CDE931B0142CC9A1325009BEDC65E
  • 主修:0000
  • 次要:0000
  • 在1米处测得的功率为:0xc5 = -59

我有这个node.js脚本与Linux示例AirLocate应用程序示例工作。

只是为了调和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中缺少的是Service [5]的定义。 我认为iBeacon协议本身与GATT和标准服务发现没有任何关系。 如果你下载了RedBearLab的iBeacon程序,你会发现它们碰巧使用GATT来配置广告参数,但是这似乎是特定于它们的实现,而不是规范的一部分。 AirLocate程序似乎没有使用GATT进行配置,例如根据LightBlue和我试过的其他类似程序。

参考文献:

  1. Core Bluetooth Spec v4,第3卷,C部分,11
  2. 第3卷,C部分,18.1
  3. 第3卷,C部分,18.11
  4. https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers
  5. 第3卷,C部分,18.2

如果你问这个问题的原因是因为你想使用核心蓝牙作为一个iBeacon而不是使用标准的API做广告,你可以通过广告一个NSDictionary,如:

 { kCBAdvDataAppleBeaconKey = <a7c4c5fa a8dd4ba1 b9a8a240 584f02d3 00040fa0 c5>; } 

请参阅此答案以获取更多信息。

它非常简单,它只是宣传一个字符串,其中包含符合苹果的iBeacon标准的几个字符。 你可以参考链接http://glimwormbeacons.com/learn/what-makes-an-ibeacon-an-ibeacon/