登录/注册

基于stm32温湿度传感器实验

基于stm32温湿度传感器实验

更多

以下是基于STM32的温湿度传感器实验的详细步骤和代码示例(以 DHT11 传感器为例),使用 HAL库 开发,适合初学者快速上手:


实验器材

  1. STM32开发板(如STM32F103C8T6)
  2. DHT11温湿度传感器
  3. 杜邦线若干
  4. USB转TTL模块(用于串口通信)
  5. Keil MDK-ARM开发环境

硬件连接

DHT11引脚 STM32引脚
VCC 3.3V
GND GND
DATA PB9(或其他GPIO)

注意:DATA引脚需接 4.7KΩ上拉电阻 到VCC。


代码实现

1. 配置GPIO和串口(用于调试输出)

// main.c
#include "stm32f1xx_hal.h"
#include "dht11.h"  // 自定义DHT11驱动头文件

UART_HandleTypeDef huart1;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);

int main(void) {
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USART1_UART_Init();

    DHT11_Data dht11;
    char msg[50];

    while (1) {
        if (DHT11_Read(&dht11) == DHT11_OK) {
            sprintf(msg, "Temp: %d°C, Humi: %d%%\r\n", dht11.temperature, dht11.humidity);
            HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), HAL_MAX_DELAY);
        } else {
            HAL_UART_Transmit(&huart1, (uint8_t*)"Error!\r\n", 8, HAL_MAX_DELAY);
        }
        HAL_Delay(2000); // 每2秒读取一次
    }
}

2. DHT11驱动 (dht11.cdht11.h)

// dht11.h
typedef struct {
    uint8_t humidity;
    uint8_t temperature;
} DHT11_Data;

typedef enum {
    DHT11_OK,
    DHT11_ERROR
} DHT11_Status;

DHT11_Status DHT11_Read(DHT11_Data *data);
// dht11.c
#include "dht11.h"
#include "stm32f1xx_hal.h"

#define DHT11_PORT GPIOB
#define DHT11_PIN  GPIO_PIN_9

static void DHT11_Delay(uint16_t time_us) {
    __HAL_TIM_SET_COUNTER(&htim1, 0);
    while (__HAL_TIM_GET_COUNTER(&htim1) < time_us);
}

DHT11_Status DHT11_Read(DHT11_Data *data) {
    uint8_t bytes[5] = {0};
    uint8_t cnt = 7, idx = 0;

    // 主机发送开始信号(拉低18ms)
    HAL_GPIO_WritePin(DHT11_PORT, DHT11_PIN, GPIO_PIN_RESET);
    HAL_Delay(18);
    HAL_GPIO_WritePin(DHT11_PORT, DHT11_PIN, GPIO_PIN_SET);
    DHT11_Delay(30); // 等待20-40us

    // 切换为输入模式等待响应
    GPIO_InitTypeDef gpio = {0};
    gpio.Pin = DHT11_PIN;
    gpio.Mode = GPIO_MODE_INPUT;
    gpio.Pull = GPIO_PULLUP;
    HAL_GPIO_Init(DHT11_PORT, &gpio);

    // 检查传感器响应(低电平80us + 高电平80us)
    if (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN)) return DHT11_ERROR;
    while (!HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN));
    while (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN));

    // 接收40位数据(湿度整数+小数+温度整数+小数+校验和)
    for (int i = 0; i < 40; i++) {
        while (!HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN));   // 等待高电平开始
        DHT11_Delay(40);                                   // 跳过50us低电平
        if (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN)) {     // 高电平>30us表示"1"
            bytes[idx] |= (1 << cnt);
            while (HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN));
        }
        if (cnt-- == 0) { cnt = 7; idx++; } // 下一个字节
    }

    // 校验数据(前4字节和 = 第5字节)
    if (bytes[4] != (bytes[0] + bytes[1] + bytes[2] + bytes[3])) 
        return DHT11_ERROR;

    data->humidity = bytes[0];
    data->temperature = bytes[2];
    return DHT11_OK;
}

关键步骤说明

  1. 初始化定时器:用于精确延时(在dht11.c中需配置一个基本定时器,如TIM1)。
  2. 发送开始信号:主机拉低DATA线至少18ms后释放。
  3. 传感器响应:DHT11拉低80us,再拉高80us表示准备发送数据。
  4. 数据解析
    • 每个数据位以50us低电平开始。
    • 高电平26~28us表示“0”,70us表示“1”。
  5. 校验和:确保数据正确性。

常见问题排查

  1. 无响应
    • 检查接线(VCC、GND、DATA)。
    • DATA引脚必须接上拉电阻。
    • 确保GPIO配置正确(开始时为输出,读取时为输入)。
  2. 数据错误
    • 调整延时函数精度(不同主频需修改DHT11_Delay)。
    • 检查传感器供电电压(DHT11工作范围3~5.5V)。
  3. 时序不稳定
    • 关闭全局中断(__disable_irq())确保时序严格。

实验结果

通过串口调试助手(如PuTTY)查看输出:

Temp: 25°C, Humi: 50%
Temp: 26°C, Humi: 48%
...

提示:实际项目中可加入LCD显示、蓝牙传输或MQTT上传云端功能扩展。

想要准确地测量环境温湿度温湿度传感器是关键!

‍ 温湿度是生产生活中最重要的环境指标之一,不仅人需要在适宜的温湿度条件下保持良好的精神状态和敏捷的思维,食品、药品、各种仪器设备等都对环境温湿度

2024-07-04 08:48:07

温湿度传感器工作原理 温湿度传感器的接线方法

温湿度传感器是一种用于测量环境温度和相对湿度的装置。它通常用于工业、农业、气象、室内空调等领域。本文将详细介绍

2024-02-14 18:00:00

温湿度采集实验

本实验采用三种方式来获取温湿度值,一种是STM32芯片内部自带的温度传感器

2023-03-01 15:52:45

stm32温湿度传感器报告_「正点原子NANO STM32开发板资料连载」第二十八章 DHT11 数字温湿度传感器实验...

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

资料下载 打马过草原 2021-12-05 16:36:07

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

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

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

基于STM32 -DTH11 数字温湿度传感器实验

基于STM32 -DHT11 数字温湿度传感器实验

资料下载 佚名 2021-11-05 19:05:59

电压温湿度传感器产品手册

STH系列温湿度变送器选用数字温湿度传感器和低功耗单片机技术制作,产品具有响应时间短, 精度高,长期稳定性好等特点,广泛应用于暖通空调、电信基站

资料下载 姚小熊27 2021-03-19 14:52:00

Arduino的实验例程之温湿度传感器DHT11实验

本文档的主要内容详细介绍的是Arduino的实验例程之温湿度传感器DHT11实验

资料下载 佚名 2021-03-01 11:42:29

温湿度变送器or温湿度传感器,我们应该如何选择

在我们需要检测一项数据时,往往需要传感器的帮助。比如需要测量温度、湿度、压力、光照、气体等,便会需要传感器的支持。在这些

2022-05-13 17:10:06

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

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

2022-02-09 07:50:32

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

基于STM32 -DHT11 数字温湿度传感器实验

2021-11-10 08:58:25

什么是温湿度传感器_温湿度传感器如何安装

 很多的人们对于温湿度传感器的安装是不了解的,不知道该怎么样安装,其实安装温湿度传感器

2020-05-26 09:24:08

霍尼韦尔温湿度传感器的类型

温湿度传感器是一种在图书馆等温湿度要求较高的地方广泛使用的,温湿度

2020-05-23 09:19:11

温湿度传感器的原理

温湿度传感器是指能将温度量和湿度量转换成容易被测量处理的电信号的设备或装置。市场上的温

2020-05-11 14:59:32

温湿度传感器的三大安装事项

为了更加精准的监测到生活中的温湿度,我们的人工达不到大家对温湿度的准确性的要求,这个时候就需要用到温湿度

2020-02-21 19:43:01

7天热门专题 换一换
相关标签