温湿度传感器SHT20的驱动与使用

本文介绍了在冰库温度检测项目中,如何使用SHT20温湿度传感器进行数据采集。实验平台包括IAR Embedded Workbench、KEIL uVision4以及特定的硬件配置。针对网上源码存在的问题,作者优化了IIC写寄存器的部分,并提供了读取温度的函数,该函数在while(1)循环中运行,能实时获取浮点型温度数据。通过联合体(union)转换,可以将浮点型数据转化为4个字节并通过串口输出。

    最近公司里的一个小的项目:基于冰库的温度检测,采用无线通讯的方式,将采集到的温度信息传送给基站,基站通过UDP传输给上位机。

    实验平台

     编译软件: IAR Embedded Workbench for ARM version 6.40

                        KEIL Keil uVision4

      硬件平台:(1) 测温度标签: Nrf24LE1与SHT20  (2) 基站: STM32F107与NRF24LE1

     SHT20的驱动代码可以点击这里

     在原来网上找到的源码,发现IIC写寄存器的时候,有些偏差。因此自己参考了之前驱动ADXL345加速度传感器的模拟IIC程序,对写寄存器部分进行了优化。

以下是读取的函数,将该函数放在while(1)的循环里,即可实现对温度的读取。

float ReadSht20(char whatdo)
{
	float temp;
	uchar MSB,LSB;
	float Humidity;
	float Temperature;

	SET_Resolution();
	I2CStart(); 
	if(I2C_Write_Byte(SHT20ADDR&0xfe)==ACK) 
	{ 
		if(I2C_Write_Byte(whatdo)==ACK) 
		{
			do
			{
			Delay(6);
			I2CStart(); 
			}while(I2C_Write_Byte(SHT20ADDR|0x01)==NACK); 
	
			MSB = I2C_Read_Byte(ACK);
			LSB = I2C_Read_Byte(ACK); 
			I2C_Read_Byte(NACK); 
			I2CStop(); 
			LSB &= 0xfc; 
			temp = MSB*256 + LSB; 

			if (whatdo==((char)0xF5)) 
			{ 
				
	 	    	 Humidity = (temp*125)/65536-6; 
			 return Humidity; 
			} 
			else 
			{ 
			
			Temperature = (temp*175.72)/65536-46.85; 
			return Temperature; 
			}
		}
	}
	return 0;
}

读取的函数读出的函数是float类型。可以使用union进行转化,

typedef union 
{
	float x;
	INT8U y[4];
}Temperature;

typedef union 
{
	float x;
	INT8U y[4];
}Humidity;

 

Temperature TagTemperature;
Humidity TagHumidity;	


通过以下两个语句可以使用float类型的数据

TagHumidity.x=ReadSht20((char)0xF5);
TagTemperature.x=ReadSht20((char)0xF3);

 

而使用以下的两个语句可以实现串口吐出4个byte的温度值

  	Temperature_BUFF[0]=TagTemperature.y[0];
	Temperature_BUFF[1]=TagTemperature.y[1];
	Temperature_BUFF[2]=TagTemperature.y[2];
	Temperature_BUFF[3]=TagTemperature.y[3];
	UART0_SendBuff(Temperature_BUFF,sizeof(Temperature_BUFF));	   


 


 

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值