登录/注册

stm32dht11温湿度传感器

stm32dht11温湿度传感器

更多

要使用 STM32 与 DHT11 温湿度传感器通信,需遵循单总线协议并进行严格的时序控制。以下是关键步骤和代码示例:


关键步骤

  1. 硬件连接

    • VCC:接 3.3V-5.5V
    • GND:接地
    • DATA:接 STM32 的 GPIO 引脚(如 PB9)
    • 在 DATA 和 VCC 间加 4.7KΩ 上拉电阻
  2. 初始化时序

    • MCU 拉低总线 ≥18ms(启动信号)
    • MCU 拉高总线 20-40μs(等待应答)
  3. DHT11 响应

    • DHT11 拉低 80μs
    • DHT11 拉高 80μs
  4. 数据读取

    • 每 bit 以 50μs 低电平开始
    • 高电平持续时间判断数据:
      • 26-28μs → 逻辑 0
      • 70μs → 逻辑 1
    • 共 40 位数据(湿度整数+小数 + 温度整数+小数 + 校验和)
  5. 数据校验

    • 校验和 = 前 4 字节求和 & 0xFF

代码示例(HAL库)

#include "stm32f1xx_hal.h"

#define DHT11_PORT GPIOB
#define DHT11_PIN  GPIO_PIN_9

void DHT11_Start(void) {
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    // 设置为输出模式
    GPIO_InitStruct.Pin = DHT11_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    HAL_GPIO_Init(DHT11_PORT, &GPIO_InitStruct);

    // 拉低 ≥18ms
    HAL_GPIO_WritePin(DHT11_PORT, DHT11_PIN, GPIO_PIN_RESET);
    HAL_Delay(20);

    // 拉高 20-40μs
    HAL_GPIO_WritePin(DHT11_PORT, DHT11_PIN, GPIO_PIN_SET);
    delay_us(30);
}

uint8_t DHT11_Check_Response(void) {
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    // 设置为输入模式
    GPIO_InitStruct.Pin = DHT11_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    HAL_GPIO_Init(DHT11_PORT, &GPIO_InitStruct);

    // 等待 DHT11 拉低
    if (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN) == GPIO_PIN_RESET) {
        uint32_t timeout = 10000; // 防止死循环
        while (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN) == GPIO_PIN_RESET && timeout--);

        // 等待 DHT11 拉高
        timeout = 10000;
        while (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN) == GPIO_PIN_SET && timeout--);
        return 1; // 响应成功
    }
    return 0; // 响应失败
}

uint8_t DHT11_Read_Byte(void) {
    uint8_t data = 0;
    for (int i = 0; i < 8; i++) {
        // 等待 50μs 低电平结束
        uint32_t timeout = 10000;
        while (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN) == GPIO_PIN_RESET && timeout--);

        // 延迟 40μs 后检测高电平时间
        delay_us(40);
        if (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN) == GPIO_PIN_SET) {
            data |= (1 << (7 - i));
            timeout = 10000;
            while (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN) == GPIO_PIN_SET && timeout--);
        }
    }
    return data;
}

int8_t DHT11_Read(float *temp, float *hum) {
    uint8_t data[5] = {0};
    DHT11_Start();
    if (!DHT11_Check_Response()) return -1; // 无响应

    // 读取 40 位数据
    for (int i = 0; i < 5; i++) {
        data[i] = DHT11_Read_Byte();
    }

    // 校验
    if (data[4] != (data[0] + data[1] + data[2] + data[3])) 
        return -2; // 校验失败

    // 转换数据(DHT11 温度范围为 0~50°C)
    *hum = data[0];        // 湿度整数部分
    *temp = data[2];       // 温度整数部分
    return 0; // 成功
}

注意事项

  1. 精确延时:用 SysTick 或硬件定时器实现 delay_us()(直接循环计数可能因主频变化失效)。
  2. 临界区保护:在读取时序中禁用中断(避免时序被打断):
    __disable_irq();
    // 读取代码
    __enable_irq();
  3. 超时处理:所有 while 循环必须包含超时退出,防止硬件故障导致死锁。

常见问题

通过以上步骤即可在 STM32 上稳定读取 DHT11 的温湿度数据。项目源码可参考:STM32 DHT11 Driver Example

使用ESP8266驱动DHT11温湿度传感器

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度综合

2023-05-19 14:20:12

DHT11数字温湿度传感器的相关资料推荐

STM32采集DHT11温湿度关于DHT11相关参数代码篇接线和实验结果

2022-02-21 07:34:05

DHT11温湿度传感器简介

DHT11温湿度传感器1、DHT11简介

2022-02-16 06:55:05

数字温湿度传感器DHT11产品手册

数字温湿度传感器DHT11产品手册

资料下载 jf_38983874 2022-02-14 11:17:09

STM32学习之传感器篇——DHT11温湿度传感器

1、DHT11传感器简介DHT11数字温湿度

资料下载 张杰 2021-12-17 18:24:03

温湿度传感器DHT11STM32驱动实现

温湿度传感器DHT11的STM32驱动实现

资料下载 ejlwj 2021-11-25 20:36:07

温湿度传感器DHT11资料汇总

温湿度传感器DHT11资料汇总

资料下载 jf_42320578 2021-05-20 14:34:39

DHT11温湿度传感器使用手册电子版下载

DHT11温湿度传感器使用手册电子版下载

资料下载 ah此生不换 2021-03-27 11:20:05

如何使用STM32F4来读取DHT11数字温湿度传感器

数字温湿度传感器实验上一章,我们介绍了数字温度传感器 DS18B20 的使用,本章我们将介绍数字

2022-02-09 07:50:32

dht11温湿度传感器有什么特点?怎么使用?

dht11温湿度传感器特点及使用介绍前言一、dht11

2022-01-10 06:27:37

使用STM32来读取DHT11数字温湿度传感器

基于STM32 -DHT11 数字温湿度传感器实验实验目的:这个实验的目

2021-11-10 08:58:25

DHT11温湿度传感器

DHT11温湿度传感器1. DHT11简介2. 硬件设计3. 软件设计3

2021-08-11 06:04:01

基于STM32开发板实现传感数据采集-DHT11温湿度采集

STM32F407ZGT6开发板进行项目开发,选用的传感器为常见通用的DHT11温湿度

2021-08-10 07:41:37

使用DHT11温湿度传感器

STM32F407ZGT6开发板进行项目开发,选用的传感器为常见通用的DHT11温湿度

2021-08-10 06:14:05

DHT11温湿度传感器介绍

DHT11温湿度传感器介绍,1.实物原理图2.模块说明2.1 DHT11

2021-07-21 09:04:40
7天热门专题 换一换
相关标签