我想用一些蓝牙低能耗开发工具包创建我自己的iBeacon。苹果尚未发布iBeacons的规范,然而,一些硬件开发人员已经根据AirLocate示例代码对iBeacon进行了反向工程,并开始销售iBeacon开发工具包。
那么什么是iBeacon蓝牙模式?
蓝牙低能耗使用GATT进行LE配置文件服务发现。因此,我认为我们需要知道iBeacon属性的属性句柄、属性类型、属性值,以及可能的属性权限。因此,对于UUID为E2C56DB5-DFFB-48D2-B060-D0F5A71096E0的iBeacon,主值为1,次值为1,蓝牙GATT配置文件服务是什么?
以下是我从苹果论坛和文档讨论中做出的一些假设。
>
您只需要查看蓝牙外设的配置文件服务(GATT),就知道它是iBeacon。
主密钥和次密钥在此配置文件服务中的某个位置进行编码
下面是一些拥有iBeacon开发工具包的公司,它们似乎已经解决了这个问题:
希望我们能及时在Bluetooth.org上发布这样的个人资料:https://www.bluetooth.org/en-us/specification/adopted-specifications
为了调和Sandepmistry的答案和DavidYoung的答案之间的差异:
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来配置广告参数,但这似乎是他们的实现所特有的,而不是规范的一部分。例如,根据LightBlue和我尝试的其他类似程序,AirLocate程序似乎没有使用GATT进行配置。
参考资料:
它似乎基于广告数据,特别是制造商数据:
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>
我有这个node.js的脚本Linux示例AirLocate应用程序示例。
对于具有ProximityUIDE2C56DB5-DFFB-48D2-B060-D0F5A71096E0
、major0
、minor0
、校准Tx功率为-59
RSSI的iBeacon,传输的BLE广告包如下所示:
d6 be 89 8e 40 24 05 a2 17 6e 3d 71 02 01 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 00c5 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计算机,运行苹果AirLocate测试代码的iOS7设备将其作为具有上述指定字段的iBeacon接收。请参阅:使用BlueZ堆栈作为外围设备(广告商)
本博客详细介绍了逆向工程过程。
最近,我买了一台iBeacon设备,打算创建Android应用程序,以便识别和使用它。我是一个在Android应用程序中使用蓝牙的新手,有很多事情我还不知道。在互联网和本论坛中,我找到了使用Radius Networks的Android IBeacon库的建议,但是,唉,现在它不再可用了: https://github.com/RadiusNetworks/android-ibeacon-serv
来自蓝牙客户端示例http://people.csail.mit.edu/albert/bluez-intro/x502.html,似乎只要我有设备的蓝牙MAC地址,我就可以简单地连接到远程蓝牙插座。 如果我可以简单地连接到远程蓝牙设备,我想知道蓝牙配对到底做什么。什么时候真正需要配对? 更新: 蓝牙配对是如何工作的?,配对的最终结果似乎是加密密钥存储在两侧。我假设,当您打开远程套接字连接时,调用
这让我困惑了好几天。 在开始时,当我实现的功能,我使用GATT配置文件BLE蓝牙通信。 然后我想到了蓝牙插座。这将SPP配置文件用于蓝牙通信。 其中提到: 最常见的蓝牙套接字类型是RFCOMM,这是Android API支持的类型。RFCOMM是一种面向连接的蓝牙流式传输。它也称为串行端口配置文件(SPP)。 我的要求是- 1)使用BLE蓝牙扫描并将我的android设备与黑匣子连接。 2) 然后
我想使用自定义配置文件构建一个简单的基于蓝牙低能耗的应用程序。采用的配置文件/服务/特性/描述符使用官方网站上看到的16位UUID。 16位UUID是对应128位UUID的快捷方式,翻译为 使用作为。(来源:蓝牙核心规范第3卷第F部分第3.2.1节) 由于我使用的是自定义配置文件,我想知道允许我使用什么UUID。 哪一范围的128位UUID可用于描述蓝牙低能耗中供应商定义的属性
您好,我有一些iBeacon,但我对制造商一无所知,我需要用自定义UUID、主要参数和次要参数配置这些信标。 所以在四处搜索后,我知道里面的芯片是CC2541-HM传感器。据我所知,它是由德州仪器公司生产的,但不幸的是,我尝试过的任何编辑iBeacon标签的应用程序(即使是iOS和Android上的SensorTag)都失败了,似乎没有人能允许我更改UUID,大调和小调。 我希望有人能帮助我更好地
我正在开发一款连接蓝牙物联网设备的Flitter应用程序。我正在使用Flatter_blue图书馆。该库允许扫描附近的蓝牙设备。基于该扫描,您可以“连接”到设备。没有与设备配对的概念。 根据我以前在手机上使用蓝牙的经验(连接到我的汽车和蓝牙扬声器时),我必须在Android操作系统上配对设备。 我很好奇,从高层次上讲,配对设备和连接设备之间有什么区别。此外,更具体地说,在操作系统内配对设备与扫描并