基于小熊派的智慧农业

前言

小熊派的智慧农业扩展板E53_IA1,包含光照传感器BH1750和温湿度传感器SHT30,关于BH1750的初始化我在上篇博客有讲到,这篇博客主要说明SHT30的配置。

自己整理的小熊派智慧烟感资料

智慧烟感1dqr



SHT30

复位操作

void SHT30_reset(void)
{
    uint8_t SHT3X_Resetcommand_Buffer[2]={0x30,0xA2}; //soft reset  
    //SHT30_Addr 0x44
    HAL_I2C_Master_Transmit(&hi2c1,SHT30_Addr<<1,SHT3X_Resetcommand_Buffer,2,0x10);
    HAL_Delay(15);
}

SHT30_Addr的地址是0x44,换成二进制是0100 0100,右移一位也就是1000 1000,也就是0x88
这里是因为开启信号的时候,发送的8位数据是前七位是地址,就是0x44的后7位 100 0100,后面加一个0表示写,所以开启信号是 1000 1000 既0x88。

基于小熊派的智慧农业_第1张图片



初始化SHT30

void Init_SHT30(void)
{
    uint8_t SHT3X_Modecommand_Buffer[2]={0x22,0x36}; //periodic mode commands 
    HAL_I2C_Master_Transmit(&hi2c1,SHT30_Addr<<1,SHT3X_Modecommand_Buffer,2,0x10); //send periodic mode commands
	
}

这里是初始化SHT30,并设置采集周期。

基于小熊派的智慧农业_第2张图片
命令是I2C的地址和高8位和低8位,这里选择的是0x22,0x36。重复性高,采集频率每秒2次。



温湿度计算

float SHT3x_CalcTemperatureC(unsigned short u16sT)
{
	
    float temperatureC = 0;            // variable for result
    //测量数据是16位表示
    //清除低两位状态位
    u16sT &= ~0x0003;           // clear bits [1..0] (status bits)
    //-- calculate temperature [℃] --
    temperatureC = (175 * (float)u16sT / 65535 - 45); //T = -45 + 175 * rawValue / (2^16-1)
	
    return temperatureC;
	
}
float SHT3x_CalcRH(unsigned short u16sRH)
{
	
    float humidityRH = 0;              // variable for result
	
    u16sRH &= ~0x0003;          // clear bits [1..0] (status bits)
    //-- calculate relative humidity [%RH] --
    humidityRH = (100 * (float)u16sRH / 65535);  // RH = rawValue / (2^16-1) * 10
	
    return humidityRH;
	
}

这里使用&~0x0003,清除低二位状态位。
基于小熊派的智慧农业_第3张图片
关于清除低两位状态位的问题,我在这篇博客并没有看到 SHT30使用的学习过程2 SHT30驱动程序
STM32单片机基础15——使用硬件I2C读取温湿度传感器数据(SHT30)。不过应该实际影响不大。



读出数据

	//#define	SHT30_ADDR_READ		(0x44<<1)+1	    //10001011
	//#define	SHT30_ADDR_WRITE	0x44<<1         //10001000
	//SHT3X_Fetchcommand_Bbuffer[2]={0xE0,0x00};
	HAL_I2C_Master_Transmit(&hi2c1,SHT30_Addr<<1,SHT3X_Fetchcommand_Bbuffer,2,0x10); //Read sht30 sensor data 
    HAL_I2C_Master_Receive(&hi2c1,(SHT30_Addr<<1)+1,SHT3X_Data_Buffer,6,0x10); 
    
    //    /* check tem */
    data[0] = SHT3X_Data_Buffer[0];
    data[1] = SHT3X_Data_Buffer[1];
    data[2] = SHT3X_Data_Buffer[2];

    tmp=SHT3x_CheckCrc(data, 2, data[2]);
    if( !tmp ) /* value is ture */
    {
        dat = ((uint16_t)data[0] << 8) | data[1];
        E53_IA1_Data.Temperature = SHT3x_CalcTemperatureC( dat );    
    }
    
    //    /* check humidity */
    data[0] = SHT3X_Data_Buffer[3];
    data[1] = SHT3X_Data_Buffer[4];
    data[2] = SHT3X_Data_Buffer[5];

    tmp=SHT3x_CheckCrc(data, 2, data[2]);
    if( !tmp ) /* value is ture */
    {
        dat = ((uint16_t)data[0] << 8) | data[1];
        E53_IA1_Data.Humidity = SHT3x_CalcRH( dat );    
    }

基于小熊派的智慧农业_第4张图片
发送命令0xE000可以读取测量的数据,包括如下:

  1. 温度高8位
  2. 温度低8位
  3. 温度CRC
  4. 湿度高8位
  5. 湿度低8位
  6. 湿度CRC

先根据CRC检测温度,如果没有问题赋值给E53_IA1_Data.Temperature,其次根据CRC检测湿度,如果没问题赋值给E53_IA1_Data.Humidity。

代码流程:

  1. I2C初始化
  2. SHT30初始化并设置周期
  3. 读出数据

智慧农业包含光照传感器BH1750,这个在智慧路灯上面也有。
关于马达的控制也就是控制相应的GPIO口即可。
基于小熊派的智慧农业_第5张图片
基于小熊派的智慧农业_第6张图片
基于小熊派的智慧农业_第7张图片
关于使用WIFI,NB-IOT和2G模块传输到华为云平台,操作都差不多,可以参考小熊派给的教程。



参考文档

SHT30数据手册英文

SHT30数据手册中文

SHT30使用的学习过程2 SHT30驱动程序

STM32单片机基础15——使用硬件I2C读取温湿度传感器数据(SHT30)

STM32实例源码剖析(SHT30 基于 IIC的温湿度获取程序)




你可能感兴趣的:(小熊派)