基于STM32的温湿度监控系统,内含代码

大家好,今天给大家介绍基于STM32的温湿度监控系统,内含代码,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。

基于STM32的温湿度监控系统通常会涉及到STM32微控制器、温湿度传感器(如DHT11、DHT22或SHT30等)、以及可能的显示模块(如LCD或OLED)和通信接口(如UART、I2C或SPI)。以下是一个简化的项目概述和示例代码,假设我们使用的是DHT11温湿度传感器和STM32F103C8T6微控制器。

所需硬件

  1. STM32F103C8T6 开发板
  2. DHT11 温湿度传感器
  3. 连接线若干
  4. 可选:LCD显示屏
  5. 开发环境(如Keil uVision, STM32CubeIDE等)

接线说明

  • DHT11的VCC连接到STM32的3.3V或5V(DHT11支持3.3V和5V供电)
  • DHT11的GND连接到STM32的GND
  • DHT11的DATA连接到STM32的一个GPIO引脚(假设为PA0)

软件实现

这里提供一个基本的DHT11读取代码示例,假设你已经在STM32CubeIDE中创建了一个新项目,并配置了PA0作为GPIO输入。

#include "stm32f1xx_hal.h"  
#include <stdio.h>  
  
#define DHT11_GPIO_Port GPIOA  
#define DHT11_Pin GPIO_PIN_0  
  
void DHT11_Start(void) {  
    HAL_GPIO_WritePin(DHT11_GPIO_Port, DHT11_Pin, GPIO_PIN_RESET);  
    HAL_Delay(18); // 至少18ms  
    HAL_GPIO_WritePin(DHT11_GPIO_Port, DHT11_Pin, GPIO_PIN_SET);  
    HAL_Delay(40); // 等待DHT11响应  
}  
  
uint8_t DHT11_ReadBit(void) {  
    uint8_t bit = 0;  
    HAL_Delay(30); // 等待50us  
    if (HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin) == GPIO_PIN_SET) {  
        bit = 1;  
    }  
    HAL_Delay(80); // 等待高电平或低电平剩余时间  
    return bit;  
}  
  
uint8_t DHT11_ReadByte(void) {  
    uint8_t byte = 0;  
    for (int i = 0; i < 8; i++) {  
        byte <<= 1;  
        byte |= DHT11_ReadBit();  
    }  
    return byte;  
}  
  
void DHT11_ReadData(uint8_t *humidity, uint8_t *temperature) {  
    uint8_t data[5];  
    DHT11_Start();  
    if (DHT11_ReadByte() == 0x00 && DHT11_ReadByte() == 0x00 && DHT11_ReadByte() == 0x55 && DHT11_ReadByte() == 0xAA) {  
        data[0] = DHT11_ReadByte(); // 湿度整数部分  
        data[1] = DHT11_ReadByte(); // 湿度小数部分  
        data[2] = DHT11_ReadByte(); // 温度整数部分  
        data[3] = DHT11_ReadByte(); // 温度小数部分  
        data[4] = DHT11_ReadByte(); // 校验和  
  
        *humidity = data[0];  
        *temperature = data[2];  
    }  
}  
  
int main(void) {  
    HAL_Init();  
    // 初始化GPIO等(略)  
  
    uint8_t humidity, temperature;  
    while (1) {  
        DHT11_ReadData(&humidity, &temperature);  
        printf("Humidity: %d%%, Temperature: %d°C\n", humidity, temperature);  
        HAL_Delay(2000); // 每2秒读取一次  
    }  
}

注意

  1. 上述代码示例简化了初始化过程,实际项目中需要根据STM32CubeMX或HAL库进行GPIO等硬件的详细初始化。
  2. DHT11的时序控制(如启动信号、数据读取的延时)需要严格遵循其数据手册。
  3. 如果使用LCD显示屏显示数据,还需要额外编写LCD驱动代码。
  4. 示例中使用了printf进行调试,实际项目中可能需要通过USART或其他通信接口输出数据。
  5. 嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

    分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!

    点击找小助理免费领取资料

    扫码进群领资料icon-default.png?t=N7T8https://ad.pdb2.com/l/16QijNiGb32IFIn

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值