小熊派的智慧农业扩展板E53_IA1,包含光照传感器BH1750和温湿度传感器SHT30,关于BH1750的初始化我在上篇博客有讲到,这篇博客主要说明SHT30的配置。
自己整理的小熊派智慧烟感资料
智慧烟感1dqr
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。
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,并设置采集周期。
命令是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,清除低二位状态位。
关于清除低两位状态位的问题,我在这篇博客并没有看到 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 );
}
先根据CRC检测温度,如果没有问题赋值给E53_IA1_Data.Temperature,其次根据CRC检测湿度,如果没问题赋值给E53_IA1_Data.Humidity。
代码流程:
智慧农业包含光照传感器BH1750,这个在智慧路灯上面也有。
关于马达的控制也就是控制相应的GPIO口即可。
关于使用WIFI,NB-IOT和2G模块传输到华为云平台,操作都差不多,可以参考小熊派给的教程。
SHT30数据手册英文
SHT30数据手册中文
SHT30使用的学习过程2 SHT30驱动程序
STM32单片机基础15——使用硬件I2C读取温湿度传感器数据(SHT30)
STM32实例源码剖析(SHT30 基于 IIC的温湿度获取程序)