|
本項(xiàng)目為本人設(shè)計(jì)項(xiàng)目以此來記錄和分享,涉及使用的硬件有STM32F103系列,然后用到BH1750光照度傳感器、LCD、超聲波測距傳感器、MQ2一氧化碳傳感器、MQ7煙霧傳感器、DHT11溫濕度傳感器、ESP8266-01sWiFi模塊。實(shí)現(xiàn)了簡單的家居環(huán)境的遠(yuǎn)程監(jiān)測。遠(yuǎn)程監(jiān)控我們使用的是OneNet云平臺,檢測到的數(shù)據(jù)通過OneJson的數(shù)據(jù)模式由ESP8266-01s模塊以MQTT協(xié)議去發(fā)送給OneNet平臺。以此實(shí)現(xiàn)遠(yuǎn)程監(jiān)控。
BH1750:
SCL----PB6
SDA---PB7
ADDR---GND
LCD:
SCL----PB13
SDA---PB12
RES----PB11
DC-----PB15
CS-----PB14
BL-----PB10
超聲波:
Trig----PA7
Echo----PA6
一氧化碳MQ2:
AO----PA0
煙霧MQ7:
AO----PA1
DHT11:
DA----PA4
ESP8266:
RX---PA2
TX---PA3
風(fēng)扇:PA11
LED: PA9
執(zhí)行——風(fēng)扇和報(bào)警
溫度大于30,濕度大于70,一氧化碳大于50,煙霧大于50
執(zhí)行——燈
光照小于15
具體的執(zhí)行機(jī)構(gòu)還需要改正,樓主這里只是簡單示范,可以根據(jù)項(xiàng)目開發(fā)的實(shí)際情況來拓展執(zhí)行器。
Wifi-數(shù)據(jù)傳輸主要部分:
單片機(jī)源程序如下:
- #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 "LCD.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 計(jì)時變量
- 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; //煙霧濃度閾值
- int min_light = 15; //光照閾值
- u8 LED_Light; //PWM燈光亮度
- //硬件初始化
- void Hardware_Init(void)
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
- delay_init(); //延時函數(shù)初始化
- LCD_Init(); //液晶屏初始化
- LCD_Clear(GRAY0);
- Gui_DrawFont_GBK16(3,10,BLUE,GRAY0,(u8 *)"系統(tǒng)正在初始化");
- Usart1_Init(115200); //串口1初始化為115200
- Usart2_Init(115200); //串口2,驅(qū)動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(4,30,RED,GRAY0,(u8*)"設(shè)備初始化完成");
- Gui_DrawFont_GBK16(4,50,RED,GRAY0,(u8*)"正在連接網(wǎng)絡(luò)。。。");
- }
- void Net_Init()
- {
- ESP8266_Init(); //初始化ESP8266
- while(OneNet_DevLink()) //接入OneNET
- delay_ms(500);
- LED1 = 0; //入網(wǎng)成功
- Gui_DrawFont_GBK16(4,70,RED,GRAY0,(u8*)"網(wǎng)絡(luò)連接完成");
- delay_ms(2000);
- }
- int main(void)
- {
- unsigned char *dataPtr = NULL;
- unsigned short timeCount = 0; //發(fā)送間隔變量,初始化為0
- char str[50]; // 擴(kuò)大數(shù)組大小以避免緩沖區(qū)溢出
- Hardware_Init(); //初始化外圍硬件
- Net_Init(); //網(wǎng)絡(luò)初始化
- GENERAL_TIM_Init(); //1MS系統(tǒng)定時
- LCD_Clear(BLACK);
- Gui_DrawFont_GBK16(25,4,BLACK,GRAY0,(u8 *)" 系統(tǒng)監(jiān)控 ");
- GUI_DrawRectangle(1, 1, 128-2, 128-2, WHITE); //邊框
- while(1)
- {
- delay_ms(10);
- timeCount ++;
- //接收數(shù)據(jù)
- dataPtr = ESP8266_GetIPD(0);
- if(dataPtr != NULL)
- {
- OneNet_RevPro(dataPtr);
- }
- if(timeCount >= 300) //發(fā)送間隔5s
- {
- /* 溫濕度傳感器獲取數(shù)據(jù)*/
- if( Read_DHT11(&DHT11_Data)==SUCCESS)/*調(diào)用Read_DHT11讀取溫濕度,若成功則輸出該信息*/
- {
- 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");//讀取數(shù)據(jù)失敗,串口打印:Read DHT11 ERROR.
- Gui_DrawFont_GBK16(4,30,RED,BLACK,(u8 *)"ERROR!");
- Gui_DrawFont_GBK16(4,50,RED,BLACK,(u8 *)"ERROR!");
- }
- value_sr04 = Hcsr04GetLength();/*超聲波測距獲取距離(CM)*/
- status_sr501 = SR501_Check();/*人體檢測*/
- value_light = LIght_Intensity();/*光照度傳感器獲取數(shù)據(jù)*/
- sprintf(str, "光照:%.1flx ",value_light);
- Gui_DrawFont_GBK16(4,70,YELLOW,BLACK,(u8 *)str);
- value_mq2 = MQ2_GetPPM();/*MQ2傳感器獲取煙霧數(shù)據(jù)*/
- sprintf(str, "煙霧:%.1f ppm ",value_mq2);
- Gui_DrawFont_GBK16(4,90,BLUE,BLACK,(u8 *)str);
- value_mq7 = MQ7_GetPPM();/*MQ7傳感器獲取一氧化碳數(shù)據(jù)*/
- sprintf(str, " CO :%.1f ppm ",value_mq7);
- Gui_DrawFont_GBK16(4,110,GREEN,BLACK,(u8 *)str);
- OneNet_SendData(); //發(fā)送數(shù)據(jù)
- timeCount = 0;
- ESP8266_Clear();
- }
-
- if((DHT11_Data.temp_int > 30) || (DHT11_Data.humi_int > 70) || ((int)value_mq2 >= max_mq2) || ((int)value_mq7 >= max_mq7))
- {
- BEEP = 0; //蜂鳴器報(bào)警
- }
- else
- {
- BEEP = 1; //蜂鳴器關(guān)閉
- }
- if(value_light < min_light)
- {
- LED2 = 0; //外接燈亮
- }
- else
- {
- LED2 = 1; //外接燈滅
- }
- }
- }
-
復(fù)制代碼
原理圖: 無
仿真: 無
代碼:
程序.7z
(253.71 KB, 下載次數(shù): 0)
2025-5-31 05:25 上傳
點(diǎn)擊文件名下載附件
|
評分
-
查看全部評分
|