打印
[STM32H7]

使用STM32H743实现温湿度监控系统

[复制链接]
498|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
帛灿灿|  楼主 | 2024-10-15 08:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32H743是一款基于ARM Cortex-M7内核的高性能微控制器,主频可达480MHz,具备丰富的外设资源,适合需要高速处理和复杂控制的应用。在本项目中,我们将利用STM32H743搭建一个温湿度监控系统,实现传感器数据采集和实时显示。

系统功能
  • 温湿度数据采集:通过DHT22传感器读取温湿度数据。
  • OLED显示:实时在OLED屏幕上显示当前温湿度数据。
  • 串口通信:将数据通过串口发送给上位机,便于数据记录和分析。
  • 异常报警:温湿度超出阈值时触发蜂鸣器报警。

硬件设计
  • MCU:STM32H743
  • 传感器:DHT22
  • 显示模块:0.96寸I2C OLED屏
  • 蜂鸣器:用于报警提示
  • USB供电:通过USB接口为系统供电

代码实现
#include "stm32h7xx.h"
#include "dht22.h"
#include "ssd1306.h"
#include "usart.h"

void SystemClock_Config(void) {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    RCC_OscInitStruct.PLL.PLLM = 1;
    RCC_OscInitStruct.PLL.PLLN = 400;
    RCC_OscInitStruct.PLL.PLLP = 2;
    RCC_OscInitStruct.PLL.PLLQ = 8;
    HAL_RCC_OscConfig(&RCC_OscInitStruct);

    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
    HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
}

void GPIO_Config(void) {
    __HAL_RCC_GPIOB_CLK_ENABLE();
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

int main(void) {
    HAL_Init();
    SystemClock_Config();
    GPIO_Config();
    DHT22_Init();
    SSD1306_Init();
    USART_Init();

    float temperature = 0.0, humidity = 0.0;
    char buffer[64];

    while (1) {
        if (DHT22_Read(&temperature, &humidity) == 0) {
            snprintf(buffer, sizeof(buffer), "Temp: %.2fC, Hum: %.2f%%", temperature, humidity);
            SSD1306_Clear();
            SSD1306_GotoXY(0, 0);
            SSD1306_Puts(buffer, &Font_7x10, 1);
            SSD1306_UpdateScreen();

            USART_Transmit((uint8_t*)buffer, strlen(buffer));
            
            if (temperature > 30.0 || humidity > 70.0) {
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 打开蜂鸣器
            } else {
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 关闭蜂鸣器
            }
        }
        HAL_Delay(2000);
    }
}
系统设计要点
  • 温湿度数据采集
    使用DHT22传感器,通过数据线读取温度和湿度值,并在每次采集后延时2秒,避免频繁读取导致数据错误。
  • OLED显示模块
    使用I2C协议驱动0.96寸OLED屏幕,显示当前温湿度信息。字体库采用7x10像素的字模,清晰易读。
  • 串口通信
    数据通过USART发送给上位机,便于在电脑端进行数据监控和分析。
  • 蜂鸣器报警功能
    当温度超过30℃或湿度超过70%时,蜂鸣器将发出报警,提示用户注意环境变化。


项目扩展方向
  • 数据存储:添加SD卡模块,实现历史数据的存储。
  • 网络监控:集成Wi-Fi模块,将数据上传到云平台,实现远程监控。
  • 移动端控制:开发手机APP,实现对系统的远程控制和数据查询。

结论基于STM32H743的温湿度监控系统展示了高性能MCU在嵌入式环境监控中的实际应用。通过简单的硬件设计和丰富的功能扩展,这款系统能够满足多种场景的需求,并为用户提供稳定可靠的数据监控服务。

使用特权

评论回复
沙发
公羊子丹| | 2024-10-15 08:29 | 只看该作者
这个项目很实用啊,我打算用在我的养殖棚里。

使用特权

评论回复
板凳
周半梅| | 2024-10-15 08:30 | 只看该作者
看来STM32H743的性能真的强,没想到还能这么玩。

使用特权

评论回复
地板
童雨竹| | 2024-10-15 08:30 | 只看该作者
温湿度传感器用DHT22挺合适的,性价比高。

使用特权

评论回复
5
万图| | 2024-10-15 08:30 | 只看该作者
我觉得加入Wi-Fi模块后,整套系统就更智能了。

使用特权

评论回复
6
Wordsworth| | 2024-10-15 08:31 | 只看该作者
代码写得真清晰,适合初学者学习参考。

使用特权

评论回复
7
Pulitzer| | 2024-10-15 08:31 | 只看该作者
这个项目要是加上电池供电就更灵活了。

使用特权

评论回复
8
Bblythe| | 2024-10-15 08:32 | 只看该作者
以后再试试RGB显示屏,多颜色显示效果会更好。

使用特权

评论回复
9
Uriah| | 2024-10-15 08:32 | 只看该作者
串口传输数据到电脑这一部分可以用图表展示,会更直观。

使用特权

评论回复
10
Clyde011| | 2024-10-15 08:32 | 只看该作者
下次我也试试STM32H743,一直在用F4系列。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

3792

帖子

0

粉丝