通過ESP8266連接WIFI,數據可上傳OneNET
能夠實現紅外人體監測、光照度監測、煙霧濃度監測、一氧化碳濃度監測
當監測的氣體濃度達到設定閾值后,可通過PWM調節風扇轉速
能夠通過OneNET遠程調節LED亮度、風扇轉速
OneNET三元組
ESP8266入網參數
單片機源程序如下:
- //C庫
- #include <string.h>
- //單片機頭文件
- #include "sys.h"
- //網絡協議層
- #include "onenet.h"
- //網絡設備
- #include "esp8266.h"
- //硬件驅動
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "LCD.h"
- #include "dht11.h"
- #include "adc_dma.h"
- #include "mq2.h"
- #include "mq7.h"
- #include "timer.h"
- #include "bh1750.h"
- #include "gui.h"
- #include "hc_sr501.h"
- #include "hc_sr04.h"
- #include "TFT_demo.h"
- #include "pwm.h"
- #include "key.h"
- #include "beep.h"
- uint32_t time = 0; // ms 計時變量
- DHT11_Data_TypeDef DHT11_Data;
- float value_light = 0.0; //光照度
- float value_mq2 = 0.0; //煙霧濃度
- float value_mq7 = 0.0; //一氧化碳濃度
- float value_sr04 = 0.0; //超聲波距離
- u8 status_sr501 = 0; //人體紅外檢測到的值
- int max_mq7 = 50; //一氧化碳濃度閾值
- int max_mq2 = 50; //煙霧濃度閾值
- u8 LED_Light; //PWM燈光亮度
- u8 FAN_Speed; //風扇轉速
- //硬件初始化
- void Hardware_Init(void)
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級
- delay_init(); //延時函數初始化
- LCD_Init(); //液晶屏初始化
- LCD_Clear(GRAY0);
- Usart1_Init(115200); //串口1初始化為115200
- Usart2_Init(115200); //串口2,驅動ESP8266用
- LED_Init(); //LED初始化
- SR501_Init(); //紅外熱釋電
- Hcsr04Init(); //超聲波測距
- ADCx_Init(); //ADC DMA初始化
- DHT11_GPIO_Config(); //DHT11溫濕度傳感器初始化
- BH1750_Init(); //光照
- KEY_Init();
- BEEP_Init();
- PWM_TIM_Init(); //PWM頻率=72000K/20*180=20Khz
- TIM_SetCompare3(TIM3, 0);
- Gui_DrawFont_GBK16(3, 34, BLUE, GRAY0, (u8 *)"設備初始化完成");
- Gui_DrawFont_GBK16(3, 54, BLUE, GRAY0, (u8 *)"正在連接網絡....");
- }
- void Net_Init()
- {
- ESP8266_Init(); //初始化ESP8266
- while(OneNet_DevLink()) //接入OneNET
- delay_ms(500);
- LED1 = 0; //入網成功
- BEEP_SetOnOff(0);
- Gui_DrawFont_GBK16(4, 70, RED, GRAY0, (u8 *)"網絡連接完成");
- delay_ms(2000);
- BEEP_SetOnOff(1);
- }
- int main(void)
- {
- unsigned char *dataPtr = NULL;
- unsigned short timeCount = 300; //發送間隔變量
- char str[] = "";
- Hardware_Init(); //初始化外圍硬件
- Net_Init(); //網絡初始化
- GENERAL_TIM_Init(); //1MS系統定時
- LCD_Clear(BLACK);
- Gui_DrawFont_GBK16(25, 4, BLUE, BLACK, (u8 *)" 系統監控 ");
- GUI_DrawRectangle(1, 1, 128 - 2, 128 - 2, WHITE); //邊框
- while(1)
- {
- delay_ms(10);
- timeCount ++;
- //接收數據
- dataPtr = ESP8266_GetIPD(0);
- if(dataPtr != NULL)
- {
- OneNet_RevPro(dataPtr);
- }
- if(timeCount >= 300) //發送間隔5s
- {
- /* 溫濕度傳感器獲取數據*/
- /*調用Read_DHT11讀取溫濕度,若成功則輸出該信息*/
- if(Read_DHT11(&DHT11_Data) == SUCCESS)
- {
- sprintf(str, "溫度:%d.%d ℃ ", DHT11_Data.temp_int, DHT11_Data.temp_deci);
- Gui_DrawFont_GBK16(4, 30, RED, BLACK, (u8 *)str);
- sprintf(str, "濕度:%d.%d %c ", DHT11_Data.humi_int, DHT11_Data.humi_deci, '%');
- Gui_DrawFont_GBK16(4, 50, RED, BLACK, (u8 *)str);
- }
- else
- {
- printf("Read DHT11 ERROR!\r\n");//讀取數據失敗,串口打印:Read DHT11 ERROR.
- Gui_DrawFont_GBK16(4, 30, RED, BLACK, (u8 *)"ERROR!");
- Gui_DrawFont_GBK16(4, 50, RED, BLACK, (u8 *)"ERROR!");
- }
- /*光照度傳感器獲取數據*/
- value_light = LIght_Intensity();
- sprintf(str, "光照:%.1flx ", value_light);
- Gui_DrawFont_GBK16(4, 70, YELLOW, BLACK, (u8 *)str);
- /*MQ2傳感器獲取煙霧數據*/
- value_mq2 = MQ2_GetPPM();
- sprintf(str, "煙霧:%.1f ppm ", value_mq2);
- Gui_DrawFont_GBK16(4, 90, BLUE, BLACK, (u8 *)str);
- /*MQ7傳感器獲取一氧化碳數據*/
- value_mq7 = MQ7_GetPPM();
- sprintf(str, " CO :%.1f ppm ", value_mq7);
- Gui_DrawFont_GBK16(4, 110, GREEN, BLACK, (u8 *)str);
- OneNet_SendData(); //發送數據
- timeCount = 0;
- ESP8266_Clear();
- }
- /*超聲波測距獲取距離(CM)*/
- //value_sr04 = Hcsr04GetLength();
- /*人體檢測*/
- //status_sr501 = SR501_Check();
- //調節燈光亮度
- //PWM_Control(LED_Light);
- //調節風扇轉速
- PWM_Control(FAN_Speed);
- /**************************************************************************/
- // //判斷一氧化碳濃度是否超過上限
- // if((int)DHT11_Data.temp_int >= 15)
- // {
- // BEEP = 0; //蜂鳴器報警
- // }
- // else
- // {
- // BEEP = 1; //蜂鳴器關閉
- // }
- //判斷一氧化碳濃度或煙霧濃度是否超過上限
- if(((int)value_mq7 >= max_mq7) || ((int)value_mq2 >= max_mq2))
- {
- BEEP = 0; //蜂鳴器報警
- }
- else
- {
- BEEP = 1; //蜂鳴器關閉
- }
- }
- }
復制代碼
Keil代碼下載:
代碼.7z
(250.88 KB, 下載次數: 123)
2021-12-29 05:24 上傳
點擊文件名下載附件
|