这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【CW32F030C8T6】:驱动DHT11温湿度传感器

共1条 1/1 1 跳转至

【CW32F030C8T6】:驱动DHT11温湿度传感器

高工
2026-09-17 19:42:12     打赏

一:DHT11温湿度介绍

    DHT11 是一款集温度与湿度测量于一体的数字温湿度复合传感器,内部由电容式湿度感应元件和 NTC 热敏电阻测温元件组成,通过单总线协议将测量结果以数字信号输出,可直接与 MCU 的普通 GPIO 相连,无需外接 ADC 或复杂的调理电路,是嵌入式开发与物联网项目中最常用的低成本环境传感器之一。

二:主要特点

      数字单总线输出:仅需一根数据线即可完成双向通信,接线简单,占用 MCU 引脚少,配合时序程序即可读取数据。

      温湿度一体测量:一颗传感器同时输出温度与湿度两路数据,无需分别部署两种器件。

      测量范围:温度 0~50℃,湿度 20%~90%RH,可覆盖日常室内与一般环境监测需求。

      测量精度:温度 ±2℃,湿度 ±5%RH,分辨率均为 1(整数输出),适合对精度要求不高的常规场景。

      低功耗:供电电压 3.3V~5.5V,测量时工作电流约 0.5mA,待机电流约 100µA,适合电池供电的便携设备。

      采样周期约 1~2 秒:单次读取间隔建议不小于 1 秒,数据更新频率较低,适合缓变环境参数的采集。

      数据格式规范:一次传输 40 位数据,依次为湿度整数、湿度小数、温度整数、温度小数和校验位,末尾 8 位用于校验,便于程序判错。

      体积小巧、成本低:常见 4 引脚封装(VCC、DATA、GND、NC),也有带滤波电容和上拉电阻的模块版本,易于集成到面包板或 PCB 上。

三:软件代码

3.1 软件代码展示如下所示:

//复位DHT11
void DHT11_Rst(void)           
{                 
    PB01_DIR_OUTPUT();         //PB12配置成输出
    PB01_SETLOW();             //拉低DQ
    delay1ms(20);
    PB01_SETHIGH();           //DQ=1 
    delay10us(3);
}
//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
uint8_t DHT11_Check(void)            
{   
        uint8_t retry=0;
        PB01_DIR_INPUT();  //PB12配置成输入
      while (PB01_GETVALUE()&&retry<10)//DHT11会拉低40~80us
        {
                retry++;
                delay10us(1);
        };         
        
        if(retry>=10)return 1;
        else retry=0;
  while (!PB01_GETVALUE()&&retry<10)//DHT11拉低后会再次拉高40~80us
        {
                retry++;
                delay10us(1);
        };

        if(retry>=10)return 1;            
        return 0;
}
//从DHT11读取一个位
//返回值:1/0
uint8_t DHT11_Read_Bit(void)                          
{
         uint8_t retry=0;
        while(PB01_GETVALUE()&&retry<10)//等待变为低电平
        {
            retry++;
            delay10us(1);
        }
        retry=0;
        while(!PB01_GETVALUE()&&retry<10)//等待变高电平
        {
            retry++;
            delay10us(1);
        }
        delay10us(4);//等待40us
        if(PB01_GETVALUE())return 1;
        else return 0;                   
}
//从DHT11读取一个字节
//返回值:读到的数据
uint8_t DHT11_Read_Byte(void)    
{        
    uint8_t i,dat;
    dat=0;
    for (i=0;i<8;i++) 
    {
        dat<<=1; 
        dat|=DHT11_Read_Bit();
    }                                                    
    return dat;
}
//从DHT11读取一次数据
//temp:温度值(范围:0~50°)
//humi:湿度值(范围:20%~90%)
//返回值:0,正常;1,读取失败
uint8_t DHT11_Read_Data(float *temp,uint8_t *humi)    
{        
//         uint8_t buf[5];
    char buf[5];
    uint8_t i;
    DHT11_Rst();
    if(DHT11_Check()==0)
    {
        for(i=0;i<5;i++)//读取40位数据
        {
            buf[i]=DHT11_Read_Byte();
        }
        if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
        {
            *humi=buf[0];
            *temp=buf[2];
        }
    }else return 1;
    return 0;            
}

3.2 实物展示如下所示:

四:应用场景

  智能家居:用于空调、加湿器、除湿机、智能温控器等设备的自动控制,根据室内温湿度自动调节运行状态。

  农业与养殖:在温室大棚、菌菇房、畜禽养殖场中监测环境温湿度,为通风、灌溉和控温提供依据。

  仓储与机房:监测仓库、档案室、机房、配电房的温湿度,防止货物受潮或设备过热,配合告警实现远程值守。

  工业与冷链:用于车间环境监测、冷链运输与存储环节的温湿度记录,保障产品品质。

  气象与环境监测:搭建小型气象站、环境监测终端,采集户外或室内的温湿度数据并上传云端。

  教育与 DIY 创客:作为单片机入门、课程设计、电子竞赛和创客项目的经典教学元件,常用于学习单总线协议与传感器驱动开发,例如配合 CW32F030 等 MCU 完成数据采集与显示。

  医疗与健康:用于药品存储、实验室环境的温湿度监控,辅助满足相应的存储条件要求。

五:结语

    DHT11 以极低的成本和简单的接口实现了温湿度的一体化测量,虽然在精度、响应速度和采样频率上不及更高阶的数字传感器,但在大多数对精度要求不高的民用与教学场景中,它仍然是一个稳定、易用、生态成熟的入门级选择。理解其单总线时序和 40 位数据格式,也是掌握更多单总线类传感器驱动开发的良好起点。





关键词: CW32F030C8T6     驱动     DHT11    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]