
SENSIRION公司新型温湿度传感器SHT3X的HAL库核心程序与算法
SHT3X是瑞士SENSIRION公司的一种新型温湿度传感器,体积小,精读高,采样快,价格还算便宜。目前SHT30的批量可以做到 1美金。它分数字i2c接口和模拟输出2种。下面以i2c的数字型为例。
官方提供的例程比较复杂,很多没有用的东西。这里我经过分析datasheet后分享给大家最核心最实用的代码。
我们的代码是基于stm32 HAL库的,测试通过。
第一问题是工作模式。共有3种,这里推荐的是Periodic Data Acquisition Mode 周期性读取数据模式。
基本思路是2步,1,发送periodic mode commands,传感器周期性的进行温湿度转换。2,随时读取传感器的数据
在stm32cubemx设置i2c2的参数为10M,SHT30的i2c地址是0x44
uint8_t SHT3X_Modecommand_Buffer[2]={0x20,0x32}; //periodic mode commands 为什么是 0x20,0x32 见参考手册。
uint8_t SHT3X_Fetchcommand_Bbuffer[2]={0xE0,0x00}; //Fetch data 为什么是 0xE0,0x00 见见参考手册。
uint8_t SHT3X_Data_Buffer[6]; //byte0,1为温度 byte4,5为湿度 见本帖附件page11
uint8_t Humidity_S1; //湿度 正数 如果想得到小数点后几位见后面的分析
int8_t Temperature_S1; //温度 可能为负数。如果想得到小数点后几位见后面的分析
main()
{
。。。。。
HAL_I2C_Master_Transmit(&hi2c2,0x44<<1,SHT3X_Modecommand_Buffer,2,0x10); //第一步,发送periodic mode commands,传感器周期性的进行温湿度转换
。。。。。
while(1)
{
。。。
HAL_I2C_Master_Transmit(&hi2c2,0x44<<1,SHT3X_Fetchcommand_Bbuffer,2,0x10); //第二步,随时读取传感器的数据
HAL_I2C_Master_Receive(&hi2c2,(0x44<<1)+1,SHT3X_Data_Buffer,6,0x10);
。。。
}
}
采集好的SHT3X的数据需要转换才能得到我们所想要的温湿度,公式在page13 Conversion of Signal Output
Temperature_S1=((((SHT3X_Data_Buffer[0]<<8)+SHT3X_Data_Buffer[1])*175)/65535-45 ; //得到摄氏度温度
Humidity_S1=(((SHT3X_Data_Buffer[3]<<8)+SHT3X_Data_Buffer[4])*100)/65535; //可以得到相对湿度
如果要带小数的温度:
(float)Temperature_S1=(float)((((SHT3X_Data_Buffer[0]<<8)+SHT3X_Data_Buffer[1])*175)/65535)-45 ; //就是把“-45”前面的数据float化,湿度也是类似。
这个传感器我第一次用,核心代码分享给大家,有什么不完善的地方欢迎指正。


