关于AM2302温湿度(DHT22)传感器的使用

这是使用该传感器的整个过程,在使用这个传感器的过程中所遇到的一些问题。


  1. 驱动文件获取

提取码:e0k7

  1. 原理解析

  • 硬件接线:

VCC接5v,SDA接MCU定义的IO口,SCL、GND接GND。

  • 软件控制过程:

第一步:上电初始化后等待2s,等传感器越过不稳定态。

第二步:起始信号:MCU定义的IO口输出低电平持续1ms。而后将IO口转为上拉输入释放SDA总线。传感器SDA总线收到起始信号后由输入态转为输出态。

第三步:应答信号:SDA总线被释放后,AM2302会先输出80us的低电平作为应答,而后输出80us的高电平通知MCU准备接收数据。

第四步:传感器的SDA总线会串行输出40bit数据给MCU, 数据传输完后会再输出50us低电平,随后便转为输入态来等待下一次起始信号到来。

  • 数据处理过程:

  • 数据组成:一共40bit,湿度高8位+湿度低8位+温度高8位+温度低8位+校验位8位。

  • 数据接收:定义结构体AM2302_Data_TypeDef 包含五个uint8_t型结构体变量。分步接收即可。

  • 输出校验:如果 湿度高8位+湿度低8位+温度高8位+温度低8位=校验位8位,则说明数据接收成功。

  • 数据显示:如下,在main函数中调用即可。

unsigned int RH_Value,TEMP_Value; 
unsigned char RH_H,RH_L,TP_H,TP_L;
if( Read_AM2302(&AM2302_Data)==SUCCESS)
            {           
                    //计算出实际湿度值的10倍
                    RH_Value= AM2302_Data.humi_int*256 + AM2302_Data.humi_deci;
                    RH_H = RH_Value/10;
                    RH_L = RH_Value%10;
                    //计算出时间温度值的10倍
                    TEMP_Value = AM2302_Data.temp_int*256 + AM2302_Data.temp_deci;
                    TP_H = TEMP_Value/10;
                    TP_L = TEMP_Value%10;
                    printf("\r\n读取AM2302成功!\r\n\r\n湿度为%d.%d %RH \
                                                    ,温度为 %d.%d℃ \r\n",RH_H,RH_L,TP_H,TP_L);//“\”表示转向一下行
            }
            else
                    printf("Read AM2302 ERROR!\r\n");
  1. 问题:

  • 问题1:移植好软件部分后,接好线发现串口打印出来一直显示读取错误。

  • 答:有可能是因为接线不够牢靠,而高低电平时间判定特别短,导致校验位校验失败,而导致读取错误,可以先注销校验部分代码,看看串口是否能正常收到温湿度信息。

  • 问题2:移植编译正常,接线部分也没有问题但是仍然收不到温湿度信息。

  • 答:仔细检查延时函数。因为该传感器对时序要求较为严格,如果时序不对,可能导致数据传输失败。

  • 问题3:读取的数据不够实时。

  • 答:是因为每一次读取所得数据均为在上次读取传感器数据时,传感器在读取时测量的,若想提高实时性,可以取两次即得较为实时数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值