在环境监控设备研发中,GXHT30温湿度传感器的基本应用及原理
Posted 瑞奇Ricky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在环境监控设备研发中,GXHT30温湿度传感器的基本应用及原理相关的知识,希望对你有一定的参考价值。
最近,笔者在进行环境监控设备的研发工作。环境监控设备是基于最新的无线传感器技术来对环境中的温度、湿度、光感度等环境参数进行实时监测的。该设备在大棚农业种植、公共场所环境优化、畜牧业养殖环境监测等不同的领域都可以很好的使用。
降低了人工监测的时间和成本,管理者从云端后台就可以实时可视化的了解到需要监测的环境中的所有重要参数,并根据参数来进行调整,保证正常的生产生活。温湿度传感器是环境监控设备中的一个重要部件,也是设备的主要功能体现。那么我们产品中温湿度传感器的基本应用及原理是什么呢?相信很多产品研发的小伙伴很想了解,下面笔者就来进行详细的阐述:
温湿度传感采用的IIC接口
GXHT30基本IO(SCL/SDA/INT)配置
void GXHT30GpioInit(void)
{
//传感器中断配置
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStruct;
//中断引脚PA1 初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(GXHT30_INT_RCC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GXHT30_INT_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GXHT30_INT_Port, &GPIO_InitStructure);
GPIO_EXTILineConfig(GXHT30_GPIO_PortSource, GXHT30_GPIO_PinSource);
EXTI_InitStructure.EXTI_Line = GXHT30_EXTI_LINE;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStruct.NVIC_IRQChannel = GXHT30_NVIC_IRQChannel;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 3;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
EXTI_ClearITPendingBit(GXHT30_EXTI_LINE);
//SCL和SDA初始化
RCC_APB2PeriphClockCmd( GXHT30_SDA_RCC, ENABLE );
RCC_APB2PeriphClockCmd( GXHT30_SCL_RCC, ENABLE );
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//GXHT30 SDA
GPIO_InitStructure.GPIO_Pin = GXHT30_SDA_Pin;
GPIO_Init(GXHT30_SDA_Port, &GPIO_InitStructure);
//GXHT30 SCL
GPIO_InitStructure.GPIO_Pin = GXHT30_SCL_Pin;
GPIO_Init(GXHT30_SCL_Port, &GPIO_InitStructure);
GPIO_SetBits(GXHT30_SDA_Port,GXHT30_SDA_Pin);
GPIO_SetBits(GXHT30_SCL_Port,GXHT30_SCL_Pin);
delay_ms(50);
GXTH30_CycMode();
}
读取单次转换模式中温湿度数据
在传感器完成温湿度测量之后,上位机可以通过发送 START 信 号+I2C 读取数据头来 读取温湿度数据,如果温湿度数据已经准备好,那么芯片会向上位机发送 ACK 信号,并随后发送 2 字节的温度数据加 1 字节的 CRC 校验数据,然后再发送 2 字节的湿度数据加 1 字节的 CRC 校验数据。上位机需要对接收到的每个字节数据发送 ACK,否则芯片会停止发送数据。微处理器在收到湿度数据的 CRC 字节后应该发送一个 NACK 和一个 STOP 信号来结束本次数据传输
/*
函数: 读取单次转换温湿度数据
0x06:高重复率
0x0D:中重复率
0x10:低重复率
*/
void GXHT30_Read_Onece(GXHT30Info_t *GXHT30Info)
{
uint16_t Tem_MSB,Tem_LSB,Hum_MSB,Hum_LSB;
uint16_t Tem,Hum;
GXHT30_IIC_Start();
GXHT30_IIC_Send_Byte(GXHT30_IIC_Address);
if(!GXHT30_IIC_Wait_Ack())
GXHT30_IIC_Send_Byte(0x2c); //0x24 关闭Clock strestching
if(!GXHT30_IIC_Wait_Ack())
GXHT30_IIC_Send_Byte(0x06);
if(!GXHT30_IIC_Wait_Ack())
GXHT30_IIC_Stop();
delay_ms(20);
GXHT30_IIC_Start();
GXHT30_IIC_Send_Byte(GXHT30_IIC_Address+1);
//数据转换完成,IIC发送ACK应答
if(GXHT30_IIC_Wait_Ack() == 0)
{
GXHT30_IIC_SCL_L;
Tem_MSB = GXHT30_IIC_Read_Byte(1);
Tem_LSB = GXHT30_IIC_Read_Byte(1);
GXHT30_IIC_Read_Byte(1);
Hum_MSB = GXHT30_IIC_Read_Byte(1);
Hum_LSB = GXHT30_IIC_Read_Byte(1);
GXHT30_IIC_Read_Byte(0);
GXHT30_IIC_Stop();
}
Tem = Tem_MSB<<8|Tem_LSB;
Hum = Hum_MSB<<8|Hum_LSB;
GXHT30Info->Temprature = 175*(float)Tem/65535-45;
GXHT30Info->Humidity = 100*(float)Hum/65535;
}
//连续转换频率配置
void GXTH30_CycMode(void)
{
GXHT30_IIC_Start();
GXHT30_IIC_Send_Byte(GXHT30_IIC_Address);
GXHT30_IIC_Wait_Ack();
GXHT30_IIC_Send_Byte(0x21); //0x21 1S/次
GXHT30_IIC_Wait_Ack();
GXHT30_IIC_Send_Byte(0x30); //0x21 1S/次
GXHT30_IIC_Wait_Ack();
GXHT30_IIC_Stop();
delay_ms(250);
}
/*
读取周期测量得到的温湿度数据需要发送专用的数据读取命令。如果当前没有测量数据,那么芯片会对上位机发送的读数据头给出 NACK,然后上位机需要停止通信。 如果上位机读出了温湿度数据,那么存储温湿度数据的缓存器会被清零,直到下一次测量得到的温湿度数据被装载进来。
函数: 读取连续转换温湿度数据
频率1s/次
Command: 0XE000,连续转换温湿度命令
*/
void GXHT30_Read_data(GXHT30Info_t *GXHT30Info)
{
uint16_t Tem_MSB,Tem_LSB,Hum_MSB,Hum_LSB;
uint16_t Tem,Hum;
GXHT30_IIC_Start();
GXHT30_IIC_Send_Byte(GXHT30_IIC_Address);
GXHT30_IIC_Wait_Ack();
GXHT30_IIC_Send_Byte(0xE0); //0x21 1S/次
GXHT30_IIC_Wait_Ack();
GXHT30_IIC_Send_Byte(0x00); //0x21 1S/次
GXHT30_IIC_Wait_Ack();
GXHT30_IIC_Start();
GXHT30_IIC_Send_Byte(GXHT30_IIC_Address+1);
delay_ms(20);
if(GXHT30_IIC_Wait_Ack()==0)
{
Tem_MSB = GXHT30_IIC_Read_Byte(1);
Tem_LSB = GXHT30_IIC_Read_Byte(1);
GXHT30_IIC_Read_Byte(1);
Hum_MSB = GXHT30_IIC_Read_Byte(1);
Hum_LSB = GXHT30_IIC_Read_Byte(1);
GXHT30_IIC_Read_Byte(0);
GXHT30_IIC_Stop();
}
GXHT30_IIC_Stop();
Tem = Tem_MSB<<8|Tem_LSB;
Hum = Hum_MSB<<8|Hum_LSB;
GXHT30Info->Temprature = 175*(float)Tem/65535-45;
GXHT30Info->Humidity = 100*(float)Hum/65535;
}
IIC底层驱动参考原子IIC底层驱动即可。
以上是关于在环境监控设备研发中,GXHT30温湿度传感器的基本应用及原理的主要内容,如果未能解决你的问题,请参考以下文章