本文主要是介绍蓝牙信标——Eddystone协议规范,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Eddystone协议规范中记录了Eddystone帧格式的常见帧PDU类型和个别服务数据字节格式。
蓝牙信标——Eddystone协议概述
1. 公共元素
每个Eddystone帧类型必须包含以下PDU数据类型:
- 由蓝牙核心规范(Bluetooth Core Specification Supplement, CSS, v5)定义的16bit Service UUIDs。Eddystone服务UUID为0xFEAA,增加此UUID允许在iOS设备上进行后台扫描;
- 服务数据数据类型,16bit UUID服务数据类型也必须是Eddystone服务UUID 0xFEAA。
Eddystone帧的具体类型编码在与服务 UUID 相关联的服务数据的第一个八位字节的高四位中。允许的取值包括:
帧类型 | 高4bit | 字节值 |
---|---|---|
UID | 0000 | 0x00 |
URL | 0001 | 0x10 |
TLM | 0010 | 0x20 |
EID | 0011 | 0x30 |
RESERVED | 0100 | 0x40 |
低4bit预留未来使用,当前必须为0000
.
需要注意,虽然蓝牙核心规范中定义为小端字节序,但是在Eddystone的服务数据中是按照大端字节序。
2. Eddystone-UID
Eddystone-UID 帧广播一个不透明、唯一的 16 字节 Beacon ID,该Beacon ID由一个 10 字节的命名空间和一个 6 字节的实例组成。Beacon ID 可能在将设备映射到外部存储中的记录时很有用。ID 的命名空间部分可以用于分组一组特定的信标,而实例 ID 则标识组内的个别设备。将 ID 划分为命名空间和实例组件还可以用于优化BLE扫描策略,例如仅基于命名空间进行过滤。
字节序 | 段 | 描述 |
---|---|---|
0 | 帧类型 | Value = 0x00 |
1 | 距离数据 | 在0m处校正后的发射功率 |
2 | NID[0] | 10-byte 命名空间 |
3 | NID[1] | |
4 | NID[2] | |
5 | NID[3] | |
6 | NID[4] | |
7 | NID[5] | |
8 | NID[6] | |
9 | NID[7] | |
10 | NID[8] | |
11 | NID[9] | |
12 | BID[0] | 6-byte 实例 |
13 | BID[1] | |
14 | BID[2] | |
15 | BID[3] | |
16 | BID[4] | |
17 | BID[5] | |
18 | RFU | Reserved for future use, must be0x00 |
19 | RFU | Reserved for future use, must be0x00 |
3. Eddystone-URL
Eddystone-URL框架使用压缩编码格式广播URL,以便在有限长度的广播数据包中容纳更多信息。
解码之后,任何具有互联网访问权限的客户端都可以使用该URL。例如,如果一个Eddystone-URL信标广播URL为:https://goo.gl/Aq18zF,那么接收到该数据包的任何客户端都可以选择访问该URL。
Eddystone-URL框架是物理网络的核心,旨在实现对周围环境相关网页内容的无摩擦发现。Eddystone-URL整合了从其演化而来的UriBeacon格式的所有经验教训。
字节序 | 段 | 描述 |
---|---|---|
0 | 帧类型 | Value = 0x10 |
1 | 发射功率 | 在0m处校正后的发射功率 |
2 | URL Scheme | 编码后前缀 |
3+ | Encoded URL | 为加密后的URL,长度1-17不等 |
关于URL编码规则:
十进制 | Hex | 扩展 |
---|---|---|
0 | 0x00 | http://www. |
1 | 0x01 | https://www. |
2 | 0x02 | http:// |
3 | 0x03 | https:// |
4. Eddystone-TLM
Eddystone-TLM框架广播有关信标本身的遥测信息,例如电池电压、设备温度和广播数据包的计数。这些信息对于监控信标群的健康状况和运行情况非常有用。由于Eddystone-TLM帧不包含信标ID,因此必须与提供ID的识别帧(Eddystone-UID或Eddystone-URL类型)配对使用。
TLM帧可以明文广播,就像UID和URL帧一样,或者在信标配置为Eddystone-EID时,使用在EID配置期间设置的身份密钥进行加密。当以明文广播时,没有消息完整性验证,您应该设计您的应用程序以适应此类广播的开放性质。
- 未加密TLM规范
字节序 | 段 | 说明 |
---|---|---|
0 | Frame Type | Value = 0x20 |
1 | Version | TLM version, value = 0x00 |
2 | VBATT[0] | 电池电压, 1 mV/bit |
3 | VBATT[1] | |
4 | TEMP[0] | Beacon 温度 |
5 | TEMP[1] | |
6 | ADV_CNT[0] | Advertising PDU 计数 |
7 | ADV_CNT[1] | |
8 | ADV_CNT[2] | |
9 | ADV_CNT[3] | |
10 | SEC_CNT[0] | 上电或重启后的时间,单位s |
11 | SEC_CNT[1] | |
12 | SEC_CNT[2] | |
13 | SEC_CNT[3] |
- 加密TLM规范
字节序 | 段 | 说明 |
---|---|---|
0 | Frame Type | Value = 0x20 |
1 | Version | TLM version, value = 0x01 |
2 | ETLM[0] | 12字节加密TLM数据 |
3 | ETLM[1] | |
4 | ETLM[2] | |
5 | ETLM[3] | |
6 | ETLM[4] | |
7 | ETLM[5] | |
8 | ETLM[6] | |
9 | ETLM[7] | |
10 | ETLM[8] | |
11 | ETLM[9] | |
12 | ETLM[10] | |
13 | ETLM[11] | |
14 | SALT[0] | 16-bit salt |
15 | SALT[1] | |
16 | MIC[0] | 16bit 消息完整性检查 |
17 | MIC[1] |
5. Eddystone-EID
Eddystone-EID框架广播一个加密的临时标识符,该标识符定期更改,更改速率在与Web服务的初始注册期间确定。广播的临时ID可以由注册的服务远程解析,但对其他观察者来说,它似乎是随机变化的。该框架类型旨在用于具有安全和隐私增强功能的设备。
5.1 帧格式规范
字节顺序 | 段 | 描述 |
---|---|---|
0 | 帧类型 Frame Type | =0x30 |
1 | 距离数据 | 在0m处校正后的Tx功率 |
2 | EID[0] | 8字节的临时标识符 |
3 | EDI[1] | |
4 | EDI[2] | |
5 | EDI[3] | |
6 | EDI[4] | |
7 | EDI[5] | |
8 | EDI[6] | |
9 | EDI[7] |
该帧的长度是固定的,且在EID字节之后进行截断。
由于Eddystone-EID帧的目的在于提供更好的隐私保护,因此在实现时不建议将EID帧的广播与属于同一设备的任何其他帧交错使用。信标应当在旋转周期外旋转BD_ADDR,以防止跟踪。
参考链接:Eddystone协议规范
这篇关于蓝牙信标——Eddystone协议规范的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!