【单片机毕业设计选题24005】-基于STM32的智能家居环境监测系统
系统功能:
此设计采用STM32单片机将采集到的环境环境温湿度,光照强度,火焰传感器状态,烟雾值,空气质量值等数据显示在OLED上,并将这些信息通过上报至手机APP。系统可通过手机蓝牙APP修改各传感器阈值.
蓝牙连接后,如果系统处于自动状态则每隔5秒钟上报一次系统状态。
如果系统处于手动状态下则可通过蓝牙下发控制命令,
发送字符A增加光照设定阈值,
发送字符B减小光照设定阈值,
发送字符C增加MQ2设定阈值,
发送字符D减小MQ2设定阈值,
发送字符E增加MQ135设定阈值,
发送字符F减小MQ135设定阈值。
主要功能模块原理图:
电源时钟烧录接口:
单片机和按键输入电路:
传感器采集电路:
资料获取地址
系统主要功能模块代码
初始化代码:
/* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ InitVar(); /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); MX_ADC1_Init(); /* USER CODE BEGIN 2 */ //在HAL库初始化串口1后调用 HAL_Delay(100); SetUart1RxToInput(); HAL_Delay(50); //uart1打开接收中断 HAL_UART_Receive_IT(&huart1, (uint8_t*)&uart1RecBuff, 1); InitOled(); InitOledDisp(); ResetDHT11();
系统控制代码:
//系统信息更新 void SystemControl(void) { static uint8_t updateCnt = 0; updateCnt++; if(updateCnt>=SYSTEM_UPDATE_INTER) { updateCnt = 0; if(DHT11ReadData()==0) //DHT11温湿度读取OK { ; } if(bleCtrl==false) { UpdateBleData(); } } ReadSensorVal(); //显示不同页面 if(dispPageIndex==DISP_PAGE_1) { OledDispPage1(); } else if(dispPageIndex==DISP_PAGE_2) { OledDispPage2(); } else if(dispPageIndex==DISP_PAGE_3) { OledDispPage3(); } else if(dispPageIndex==DISP_PAGE_4) { OledDispPage4(); } }
串口处理蓝牙控制命令代码:
/* USER CODE BEGIN 4 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(USART1== huart->Instance) { //系统在手动模式下才可以远程操作 if(bleCtrl==true) { if(uart1RecBuff=='A') //增加阈值-page2 { dispPageIndex = DISP_PAGE_2; if(setLightVal>=SET_LIGHT_MAX) { setLightVal = SET_LIGHT_MAX; } else { setLightVal += 200; } printf("setLight:%d\r\n", setLightVal); } else if(uart1RecBuff=='B') //减少阈值-page2 { dispPageIndex = DISP_PAGE_2; if(setLightVal=SET_MQ2_MAX) { setMQ2Val = SET_MQ2_MAX; } else { setMQ2Val += 100; } printf("setMQ2:%d\r\n", setMQ2Val); } else if(uart1RecBuff=='D') //减少阈值-page3 { dispPageIndex = DISP_PAGE_3; if(setMQ2Val=SET_MQ135_MAX) { setMQ135Val = SET_MQ135_MAX; } else { setMQ135Val += 100; } printf("setMQ135:%d\r\n", setMQ135Val); } else if(uart1RecBuff=='F') //减少阈值-page4 { dispPageIndex = DISP_PAGE_4; if(setMQ135Val
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。