传感器数据如何嵌入到 TI SensorTag cc2650 的广告包中?
How can sensor data be embedded in the advertising packet of the TI SensorTag cc2650?
我正在尝试使 TI SensorTag (cc2650) 无连接(只是不断宣传传感器,如加速度计、读数)。
在基础 SensorTag 项目的 SensorTag.c
文件中,我可以看到 static uint8_t advertData[]
但我不确定我是否可以将动态传感器数据放在那里(或者这是否是正确的方法或者如果需要,在哪里可以找到 GAP_ADTYPE_*
列表)。
我对这个设备一无所知,所以我的回答会很笼统。
是的,您可以通过广告广播您的传感器数据,这样就不需要连接其他设备来查看传感器的值。
这是 BLE 4.2 核心规范第 3 卷 C 部分 11.1 中显示的广告数据格式。
这里你感兴趣的是最后一个嵌套部分,AD 类型和 AD 数据,当然还有它们的长度。
基本上你想要做的是,如果你有一个 4 字节的值,将长度设置为 5(字节),1 用于类型,4 用于数据。
类型本身必须是此处定义的 GAP 类型之一:Generic Access Profile。要宣传您自己的数据,您必须选择最后一个,制造商特定数据,即 0xFF。
关于您的源代码和您正在使用的 TI 堆栈,我无法真正帮助您,但是如果它的工作方式与我使用的其他堆栈相同,那么很可能是:
- 您可以将您的数据放入 advertData[]
- GAP 类型看起来像 GAP_ADTYPE_MANUFACTURER_SPECIFIC
当然要在某处指定AD结构的长度。无论您是指定整个数据包的长度,还是只是告诉堆栈数据的长度(在 advertData 中),它都会计算(加 1)AD 结构的长度。
由于您使用的是 TI Stack,请查找 Simple BLE Observer 和 Simple BLE Broadcaster 示例。如果您不想与设备建立连接,那应该是可行的方法。
如 TI 文档所述
Observer is basically a device which scans for advertisement messages
but cannot initiate connections. On the other hand, a Broadcaster is a
device which sends advertisement messages but non-connectable.
您将在示例文档和源代码注释中找到所需的一切。
当使用 GAP 类型制造商特定数据(即 0xFF)时,这后面必须跟有制造商 UUID,仅添加没有 UUID 的数据意味着您可能会错误地宣传。似乎没有通用的制造 UUID,可以在风险中使用,并且 SIG 需要 2500 美元才能注册特定的 UUID。我正在为同样的问题而苦苦挣扎,并且编码为 GAP 类型 09 看起来是一个不应让任何人或任何人感到不安的选项。
更多信息:
对我来说,结果是芯片制造商推荐的答案(我使用的是 CC2640),即使用芯片制造商的 UUID 和额外的 2 个字节的标识,所以对于完整的 AD,我使用了以下内容
[ 1E FF 0D 00 XX XX <25 字节数据> ]
它的使用存在风险,因为额外的标识字节可能不是唯一的,但希望您有某种方法可以确认有效负载是否完好无损,这应该为您提供一种可靠的数据发送方式。
我正在尝试使 TI SensorTag (cc2650) 无连接(只是不断宣传传感器,如加速度计、读数)。
在基础 SensorTag 项目的 SensorTag.c
文件中,我可以看到 static uint8_t advertData[]
但我不确定我是否可以将动态传感器数据放在那里(或者这是否是正确的方法或者如果需要,在哪里可以找到 GAP_ADTYPE_*
列表)。
我对这个设备一无所知,所以我的回答会很笼统。
是的,您可以通过广告广播您的传感器数据,这样就不需要连接其他设备来查看传感器的值。
这是 BLE 4.2 核心规范第 3 卷 C 部分 11.1 中显示的广告数据格式。
这里你感兴趣的是最后一个嵌套部分,AD 类型和 AD 数据,当然还有它们的长度。
基本上你想要做的是,如果你有一个 4 字节的值,将长度设置为 5(字节),1 用于类型,4 用于数据。
类型本身必须是此处定义的 GAP 类型之一:Generic Access Profile。要宣传您自己的数据,您必须选择最后一个,制造商特定数据,即 0xFF。
关于您的源代码和您正在使用的 TI 堆栈,我无法真正帮助您,但是如果它的工作方式与我使用的其他堆栈相同,那么很可能是:
- 您可以将您的数据放入 advertData[]
- GAP 类型看起来像 GAP_ADTYPE_MANUFACTURER_SPECIFIC
当然要在某处指定AD结构的长度。无论您是指定整个数据包的长度,还是只是告诉堆栈数据的长度(在 advertData 中),它都会计算(加 1)AD 结构的长度。
由于您使用的是 TI Stack,请查找 Simple BLE Observer 和 Simple BLE Broadcaster 示例。如果您不想与设备建立连接,那应该是可行的方法。
如 TI 文档所述
Observer is basically a device which scans for advertisement messages but cannot initiate connections. On the other hand, a Broadcaster is a device which sends advertisement messages but non-connectable.
您将在示例文档和源代码注释中找到所需的一切。
当使用 GAP 类型制造商特定数据(即 0xFF)时,这后面必须跟有制造商 UUID,仅添加没有 UUID 的数据意味着您可能会错误地宣传。似乎没有通用的制造 UUID,可以在风险中使用,并且 SIG 需要 2500 美元才能注册特定的 UUID。我正在为同样的问题而苦苦挣扎,并且编码为 GAP 类型 09 看起来是一个不应让任何人或任何人感到不安的选项。
更多信息:
对我来说,结果是芯片制造商推荐的答案(我使用的是 CC2640),即使用芯片制造商的 UUID 和额外的 2 个字节的标识,所以对于完整的 AD,我使用了以下内容
[ 1E FF 0D 00 XX XX <25 字节数据> ]
它的使用存在风险,因为额外的标识字节可能不是唯一的,但希望您有某种方法可以确认有效负载是否完好无损,这应该为您提供一种可靠的数据发送方式。