系统功能:
此设计采用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_LIGHT_MIN)
-
- {
-
- setLightVal = SET_LIGHT_MIN;
-
- }
-
- else
-
- {
-
- setLightVal -= 200;
-
- }
-
- printf("setLight:%d\r\n", setLightVal);
-
- }
-
- else if(uart1RecBuff=='C') //增加阈值-page3
-
- {
-
- dispPageIndex = DISP_PAGE_3;
-
- if(setMQ2Val>=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_MQ2_MIN)
-
- {
-
- setMQ2Val = SET_MQ2_MIN;
-
- }
-
- else
-
- {
-
- setMQ2Val -= 100;
-
- }
-
- printf("setMQ2:%d\r\n", setMQ2Val);
-
- }
-
- else if(uart1RecBuff=='E') //增加阈值-page4
-
- {
-
- dispPageIndex = DISP_PAGE_4;
-
- if(setMQ135Val>=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<=SET_MQ135_MIN)
-
- {
-
- setMQ135Val = SET_MQ135_MIN;
-
- }
-
- else
-
- {
-
- setMQ135Val -= 100;
-
- }
-
- printf("setMQ135:%d\r\n", setMQ135Val);
-
- }
-
- }
-
- // Wait completly receive 1 byte data, and put data in rDataBuffer
-
- while(HAL_UART_Receive_IT(&huart1, (uint8_t*)&uart1RecBuff, 1) != HAL_OK);
-
- }
-
- }
-
-
- /* USER CODE END 4 */
此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。

