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

[复制链接]
1287|9
 楼主| 帛灿灿 发表于 2024-10-15 08:29 | 显示全部楼层 |阅读模式
STM32H743是一款基于ARM Cortex-M7内核的高性能微控制器,主频可达480MHz,具备丰富的外设资源,适合需要高速处理和复杂控制的应用。在本项目中,我们将利用STM32H743搭建一个温湿度监控系统,实现传感器数据采集和实时显示。

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

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

代码实现
  1. #include "stm32h7xx.h"
  2. #include "dht22.h"
  3. #include "ssd1306.h"
  4. #include "usart.h"

  5. void SystemClock_Config(void) {
  6.     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  7.     RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  8.     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  9.     RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  10.     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  11.     RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  12.     RCC_OscInitStruct.PLL.PLLM = 1;
  13.     RCC_OscInitStruct.PLL.PLLN = 400;
  14.     RCC_OscInitStruct.PLL.PLLP = 2;
  15.     RCC_OscInitStruct.PLL.PLLQ = 8;
  16.     HAL_RCC_OscConfig(&RCC_OscInitStruct);

  17.     RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
  18.     RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  19.     RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  20.     RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  21.     RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  22.     HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
  23. }

  24. void GPIO_Config(void) {
  25.     __HAL_RCC_GPIOB_CLK_ENABLE();
  26.     GPIO_InitTypeDef GPIO_InitStruct = {0};
  27.     GPIO_InitStruct.Pin = GPIO_PIN_0;
  28.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  29.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  30.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  31.     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  32. }

  33. int main(void) {
  34.     HAL_Init();
  35.     SystemClock_Config();
  36.     GPIO_Config();
  37.     DHT22_Init();
  38.     SSD1306_Init();
  39.     USART_Init();

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

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

  49.             USART_Transmit((uint8_t*)buffer, strlen(buffer));
  50.             
  51.             if (temperature > 30.0 || humidity > 70.0) {
  52.                 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 打开蜂鸣器
  53.             } else {
  54.                 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 关闭蜂鸣器
  55.             }
  56.         }
  57.         HAL_Delay(2000);
  58.     }
  59. }
系统设计要点
  • 温湿度数据采集
    使用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挺合适的,性价比高。
万图 发表于 2024-10-15 08:30 来自手机 | 显示全部楼层
我觉得加入Wi-Fi模块后,整套系统就更智能了。
Wordsworth 发表于 2024-10-15 08:31 来自手机 | 显示全部楼层
代码写得真清晰,适合初学者学习参考。
Pulitzer 发表于 2024-10-15 08:31 来自手机 | 显示全部楼层
这个项目要是加上电池供电就更灵活了。
Bblythe 发表于 2024-10-15 08:32 来自手机 | 显示全部楼层
以后再试试RGB显示屏,多颜色显示效果会更好。
Uriah 发表于 2024-10-15 08:32 来自手机 | 显示全部楼层
串口传输数据到电脑这一部分可以用图表展示,会更直观。
Clyde011 发表于 2024-10-15 08:32 来自手机 | 显示全部楼层
下次我也试试STM32H743,一直在用F4系列。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

166

主题

6196

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部