找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3922|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

基于STM32F103C8T6的環(huán)境監(jiān)測(cè)系統(tǒng)程序 上傳OneNET

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:734163 發(fā)表于 2021-12-28 00:45 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
通過(guò)ESP8266連接WIFI,數(shù)據(jù)可上傳OneNET

能夠?qū)崿F(xiàn)紅外人體監(jiān)測(cè)、光照度監(jiān)測(cè)、煙霧濃度監(jiān)測(cè)、一氧化碳濃度監(jiān)測(cè)

當(dāng)監(jiān)測(cè)的氣體濃度達(dá)到設(shè)定閾值后,可通過(guò)PWM調(diào)節(jié)風(fēng)扇轉(zhuǎn)速

能夠通過(guò)OneNET遠(yuǎn)程調(diào)節(jié)LED亮度、風(fēng)扇轉(zhuǎn)速



單片機(jī)源程序如下:
  1. //C庫(kù)
  2. #include <string.h>

  3. //單片機(jī)頭文件
  4. #include "sys.h"

  5. //網(wǎng)絡(luò)協(xié)議層
  6. #include "onenet.h"

  7. //網(wǎng)絡(luò)設(shè)備
  8. #include "esp8266.h"

  9. //硬件驅(qū)動(dòng)
  10. #include "delay.h"
  11. #include "usart.h"
  12. #include "led.h"
  13. #include "LCD.h"
  14. #include "dht11.h"
  15. #include "adc_dma.h"
  16. #include "mq2.h"
  17. #include "mq7.h"
  18. #include "timer.h"
  19. #include "bh1750.h"
  20. #include "gui.h"
  21. #include "hc_sr501.h"
  22. #include "hc_sr04.h"
  23. #include "TFT_demo.h"
  24. #include "pwm.h"
  25. #include "key.h"
  26. #include "beep.h"



  27. uint32_t time = 0; // ms 計(jì)時(shí)變量
  28. DHT11_Data_TypeDef DHT11_Data;

  29. float value_light = 0.0;         //光照度
  30. float value_mq2 = 0.0;                //煙霧濃度
  31. float value_mq7 = 0.0;                //一氧化碳濃度
  32. float value_sr04 = 0.0;                //超聲波距離
  33. u8 status_sr501 = 0;                //人體紅外檢測(cè)到的值
  34. int max_mq7 = 50;                        //一氧化碳濃度閾值
  35. int max_mq2 = 50;                        //煙霧濃度閾值
  36. u8 LED_Light;                                //PWM燈光亮度
  37. u8 FAN_Speed;                                //風(fēng)扇轉(zhuǎn)速



  38. //硬件初始化
  39. void Hardware_Init(void)
  40. {
  41.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級(jí)分組為組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)

  42.     delay_init();                        //延時(shí)函數(shù)初始化

  43.     LCD_Init();           //液晶屏初始化
  44.     LCD_Clear(GRAY0);

  45.     Usart1_Init(115200);                //串口1初始化為115200
  46.     Usart2_Init(115200);                 //串口2,驅(qū)動(dòng)ESP8266用
  47.     LED_Init();                                        //LED初始化
  48.     SR501_Init();                                //紅外熱釋電
  49.     Hcsr04Init();                                //超聲波測(cè)距
  50.     ADCx_Init();                                //ADC  DMA初始化
  51.     DHT11_GPIO_Config();                //DHT11溫濕度傳感器初始化
  52.     BH1750_Init();                                //光照
  53.     KEY_Init();
  54.     BEEP_Init();
  55.     PWM_TIM_Init();                                //PWM頻率=72000K/20*180=20Khz
  56.     TIM_SetCompare3(TIM3, 0);

  57.     Gui_DrawFont_GBK16(3, 34, BLUE, GRAY0, (u8 *)"設(shè)備初始化完成");
  58.     Gui_DrawFont_GBK16(3, 54, BLUE, GRAY0, (u8 *)"正在連接網(wǎng)絡(luò)....");

  59. }

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

  71. int main(void)
  72. {
  73.     unsigned char *dataPtr = NULL;
  74.     unsigned short timeCount = 300;        //發(fā)送間隔變量
  75.     char str[] = "";

  76.     Hardware_Init();                                //初始化外圍硬件
  77.     Net_Init();                                                //網(wǎng)絡(luò)初始化
  78.     GENERAL_TIM_Init();                                //1MS系統(tǒng)定時(shí)

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

  82.     while(1)
  83.     {
  84.         delay_ms(10);
  85.         timeCount ++;

  86.         //接收數(shù)據(jù)
  87.         dataPtr = ESP8266_GetIPD(0);
  88.         if(dataPtr != NULL)
  89.         {
  90.             OneNet_RevPro(dataPtr);
  91.         }

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

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

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

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



  121.             OneNet_SendData();        //發(fā)送數(shù)據(jù)

  122.             timeCount = 0;
  123.             ESP8266_Clear();
  124.         }
  125.         /*超聲波測(cè)距獲取距離(CM)*/
  126.         //value_sr04 = Hcsr04GetLength();
  127.         /*人體檢測(cè)*/
  128.         //status_sr501 = SR501_Check();

  129.         //調(diào)節(jié)燈光亮度
  130.         //PWM_Control(LED_Light);

  131.                 //調(diào)節(jié)風(fēng)扇轉(zhuǎn)速
  132.                 PWM_Control(FAN_Speed);
  133.         /**************************************************************************/
  134.         //        //判斷一氧化碳濃度是否超過(guò)上限
  135.         //        if((int)DHT11_Data.temp_int >=  15)
  136.         //        {
  137.         //            BEEP = 0;        //蜂鳴器報(bào)警
  138.         //        }
  139.         //        else
  140.         //        {
  141.         //            BEEP = 1;        //蜂鳴器關(guān)閉
  142.         //        }
  143.         //判斷一氧化碳濃度或煙霧濃度是否超過(guò)上限
  144.         if(((int)value_mq7 >= max_mq7) || ((int)value_mq2 >= max_mq2))
  145.         {
  146.             BEEP = 0;        //蜂鳴器報(bào)警
  147.         }
  148.         else
  149.         {
  150.             BEEP = 1;        //蜂鳴器關(guān)閉
  151.         }
  152.     }
  153. }
復(fù)制代碼

Keil代碼下載: 代碼.7z (250.88 KB, 下載次數(shù): 123)


評(píng)分

參與人數(shù) 1黑幣 +10 收起 理由
admin + 10 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:712167 發(fā)表于 2022-5-1 15:32 | 只看該作者
解決了我上云的苦惱
回復(fù)

使用道具 舉報(bào)

板凳
ID:310441 發(fā)表于 2022-5-5 07:38 來(lái)自手機(jī) | 只看該作者
ONENET收費(fèi)幾何?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表