体系功能:
此设计采用STM32单片机收罗环境温湿度,烟雾浓度和一氧化碳浓度显示在OLED上,并将这些信息上报至阿里云平台。
1. 上电连接手机热点后自动连接阿里云,可通过阿里云平台收到体系上报的温湿度,烟雾
浓度,一氧化碳数据以及体系状态信息,并可以通过阿里云下发风扇开关命令。
2. 硬件体系包含四个机械按键,第一个按键为体系显示界面切换,第二个和第三个按键
为当前显示界面的设定阈值增减,第四个按键为手动开启/关闭风扇。
3. 体系有三个显示界面,第一个界面显示温湿度/继电器状态/体系状态,第二个界面
显示烟雾传感器设定阈值及状态,第三个界面显示一氧化碳传感器设定阈值及状态。体系功能框图:
资料获取方法
重要功能模块原理图
体系重要功能模块代码
初始化代码:
- /* 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_USART2_UART_Init();
- MX_ADC1_Init();
- /* USER CODE BEGIN 2 */
- //uart2打开接收中断
- HAL_UART_Receive_IT(&huart2, (uint8_t*)&uart2RecBuff, 1);
-
- InitOled();
- InitOledDisp();
- ResetDHT11();
- //初始化ESP8266
- ESP8266_Init();
- HAL_Delay(100);
- OledFill(0x00); //全屏熄灭
复制代码 ESP8266接入阿里云代码:
- //硬件复位ESP8266
- HAL_GPIO_WritePin(ESP8266RST_GPIO_Port, ESP8266RST_Pin, GPIO_PIN_RESET);
- HAL_Delay(250);
- HAL_GPIO_WritePin(ESP8266RST_GPIO_Port, ESP8266RST_Pin, GPIO_PIN_SET);
- HAL_Delay(500);
- //关闭板载LED
- HAL_GPIO_WritePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin, GPIO_PIN_SET);
- ESP8266_Clear();
- //测试AT指令
- printf("AT Testing\r\n");
- while(ESP8266_SendCmd("AT\r\n", "OK", 200))
- {
- HAL_Delay(1000);
- }
- HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);
- HAL_Delay(500);
- //设置为Station
- printf("set CWMODE\r\n");
- while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK", 200))
- {
- HAL_Delay(1000);
- }
- HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);
- HAL_Delay(500);
- //上电不自动连接AP
- printf("set CWAUTOCONN\r\n");
- while(ESP8266_SendCmd("AT+CWAUTOCONN=0\r\n", "OK", 200))
- {
- HAL_Delay(1000);
- }
- HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);
- HAL_Delay(500);
- //关闭回显
- printf("set ATE0\r\n");
- while(ESP8266_SendCmd("ATE0\r\n", "OK", 200))
- {
- HAL_Delay(1000);
- }
- HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);
- HAL_Delay(500);
- //配置WIFI
- printf("set Wifi\r\n");
- while(ESP8266_SendCmd("AT+CWJAP=""WIFI_SSID"",""WIFI_PASSWD""\r\n", "OK", 500))
- {
- HAL_Delay(1000);
- }
- HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);
- HAL_Delay(500);
- //MQTT USER CONFIG
- printf("mqtt config\r\n");
- while(ESP8266_SendCmd("AT+MQTTUSERCFG=0,1,""MQTT_CLIENT_ID"",""MQTT_USER_NAME"",""MQTT_PASSWD"",0,0,""\r\n", "OK", 500))
- {
- HAL_Delay(1000);
- }
- HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);
- HAL_Delay(1000);
- //MQTT连接服务器
- printf("mqtt broker\r\n");
- while(ESP8266_SendCmd("AT+MQTTCONN=0,""BROKER_ASDDRESS"",1883,0\r\n", "OK", 500))
- {
- HAL_Delay(1000);
- }
- HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);
- HAL_Delay(500);
复制代码 读传感器数据:
- //读传感器值,AD值
- void ReadSensorVal(void)
- {
- //获取温度值
- getTempVal = DHT11_Data.temp_int;
- //获取湿度值
- getHumiVal = DHT11_Data.humi_int;
- //获取烟雾传感器值
- getMQ2Val = ReadADCChannel(ADC_CHANNEL_4);
- //获取一氧化碳传感器值
- getMQ7Val = ReadADCChannel(ADC_CHANNEL_5);
- //烟雾和一氧化碳超标后需打开风扇,自动开风扇
- if((getMQ2Val>setMQ2Val)||(getMQ7Val>setMQ7Val))
- {
- relayState = true;
- RELAY_ON();
- }
- else
- {
- relayState = false;
- }
- //四个传感器值中任意一个超标都报警
- if((getMQ2Val>setMQ2Val)||(getMQ7Val>setMQ7Val)
- ||(getTempVal>setTempVal)||(getHumiVal>setHumiVal))
- {
- sysAlarm = true;
- BUZZER_ON();
- }
- else
- {
- sysAlarm = false;
- BUZZER_OFF();
- }
- }
复制代码 体系资料
此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,体系框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |