久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 62|回復(fù): 0
收起左側(cè)

基于STM32的多模態(tài)家居環(huán)境監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)程序

[復(fù)制鏈接]
ID:1148991 發(fā)表于 2025-5-29 16:04 | 顯示全部樓層 |閱讀模式
本項(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ī)源程序如下:
  1. #include <string.h>
  2. #include "sys.h"
  3. #include "onenet.h"
  4. #include "esp8266.h"
  5. #include "delay.h"
  6. #include "usart.h"
  7. #include "led.h"
  8. #include "LCD.h"         
  9. #include "dht11.h"        
  10. #include "adc_dma.h"
  11. #include "mq2.h"
  12. #include "mq7.h"
  13. #include "timer.h"
  14. #include "bh1750.h"
  15. #include "gui.h"
  16. #include "LCD.h"
  17. #include "hc_sr501.h"
  18. #include "hc_sr04.h"
  19. #include "TFT_demo.h"
  20. #include "pwm.h"
  21. #include "key.h"
  22. #include "beep.h"

  23. uint32_t time = 0; // ms 計(jì)時變量
  24. DHT11_Data_TypeDef DHT11_Data;

  25. float value_light = 0.0;         //光照度
  26. float value_mq2 = 0.0;                //煙霧濃度
  27. float value_mq7 = 0.0;                //一氧化碳濃度
  28. float value_sr04 = 0.0;                //超聲波距離
  29. u8 status_sr501 = 0;                //人體紅外檢測到的值
  30. int max_mq7 = 50;                        //一氧化碳濃度閾值
  31. int max_mq2 = 50;                        //煙霧濃度閾值
  32. int min_light = 15;                //光照閾值
  33. u8 LED_Light;                                //PWM燈光亮度

  34. //硬件初始化
  35. void Hardware_Init(void)
  36. {
  37.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
  38.     delay_init();                        //延時函數(shù)初始化
  39.     LCD_Init();           //液晶屏初始化
  40.     LCD_Clear(GRAY0);
  41.     Gui_DrawFont_GBK16(3,10,BLUE,GRAY0,(u8 *)"系統(tǒng)正在初始化");
  42.     Usart1_Init(115200);                         //串口1初始化為115200
  43.     Usart2_Init(115200);         //串口2,驅(qū)動ESP8266用
  44.     LED_Init();                                //LED初始化
  45.     SR501_Init();                        //紅外熱釋電
  46.     Hcsr04Init();                        //超聲波測距       
  47.     ADCx_Init();                        //ADC   DMA初始化
  48.     DHT11_GPIO_Config();        //DHT11溫濕度傳感器初始化
  49.     BH1750_Init();                        //光照
  50.     KEY_Init();
  51.     BEEP_Init();
  52.     PWM_TIM_Init();                        //PWM頻率=72000K/20*180=20Khz
  53.     TIM_SetCompare3(TIM3,0);       
  54.     Gui_DrawFont_GBK16(4,30,RED,GRAY0,(u8*)"設(shè)備初始化完成");
  55.     Gui_DrawFont_GBK16(4,50,RED,GRAY0,(u8*)"正在連接網(wǎng)絡(luò)。。。");
  56. }

  57. void Net_Init()
  58. {
  59.     ESP8266_Init();                                        //初始化ESP8266
  60.     while(OneNet_DevLink())                        //接入OneNET
  61.         delay_ms(500);
  62.     LED1 = 0;                                                //入網(wǎng)成功
  63.     Gui_DrawFont_GBK16(4,70,RED,GRAY0,(u8*)"網(wǎng)絡(luò)連接完成");
  64.     delay_ms(2000);
  65. }

  66. int main(void)
  67. {
  68.     unsigned char *dataPtr = NULL;
  69.     unsigned short timeCount = 0;        //發(fā)送間隔變量,初始化為0
  70.     char str[50];        // 擴(kuò)大數(shù)組大小以避免緩沖區(qū)溢出

  71.     Hardware_Init();                                //初始化外圍硬件
  72.     Net_Init();                                                //網(wǎng)絡(luò)初始化
  73.     GENERAL_TIM_Init();                                //1MS系統(tǒng)定時

  74.     LCD_Clear(BLACK);
  75.     Gui_DrawFont_GBK16(25,4,BLACK,GRAY0,(u8 *)" 系統(tǒng)監(jiān)控 ");
  76.     GUI_DrawRectangle(1, 1, 128-2, 128-2, WHITE);                //邊框

  77.     while(1)
  78.     {
  79.         delay_ms(10);
  80.         timeCount ++;

  81.         //接收數(shù)據(jù)
  82.         dataPtr = ESP8266_GetIPD(0);
  83.         if(dataPtr != NULL)
  84.         {
  85.             OneNet_RevPro(dataPtr);
  86.         }

  87.         if(timeCount >= 300)        //發(fā)送間隔5s
  88.         {
  89.             /* 溫濕度傳感器獲取數(shù)據(jù)*/
  90.             if( Read_DHT11(&DHT11_Data)==SUCCESS)/*調(diào)用Read_DHT11讀取溫濕度,若成功則輸出該信息*/
  91.             {
  92.                 sprintf(str, "溫度:%d.%d ℃ ",DHT11_Data.temp_int,DHT11_Data.temp_deci);
  93.                 Gui_DrawFont_GBK16(4,30,RED,BLACK,(u8 *)str);
  94.                 sprintf(str, "濕度:%d.%d %c ",DHT11_Data.humi_int,DHT11_Data.humi_deci,'%');
  95.                 Gui_DrawFont_GBK16(4,50,RED,BLACK,(u8 *)str);
  96.             }
  97.             else
  98.             {
  99.                 printf("Read DHT11 ERROR!\r\n");//讀取數(shù)據(jù)失敗,串口打印:Read DHT11 ERROR.
  100.                 Gui_DrawFont_GBK16(4,30,RED,BLACK,(u8 *)"ERROR!");
  101.                 Gui_DrawFont_GBK16(4,50,RED,BLACK,(u8 *)"ERROR!");
  102.             }

  103.             value_sr04 = Hcsr04GetLength();/*超聲波測距獲取距離(CM)*/
  104.             status_sr501 = SR501_Check();/*人體檢測*/

  105.             value_light = LIght_Intensity();/*光照度傳感器獲取數(shù)據(jù)*/
  106.             sprintf(str, "光照:%.1flx  ",value_light);
  107.             Gui_DrawFont_GBK16(4,70,YELLOW,BLACK,(u8 *)str);

  108.             value_mq2 = MQ2_GetPPM();/*MQ2傳感器獲取煙霧數(shù)據(jù)*/
  109.             sprintf(str, "煙霧:%.1f ppm ",value_mq2);
  110.             Gui_DrawFont_GBK16(4,90,BLUE,BLACK,(u8 *)str);

  111.             value_mq7 = MQ7_GetPPM();/*MQ7傳感器獲取一氧化碳數(shù)據(jù)*/
  112.             sprintf(str, " CO :%.1f ppm ",value_mq7);
  113.             Gui_DrawFont_GBK16(4,110,GREEN,BLACK,(u8 *)str);

  114.             OneNet_SendData();        //發(fā)送數(shù)據(jù)
  115.             timeCount = 0;
  116.             ESP8266_Clear();
  117.         }

  118.         
  119.         if((DHT11_Data.temp_int > 30) || (DHT11_Data.humi_int > 70) || ((int)value_mq2 >= max_mq2) || ((int)value_mq7 >= max_mq7))
  120.         {
  121.             BEEP = 0;        //蜂鳴器報(bào)警
  122.         }
  123.         else
  124.         {
  125.             BEEP = 1;        //蜂鳴器關(guān)閉
  126.         }

  127.         if(value_light < min_light)
  128.         {
  129.             LED2 = 0;        //外接燈亮
  130.         }
  131.         else
  132.         {
  133.             LED2 = 1;        //外接燈滅
  134.         }
  135.     }
  136. }
  137.    
復(fù)制代碼

原理圖: 無
仿真: 無
代碼: 程序.7z (253.71 KB, 下載次數(shù): 0)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品在线免费观看视频 | 一区二区三区精品视频 | 日韩av啪啪网站大全免费观看 | 98久久| 免费在线观看av网址 | 国产在线一区二区三区 | 成人网在线看 | 欧美激情区 | 国产一区二区三区在线 | 在线色网站 | 在线视频亚洲 | 国产精品永久免费视频 | 欧美一级艳情片免费观看 | 青娱乐av | 中文字幕av高清 | 国产精品久久久久久吹潮 | 精品久久一区二区三区 | 国产馆| 久久久久国产精品午夜一区 | 在线播放中文字幕 | 欧美激情在线播放 | 中文字幕国产精品 | 欧州一区二区三区 | 国产精品福利一区二区三区 | 国产精品久久久久久久久久妇女 | 国产精品综合视频 | 欧美视频一区 | 国产日韩精品一区二区 | 最近日韩中文字幕 | 九九免费观看视频 | 久久久激情视频 | 久久国产精品偷 | 91麻豆精品国产91久久久久久 | a级片在线观看 | 97福利在线 | 91婷婷韩国欧美一区二区 | 九九激情视频 | 91网站在线观看视频 | 国产午夜精品久久久 | 精品国产欧美一区二区 | 欧美日韩精品久久久免费观看 |