当前位置:   article > 正文

基于小熊派的智慧农业_小熊派是怎么使用e53ia1拓展板的

小熊派是怎么使用e53ia1拓展板的

前言

小熊派的智慧农业扩展板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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

在这里插入图片描述



初始化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
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

在这里插入图片描述
命令是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;
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
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;
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这里使用&~0x0003,清除低二位状态位。
在这里插入图片描述
关于清除低两位状态位的问题,我在这篇博客并没有看到 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 );    
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

在这里插入图片描述
发送命令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口即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关于使用WIFI,NB-IOT和2G模块传输到华为云平台,操作都差不多,可以参考小熊派给的教程。



参考文档

SHT30数据手册英文

SHT30数据手册中文

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

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

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




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/240231
推荐阅读
相关标签
  

闽ICP备14008679号