你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【NUCLEO-L476RG开发】DHT11温湿度传感器驱动

[复制链接]
fjjjnk1234 提问时间:2015-11-15 21:28 /
DHT11 是一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个 NTC测温元件。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。
DHT11 的技术参数如下:
    工作电压范围: 3.3V-5.5V
    工作电流 :平均 0.5mA
    输出:单总线数字信号
    测量范围:湿度 20~90%RH,温度 0~50℃
    精度 :湿度±5%,温度±2℃
    分辨率 :湿度 1%,温度 1℃

误差比较大,测量范围较小,也就只能当个玩具了。
DHT11 数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由 5Byte( 40Bit)组成。数据分小数部分和整数部分,一次完整的数据传输为40bit,高位先出。 DHT11 的数据格式为: 8bit 湿度整数数据+8bit 湿度小数数据+8bit 温度整数数据+8bit 温度小数数据+8bit 校验和。其中校验和数据为前四个字节相加。
程序采用mbed开发环境

引脚连接:
DHT11的Dout引脚接Nucleo板子Arduino插座的A0

DHT11读取函数:
  1. int ReadDHT11(void)
  2. {
  3.     // IO must be in hi state to start
  4.     if(WaitPinHigh(250) == ERROR_TIMEOUT)
  5.     {
  6.         return ERROR_BUS_BUSY;
  7.     }

  8.     // start the transfer
  9.     pin.output();
  10.     pin = 0;
  11.     wait_ms(18);

  12.     pin = 1;
  13.     wait_us(30);

  14.     pin.input();

  15.     // wait till the sensor grabs the bus
  16.     if(WaitPinLow(40) == ERROR_TIMEOUT)
  17.     {
  18.         return ERROR_NOT_PRESENT;
  19.     }

  20.     // sensor should signal low 80us and then hi 80us
  21.     if(WaitPinHigh(100) == ERROR_TIMEOUT)
  22.     {
  23.         return ERROR_SYNC_TIMEOUT;
  24.     }
  25.     if(WaitPinLow(100) == ERROR_TIMEOUT)
  26.     {
  27.         return ERROR_NO_PATIENCE;
  28.     }

  29.     int i, bit;
  30.     uint8_t buf[5];

  31.     // capture the data(40 bit)
  32.     for(i=0; i<5; i++)
  33.     {
  34.         buf[i] = 0;

  35.         for(bit=0; bit<8; bit++)
  36.         {
  37.             if(WaitPinHigh(75) == ERROR_TIMEOUT)
  38.             {
  39.                 return ERROR_DATA_TIMEOUT;
  40.             }

  41.             // logic 0 is 28us max, 1 is 70us
  42.             wait_us(40);
  43.             buf[i] |= pin << (7 - bit);

  44.             if(WaitPinLow(50) == ERROR_TIMEOUT)
  45.             {
  46.                 return ERROR_DATA_TIMEOUT;
  47.             }
  48.         }
  49.     }

  50.     for(i=0; i<5; i++)
  51.     {
  52.         printf("buf[%d] = 0x%02x\r\n", i, buf[i]);
  53.     }

  54.     // valid check
  55.     if(buf[4] != buf[0] + buf[1] + buf[2] + buf[3])
  56.     {
  57.         return ERROR_CHECKSUM;
  58.     }

  59.     Temperature = float(buf[2]);
  60.     Humidity    = float(buf[0]);

  61.     return SUCCESS;
  62. }
复制代码
主函数:
  1. int main(void)
  2. {
  3.     int ret;
  4.    
  5.     printf("******This is a DHT11 Test******\r\n");

  6.     for(;;)
  7.     {
  8.         ret = ReadDHT11();

  9.         if(ret == SUCCESS)
  10.         {
  11.             printf("Temperature : %4.2f\r\n", Temperature);
  12.             printf("Humidity    : %4.2f\r\n\r\n", Humidity);
  13.         }
  14.         else
  15.         {
  16.             printf("Error : %d\n", ret);
  17.         }

  18.         wait(5);
  19.     }
  20. }
复制代码
12.png

评分

参与人数 1 ST金币 +10 收起 理由
沐紫 + 10

查看全部评分

收藏 2 评论7 发布时间:2015-11-15 21:28

举报

7个回答
风子 回答时间:2015-11-15 21:55:28
谢谢分享.png
Paderboy 回答时间:2015-11-15 22:33:50
多谢分享,
lkl0305 回答时间:2015-11-15 22:40:24
多谢分享
netlhx 回答时间:2015-11-15 22:41:24
谢谢,又多了个参考
orima 回答时间:2015-11-16 08:29:59
多谢分享
肽宰1 回答时间:2015-11-16 10:01:55

多谢分享
奋斗逼 回答时间:2015-11-16 20:55:59
赞一个      

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版