一、前言
HS3003是一种数字式温湿度传感器,可以测量环境中的温度和湿度。读取HS3003的数据需要连接传感器到一个数据采集系统,一般是微处理器或者单片机。本案例中选用瑞萨RA4M2开发板作为微处理器。
二、硬件连接
由于需要读取HS3003数据,需要使用IIC接口,这里使用PMOD2上的接口(P410和P411)。
配置I2C引脚
三、HS3003操作
HS3003写数据
对于HS3003写数据,手册上的操作方式:设备地址+操作地址+数据
HS3003读数据
对于读取数据,可以直接在发送地址后,进行读取,当时需要注意再发送完地址后,要有等待时间。
读取数据方法函数
void Humiture_HS3003_init(void)
{
Humiture_HS3003_writeRegister(HS300X_ADR,NULL,0);
}
//读取原始的数据
uint32_t Humiture_HS3003_ReadData_Raw(uint8_t resolution )
{
uint8_t rx_buf[ 4 ];
uint32_t data=0;
Humiture_HS3003_init();//唤醒
//8bit->1.2ms
//10bit->2.72ms
//12bit->9.10ms
//14bit->33.90ms
if(resolution==8)
R_BSP_SoftwareDelay(1200U, BSP_DELAY_UNITS_MICROSECONDS);
else if(resolution==10)
R_BSP_SoftwareDelay(2720U, BSP_DELAY_UNITS_MICROSECONDS);
else if(resolution==12)
R_BSP_SoftwareDelay(9100U, BSP_DELAY_UNITS_MICROSECONDS);
else
R_BSP_SoftwareDelay(34U, BSP_DELAY_UNITS_MILLISECONDS);
data=Humiture_HS3003_readRegister32(HS300X_ADR);
return data;
}
数据处理函数
Data=Humiture_HS3003_ReadData_Raw(14);
Temp = (float)( (Data & 0xFFFF) >> 2);//只要低十六位
Temp = Temp*HS300X_TEMP_MULTY*165-40;//HS300X_TEMP_MULTY->0.00006163516(1/(2^14-1) )
`
Humidity = (float)( (Data >> 16) &0x3FFF );//只要高十六位,且最高2位不要
Humidity = HumidityHS300X_HUMD_MULTY100;//HS300X_HUMD_MULTY->0.00006163516(1/(2^14-1) )
四、程序实现
程序使用串口显示结果,如图所示。
|