【发布时间】:2019-08-01 17:41:58
【问题描述】:
我有一个 esp32 微控制器,我试图从带有 SHT30 传感器 (http://www.mouser.com/ds/2/682/Sensirion_Humidity_Sensors_SHT3x_Datasheet_digital-971521.pdf) 的 NRF52832 信标中读取温度/湿度值,但 BLE 广告中没有服务。 很长一段时间后,我发现在BLE服务器上每次连接后都会发生变化的“制造商数据”。 我怀疑传感器的读取字节是否在“制造商数据”上以及如何提取它。
输出“制造商数据”示例: 59000215fda5069300010002d8 0eee14362c196d66dfac1500 -> 这部分会改变每个连接
我尝试将这个十六进制值转换为大端 uint16,发现了一些有趣的值,但不正确。
谢谢:)
编辑: 我放这个数据表是因为展示了 SHT30 如何以这种格式发送数据的方式(第 10 页): Data send format from the SHT30 sensor
信标链接:here
【问题讨论】:
-
随附的数据表无助于找到答案。 BLE 制造商广告的格式取决于 ESP32 内部的固件。使用适当的固件,可以将温度数据放入您看到的广告中。如果没有适当的固件,它可能根本就没有。找出是哪种情况意味着(1)获取有关固件的文档,或(2)尝试自己对其进行逆向工程。由于只有一个广告字节数据点,本论坛中的其他任何人都不太可能有足够的信息对其进行逆向工程。
-
我不知道我是否清楚。温度/湿度的服务应该在信标上,而不是在 esp32 上。我连接信标并从他那里接收这个“制造商数据”。这个值不应该是恒定的吗?除非我更改信标上的一些数据,例如主要和次要值。当我转换一些最终字节并在数据表上的公式中使用时,我得到了有趣的值。
-
我在安卓手机上也连接了beacon,beacon没有宣传温度服务。我认为数据在“制造商数据”中。
-
对不起,我误读了你的问题——我现在明白必须公布温度或暴露 GATT 服务以获取温度的固件在 NRF52832 内部,而不是 ESP32 内部。但我的评论的其余部分仍然有效。您需要有关自定义 NRF52832 固件如何执行此操作的文档。它是否公开 GATT 服务?它会在制造商数据中发送吗?为什么你认为两者都可能是真的?你在什么地方读过这个吗?如果有,在哪里?
-
感谢您的合作@davidgyoung。我试图联系卖家,但没有回复我。所以我无权访问我的信标的特定文档。没有温度服务,只有少数其他服务,如通用访问 (0x1800)、当前时间服务 (0x1805) 等,我认为这是 BLE 信标的默认设置。阅读 SHT30 数据表并观察“制造商数据”的不同字节,我想这可能是答案。如果您对 BLE 库有所了解,我可以解释代码以便更好地理解。
标签: arduino bluetooth-lowenergy ibeacon esp32