• 【单片机毕业设计选题24005】-基于STM32的智能家居环境监测系统


    系统功能:

    此设计采用STM32单片机将采集到的环境环境温湿度,光照强度,火焰传感器状态,烟雾值,空气质量值等数据显示在OLED上,并将这些信息通过上报至手机APP。系统可通过手机蓝牙APP修改各传感器阈值.

    蓝牙连接后,如果系统处于自动状态则每隔5秒钟上报一次系统状态。

    如果系统处于手动状态下则可通过蓝牙下发控制命令,

    发送字符A增加光照设定阈值,

    发送字符B减小光照设定阈值,

    发送字符C增加MQ2设定阈值,

    发送字符D减小MQ2设定阈值,

    发送字符E增加MQ135设定阈值,

    发送字符F减小MQ135设定阈值。

    主要功能模块原理图:

    电源时钟烧录接口:

    单片机和按键输入电路:

    传感器采集电路:

    资料获取地址

    系统主要功能模块代码

    初始化代码: 

    1. /* USER CODE BEGIN 1 */
    2. /* USER CODE END 1 */
    3. /* MCU Configuration--------------------------------------------------------*/
    4. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    5. HAL_Init();
    6. /* USER CODE BEGIN Init */
    7. InitVar();
    8. /* USER CODE END Init */
    9. /* Configure the system clock */
    10. SystemClock_Config();
    11. /* USER CODE BEGIN SysInit */
    12. /* USER CODE END SysInit */
    13. /* Initialize all configured peripherals */
    14. MX_GPIO_Init();
    15. MX_USART1_UART_Init();
    16. MX_ADC1_Init();
    17. /* USER CODE BEGIN 2 */
    18. //在HAL库初始化串口1后调用
    19. HAL_Delay(100);
    20. SetUart1RxToInput();
    21. HAL_Delay(50);
    22. //uart1打开接收中断
    23. HAL_UART_Receive_IT(&huart1, (uint8_t*)&uart1RecBuff, 1);
    24. InitOled();
    25. InitOledDisp();
    26. ResetDHT11();

    系统控制代码:

    1. //系统信息更新
    2. void SystemControl(void)
    3. {
    4. static uint8_t updateCnt = 0;
    5. updateCnt++;
    6. if(updateCnt>=SYSTEM_UPDATE_INTER)
    7. {
    8. updateCnt = 0;
    9. if(DHT11ReadData()==0) //DHT11温湿度读取OK
    10. {
    11. ;
    12. }
    13. if(bleCtrl==false)
    14. {
    15. UpdateBleData();
    16. }
    17. }
    18. ReadSensorVal();
    19. //显示不同页面
    20. if(dispPageIndex==DISP_PAGE_1)
    21. {
    22. OledDispPage1();
    23. }
    24. else if(dispPageIndex==DISP_PAGE_2)
    25. {
    26. OledDispPage2();
    27. }
    28. else if(dispPageIndex==DISP_PAGE_3)
    29. {
    30. OledDispPage3();
    31. }
    32. else if(dispPageIndex==DISP_PAGE_4)
    33. {
    34. OledDispPage4();
    35. }
    36. }

    串口处理蓝牙控制命令代码:

    1. /* USER CODE BEGIN 4 */
    2. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    3. {
    4. if(USART1== huart->Instance)
    5. {
    6. //系统在手动模式下才可以远程操作
    7. if(bleCtrl==true)
    8. {
    9. if(uart1RecBuff=='A') //增加阈值-page2
    10. {
    11. dispPageIndex = DISP_PAGE_2;
    12. if(setLightVal>=SET_LIGHT_MAX)
    13. {
    14. setLightVal = SET_LIGHT_MAX;
    15. }
    16. else
    17. {
    18. setLightVal += 200;
    19. }
    20. printf("setLight:%d\r\n", setLightVal);
    21. }
    22. else if(uart1RecBuff=='B') //减少阈值-page2
    23. {
    24. dispPageIndex = DISP_PAGE_2;
    25. if(setLightVal<=SET_LIGHT_MIN)
    26. {
    27. setLightVal = SET_LIGHT_MIN;
    28. }
    29. else
    30. {
    31. setLightVal -= 200;
    32. }
    33. printf("setLight:%d\r\n", setLightVal);
    34. }
    35. else if(uart1RecBuff=='C') //增加阈值-page3
    36. {
    37. dispPageIndex = DISP_PAGE_3;
    38. if(setMQ2Val>=SET_MQ2_MAX)
    39. {
    40. setMQ2Val = SET_MQ2_MAX;
    41. }
    42. else
    43. {
    44. setMQ2Val += 100;
    45. }
    46. printf("setMQ2:%d\r\n", setMQ2Val);
    47. }
    48. else if(uart1RecBuff=='D') //减少阈值-page3
    49. {
    50. dispPageIndex = DISP_PAGE_3;
    51. if(setMQ2Val<=SET_MQ2_MIN)
    52. {
    53. setMQ2Val = SET_MQ2_MIN;
    54. }
    55. else
    56. {
    57. setMQ2Val -= 100;
    58. }
    59. printf("setMQ2:%d\r\n", setMQ2Val);
    60. }
    61. else if(uart1RecBuff=='E') //增加阈值-page4
    62. {
    63. dispPageIndex = DISP_PAGE_4;
    64. if(setMQ135Val>=SET_MQ135_MAX)
    65. {
    66. setMQ135Val = SET_MQ135_MAX;
    67. }
    68. else
    69. {
    70. setMQ135Val += 100;
    71. }
    72. printf("setMQ135:%d\r\n", setMQ135Val);
    73. }
    74. else if(uart1RecBuff=='F') //减少阈值-page4
    75. {
    76. dispPageIndex = DISP_PAGE_4;
    77. if(setMQ135Val<=SET_MQ135_MIN)
    78. {
    79. setMQ135Val = SET_MQ135_MIN;
    80. }
    81. else
    82. {
    83. setMQ135Val -= 100;
    84. }
    85. printf("setMQ135:%d\r\n", setMQ135Val);
    86. }
    87. }
    88. // Wait completly receive 1 byte data, and put data in rDataBuffer
    89. while(HAL_UART_Receive_IT(&huart1, (uint8_t*)&uart1RecBuff, 1) != HAL_OK);
    90. }
    91. }
    92. /* USER CODE END 4 */

    此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。

  • 相关阅读:
    redis在日常开发工作中的常见用法
    《美团机器学习实践》读后感和一点思考
    提升设计性能的HDL编码方法
    Sui提供dApp Kit 助力快速构建React Apps和dApps
    MySQL面试题合集
    List 去重的几种方法
    计算机组成原理知识总结(八)输入/输出系统
    领域自适应论文(七十):Bridging Theory and Algorithm for Domain Adaptation
    物联网AI MicroPython传感器学习 之 RTC时钟模块
    前后端分离的书本管理系统
  • 原文地址:https://blog.csdn.net/mcu_fang/article/details/139668318