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

QQ登錄

只需一步,快速開始

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

基于STM32單片機(jī)的智能家居監(jiān)控系統(tǒng)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1129756 發(fā)表于 2024-7-29 12:44 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include "stm32f10x.h"                  // Device header
  2. #include "Delay.h"
  3. #include "KEY.h"
  4. #include "LED.h"
  5. #include "oled.h"
  6. #include "dht11.h"
  7. #include "esp8266.h"
  8. #include "Timer2.h"
  9. #include "AD.h"


  10. uint8_t KeyValue;
  11. uint8_t ParaSet_Flag;
  12. uint8_t temperature;
  13. uint8_t Humidity;
  14. uint16_t LightLux;
  15. uint8_t ERR;

  16. uint8_t TempSet = 25,HumidSet = 25,LuxSet = 25;
  17. uint8_t JumpCnt;

  18. uint8_t Temperature_Flag;
  19. uint8_t Humidity_Flag;
  20. uint8_t Lux_Flag;

  21. uint16_t Raw_LightLux;   //原始光敏

  22. int main(void)
  23. {
  24.    Key_Init();
  25.          PC13_LED_Init();
  26. //         Usart2_Init(115200);
  27. //         DHT11_Init();
  28.          AD_Init();
  29.          Timer2_Init();
  30.          OLED_Init();
  31.          OLED_Clear();
  32.          OLED_ShowString(24,0,"Smart Home",16);
  33.          OLED_ShowString(0,2,"Temp:  C",16);
  34.          OLED_ShowString(0,4,"Humid:  %",16);
  35.          OLED_ShowString(0,6,"Lux:  %",16);
  36.          OLED_ShowNum(40,2,temperature,2,16);
  37.          OLED_ShowNum(48,4,Humidity,2,16);
  38.          OLED_ShowNum(32,6,LightLux,2,16);                       
  39. //         do
  40. //         {
  41. //                 ERR = WiFi_Connect_IoTServer();
  42. //   
  43. //         }while(ERR);  //連接阿里云直到成功
  44.        
  45.        
  46.         while(1)
  47.         {
  48. //----------------------------------- Smart Home主界面 BEGIN -----------------------------------                
  49.      KeyValue = Key_Scan();      
  50.            if(KeyValue == 1) //當(dāng)按鍵1按下,進(jìn)入閾值設(shè)置界面
  51.                  {
  52.                                 ParaSet_Flag = 1;
  53.                           OLED_Clear();
  54.                                 OLED_ShowString(0,0,"Temp:",16);
  55.                                 OLED_ShowString(86,0,"*",16);
  56.                           OLED_ShowString(0,2,"Humid:",16);
  57.                           OLED_ShowString(0,4,"Lux:",16);
  58.                           OLED_ShowNum(40,0,TempSet,2,16);
  59.                           OLED_ShowNum(48,2,HumidSet,2,16);
  60.                           OLED_ShowNum(32,4,LuxSet,2,16);
  61.                           Temperature_Flag = 1; //進(jìn)行溫度閾值修改
  62.                                 Humidity_Flag = 0;
  63.                                 Lux_Flag = 0;
  64.                  }
  65.                  else if(KeyValue == 2) //當(dāng)按鍵2按下
  66.                  {  
  67.                  }
  68.            else if(KeyValue == 3) //當(dāng)按鍵3按下
  69.                  {
  70.                  }
  71.                  else if(KeyValue == 4) //當(dāng)按鍵4按下
  72.                  {
  73.                  }
  74. //----------------------------------- Smart Home主界面 END -----------------------------------
  75. //----------------------------------- 閾值設(shè)置界面 BEGIN -----------------------------------
  76.                  while(ParaSet_Flag == 1)
  77.                  {
  78.                                 KeyValue = Key_Scan();
  79.                           if(KeyValue == 1) //當(dāng)按鍵1按下,退出閾值設(shè)置界面
  80.                                 {
  81.                                         ParaSet_Flag = 0;
  82.                                         OLED_Clear();
  83.                                         OLED_ShowString(0,0,"Smart Home",16);
  84.                                 }
  85.                                 else if(KeyValue == 2) //當(dāng)按鍵2按下,上下移動(dòng)選擇需要設(shè)置的閾值
  86.                                 {
  87.                                         JumpCnt++;
  88.                                         if(JumpCnt == 1)
  89.                                         {
  90.                                                 OLED_ShowString(86,0," ",16);
  91.                                                 OLED_ShowString(86,2,"*",16);
  92.                                                 OLED_ShowString(86,4," ",16);
  93.                                                 Temperature_Flag = 0;
  94.                                                 Humidity_Flag = 1;//進(jìn)行濕度閾值修改
  95.                                                 Lux_Flag = 0;                                               
  96.                                         }
  97.                                         else if(JumpCnt == 2)
  98.                                         {
  99.                                                 OLED_ShowString(86,0," ",16);
  100.                                                 OLED_ShowString(86,2," ",16);
  101.                                                 OLED_ShowString(86,4,"*",16);
  102.                                                 Temperature_Flag = 0;
  103.                                                 Humidity_Flag = 0;
  104.                                                 Lux_Flag = 1;        //進(jìn)行光照閾值修改
  105.                                         }
  106.                                         else
  107.                                         {
  108.                                                 JumpCnt = 0;
  109.                                                 OLED_ShowString(86,0,"*",16);
  110.                                                 OLED_ShowString(86,2," ",16);
  111.                                                 OLED_ShowString(86,4," ",16);
  112.                                                 Temperature_Flag = 1;//進(jìn)行溫度閾值修改
  113.                                                 Humidity_Flag = 0;
  114.                                                 Lux_Flag = 0;       
  115.                                         }
  116.                                        
  117.                                 }
  118.                                 else if(KeyValue == 3) //當(dāng)按鍵3按下,閾值+
  119.                                 {
  120.                                                 if(Temperature_Flag == 1)
  121.                                                 {
  122.                                                                 TempSet++;
  123.                                                           if(TempSet >= 99)
  124.                                                                 {
  125.                                                                                 TempSet = 99;
  126.                                                                 }
  127.                                                                 OLED_ShowNum(40,0,TempSet,2,16);                                       
  128.                                                 }
  129.                                                 else if(Humidity_Flag == 1)
  130.                                                 {
  131.                                                                 HumidSet++;
  132.                                                           if(HumidSet >= 99)
  133.                                                                 {
  134.                                                                                 HumidSet = 99;
  135.                                                                 }
  136.                                                                 OLED_ShowNum(48,2,HumidSet,2,16);                                                               
  137.                                                 }
  138.                                                 else if(Lux_Flag == 1)
  139.                                                 {
  140.                                                                 LuxSet++;
  141.                                                           if(LuxSet >= 99)
  142.                                                                 {
  143.                                                                                 LuxSet = 99;
  144.                                                                 }
  145.                                                                 OLED_ShowNum(32,4,LuxSet,2,16);               
  146.                                                 }
  147.                                 }
  148.                                 else if(KeyValue == 4) //當(dāng)按鍵4按下,閾值-
  149.                                 {
  150.                                                 if(Temperature_Flag == 1)
  151.                                                 {
  152.                                                           if(TempSet <= 0)  TempSet = 0;
  153.                                                           else TempSet--;
  154.                                                                 OLED_ShowNum(40,0,TempSet,2,16);                                       
  155.                                                 }
  156.                                                 else if(Humidity_Flag == 1)
  157.                                                 {
  158.                                                           if(HumidSet <= 0)  HumidSet = 0;
  159.                                                           else HumidSet--;
  160.                                                                 OLED_ShowNum(48,2,HumidSet,2,16);                                                               
  161.                                                 }
  162.                                                 else if(Lux_Flag == 1)
  163.                                                 {
  164.                                                           if(LuxSet <= 0)  LuxSet = 0;
  165.                                                           else LuxSet--;
  166.                                                                 OLED_ShowNum(32,4,LuxSet,2,16);               
  167.                                                 }
  168.                                 }
  169.                           
  170.                  }
  171. //----------------------------------- 閾值設(shè)置界面 END -----------------------------------
  172. //----------------------------------- 自動(dòng)控制界面 BEGIN ---------------------------------
  173.                                                          
  174. //----------------------------------- 自動(dòng)控制界面 END -----------------------------------       
  175.          if(Timer2_5s_Flag == 1)
  176.          {
  177.                                                         Timer2_5s_Flag = 0;
  178.                                                         DHT11_Read_Data(&temperature, &Humidity);        //讀取溫濕度值
  179.                                                         Raw_LightLux=AD_GetValue(ADC_Channel_0);    //光照值獲取
  180.                                             LightLux = (((float)(4095-Raw_LightLux) / 4095) * 100);
  181.                                                         OLED_ShowString(0,2,"Temp:  C",16);
  182.                                                         OLED_ShowString(0,4,"Humid:  %",16);
  183.                                                         OLED_ShowString(0,6,"Lux:  %",16);
  184.                                                         OLED_ShowNum(40,2,temperature,2,16);
  185.                                                         OLED_ShowNum(48,4,Humidity,2,16);
  186.                                                         OLED_ShowNum(32,6,LightLux,2,16);                                         
  187.                                  }                                         


  188.         }
  189. }
復(fù)制代碼

原理圖: 無(wú)
仿真: 無(wú)
代碼: STM32_Iot_OK.7z (188.33 KB, 下載次數(shù): 22)

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:1129756 發(fā)表于 2024-7-29 12:44 | 只看該作者
(1)基本功能   實(shí)現(xiàn)溫濕度、光照的數(shù)據(jù)采集并上傳至云平臺(tái)   可以通過(guò)按鍵和APP對(duì)相關(guān)設(shè)備進(jìn)行自動(dòng)或手動(dòng)控制;   數(shù)據(jù)在OLED屏幕以及APP顯示
回復(fù)

使用道具 舉報(bào)

板凳
ID:1129756 發(fā)表于 2024-7-29 12:45 | 只看該作者
涉及知識(shí)儲(chǔ)備:
1. C語(yǔ)言語(yǔ)法
2. STM32F1標(biāo)準(zhǔn)庫(kù)的使用,GPIO、USART、TIMER、I2C
3. ESP8266-01S (重點(diǎn))
4. MQTT協(xié)議(重點(diǎn))
5. 云平臺(tái)(重點(diǎn))
回復(fù)

使用道具 舉報(bào)

地板
ID:1129756 發(fā)表于 2024-7-29 12:45 | 只看該作者
元器件清單
1、面包板
2、STM32F103C8T6最小系統(tǒng)
3、杜邦線
4、ESP8266-01S
5、按鍵
6、OLED屏
7、USB-TTL(CH340)模塊

軟件:
1、Keil
2、串口調(diào)試助手
回復(fù)

使用道具 舉報(bào)

5#
ID:1129756 發(fā)表于 2024-7-29 12:45 | 只看該作者
目標(biāo):
1、移植OLED驅(qū)動(dòng)代碼(I2C為例)
2、實(shí)現(xiàn)一個(gè)按鍵循環(huán)切換3個(gè)頁(yè)面
目標(biāo):
1、創(chuàng)建4個(gè)文件,KEY.c  KEY.h  LED.c  LED.h
2、實(shí)現(xiàn)按鍵通過(guò)點(diǎn)亮STM32F103C8T6的PC13 LED

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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