蓝牙信标——Eddystone协议规范

2024-02-20 20:52

本文主要是介绍蓝牙信标——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字节值
UID00000x00
URL00010x10
TLM00100x20
EID00110x30
RESERVED01000x40

低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处校正后的发射功率
2NID[0]10-byte 命名空间
3NID[1]
4NID[2]
5NID[3]
6NID[4]
7NID[5]
8NID[6]
9NID[7]
10NID[8]
11NID[9]
12BID[0]6-byte 实例
13BID[1]
14BID[2]
15BID[3]
16BID[4]
17BID[5]
18RFUReserved for future use, must be0x00
19RFUReserved 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处校正后的发射功率
2URL Scheme编码后前缀
3+Encoded URL为加密后的URL,长度1-17不等

关于URL编码规则:

十进制Hex扩展
00x00http://www.
10x01https://www.
20x02http://
30x03https://

4. Eddystone-TLM

Eddystone-TLM框架广播有关信标本身的遥测信息,例如电池电压、设备温度和广播数据包的计数。这些信息对于监控信标群的健康状况和运行情况非常有用。由于Eddystone-TLM帧不包含信标ID,因此必须与提供ID的识别帧(Eddystone-UID或Eddystone-URL类型)配对使用。

TLM帧可以明文广播,就像UID和URL帧一样,或者在信标配置为Eddystone-EID时,使用在EID配置期间设置的身份密钥进行加密。当以明文广播时,没有消息完整性验证,您应该设计您的应用程序以适应此类广播的开放性质。

  • 未加密TLM规范
字节序说明
0Frame TypeValue = 0x20
1VersionTLM version, value = 0x00
2VBATT[0]电池电压, 1 mV/bit
3VBATT[1]
4TEMP[0]Beacon 温度
5TEMP[1]
6ADV_CNT[0]Advertising PDU 计数
7ADV_CNT[1]
8ADV_CNT[2]
9ADV_CNT[3]
10SEC_CNT[0]上电或重启后的时间,单位s
11SEC_CNT[1]
12SEC_CNT[2]
13SEC_CNT[3]
  • 加密TLM规范
字节序说明
0Frame TypeValue = 0x20
1VersionTLM version, value = 0x01
2ETLM[0]12字节加密TLM数据
3ETLM[1]
4ETLM[2]
5ETLM[3]
6ETLM[4]
7ETLM[5]
8ETLM[6]
9ETLM[7]
10ETLM[8]
11ETLM[9]
12ETLM[10]
13ETLM[11]
14SALT[0]16-bit salt
15SALT[1]
16MIC[0]16bit 消息完整性检查
17MIC[1]

5. Eddystone-EID

Eddystone-EID框架广播一个加密的临时标识符,该标识符定期更改,更改速率在与Web服务的初始注册期间确定。广播的临时ID可以由注册的服务远程解析,但对其他观察者来说,它似乎是随机变化的。该框架类型旨在用于具有安全和隐私增强功能的设备。

5.1 帧格式规范

字节顺序描述
0帧类型 Frame Type=0x30
1距离数据在0m处校正后的Tx功率
2EID[0]8字节的临时标识符
3EDI[1]
4EDI[2]
5EDI[3]
6EDI[4]
7EDI[5]
8EDI[6]
9EDI[7]

该帧的长度是固定的,且在EID字节之后进行截断。

由于Eddystone-EID帧的目的在于提供更好的隐私保护,因此在实现时不建议将EID帧的广播与属于同一设备的任何其他帧交错使用。信标应当在旋转周期外旋转BD_ADDR,以防止跟踪。

参考链接:Eddystone协议规范


这篇关于蓝牙信标——Eddystone协议规范的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/729502

相关文章

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines