Beacon NRF52832从组装的SHT30传感器读取温度/湿度值

问题描述 投票:0回答:1

我有一个esp32微控制器,我试图从带有SHT30传感器(http://www.mouser.com/ds/2/682/Sensirion_Humidity_Sensors_SHT3x_Datasheet_digital-971521.pdf)的NRF52832信标读取温度/湿度值,但是在BLE广告中没有服务。很长一段时间后,我发现“制造商数据”在BLE服务器上的每次连接后都会发生变化。我怀疑的是传感器的读取字节是否在“制造商数据”上,以及我如何提取它。

输出“制造商数据”的示例:59000215fda5069300010002d8 0eee14362c196d66dfac1500 - >此部分更改每个连接

我尝试将这个十六进制值转换为big endian uint16,并发现了一些有趣的值,但没有任何正确的。

谢谢 :)

编辑:我把这个数据表放在一起,因为它显示了SHT30以这种格式发送数据的方式(第10页):Data send format from the SHT30 sensor

灯塔链接:here

arduino bluetooth-lowenergy ibeacon esp32
1个回答
0
投票

如果您想尝试“反向工程”制造商数据以搜索温度读数,您需要知道如何为该传感器编码/计算温度。换句话说,如何将传感器中的原始数据/字节转换为实际值。

我在code samples for SHT3x发现了这个:

static ft SHT3X_CalcTemperature(u16t rawValue)
{
  // calculate temperature [°C]
  // T = -45 + 175 * rawValue / (2^16-1)
  return 175.0f * (ft)rawValue / 65535.0f - 45.0f;
}

考虑到这一点,我会尝试这样的事情:

  1. 尝试制造商数据中的每个连续字节对。 对于0eee14362c196d66dfac1500,那将是0e + ee,然后是ee + 14等。
  2. 将两个字节转换为uint16。由于我们不知道字节序,因此您需要尝试MSB和LSB。 例如,对于0e + ee,尝试0eeeee0e
  3. 使用uint16作为上述函数的rawValue来获取温度。

然后你可以看到你得到的任何输出是否实际上类似于温度读数。

© www.soinside.com 2019 - 2024. All rights reserved.