大数跨境

SENSIRION公司新型温湿度传感器SHT3X的HAL库核心程序与算法

SENSIRION公司新型温湿度传感器SHT3X的HAL库核心程序与算法 芯片之家
2017-06-11
1
导读:SENSIRION公司新型温湿度传感器SHT3X的HAL库核心程序与算法SHT3X是瑞士SENSIRION公


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化,湿度也是类似。


这个传感器我第一次用,核心代码分享给大家,有什么不完善的地方欢迎指正。


【声明】内容源于网络
0
0
芯片之家
1234
内容 1436
粉丝 0
芯片之家 1234
总阅读252
粉丝0
内容1.4k