请选择 进入手机版 | 继续访问电脑版

EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 557|回复: 0

[资料] STM32智能家居控制系统程序

[复制链接]

6

主题

1

回帖

39

E币

技术员

Rank: 2

积分
13
发表于 2020-1-11 09:44:48 | 显示全部楼层 |阅读模式
一、 自动模式
1.温湿度、气压、烟雾浓度、一氧化碳浓度、光照强度检测;
2.当光照强度大于所设定的阈值时,会自动打开客厅灯和窗帘(步进电机);
3.当温湿度、气压、烟雾浓度、一氧化碳浓度任意的数据大于所设定的阈值时,会启动声光报警(蜂鸣器)

二、手动模式
1.上位机(机智云)的APP 可以控制窗帘和客厅灯的开关,可以调节各个传感器的阈值;
2.传感器所检测到的数据会实时传送到上位机(机智云)的APP显示

制作出来的实物图如下:
123200g7iu0657z4dj647u.jpg
123201jk2hy3e2mi3vykn1.jpg
123201dm5c8f78xc1zp3qx.jpg

单片机源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "timer.h"
  6. #include "ADC.h"
  7. #include "usart3.h"
  8. #include "key.h"
  9. #include "rtc.h"
  10. #include "oled.h"
  11. #include "stmflash.h"
  12. #include "math.h"
  13. #include "dht11.h"
  14. #include "bmp280.h"
  15. #include "exti.h"
  16. #include "gizwits_product.h"

  17. u8 buff[30];//参数显示缓存数组
  18. u8 count;
  19. dataPoint_t currentDataPoint;//云端数据点
  20. u8 wifi_sta;//wifi连接状态标志
  21. u8 mode=0;//模式控制自动和手动
  22. u8 NTP_sta=0;//网诺时间获取状态
  23. u8 display_contrl=0;
  24. u8 curtain_flag=0;
  25. u8 last_curtain_flag=0;

  26. extern u8 DHT11_Temp,DHT11_Hum;                //温湿度
  27. u16 Pre;                                                        //气压检测值
  28. u16 gz_value;                                                //光照检测值                        
  29. u16 m2_value;                                                //烟雾检测值
  30. u16 m7_value;                                                //一氧化碳检测值
  31. u16 m135_value;                                                //空气质量检测值

  32. u16 A_DHT11_Temp=25;                                //温度阈值
  33. u16 A_DHT11_Hum=50;                                        //湿度阈值
  34. u16 A_pre=1500;                                                //气压阈值
  35. u16 A_gz_value=2000;                                //光照强度阈值
  36. u16 A_m2_value=1500;                                //烟雾阈值
  37. u16 A_m7_value=2000;                                //一氧化碳阈值
  38. u16 A_m135_value=4000;                                //空气质量阈值
  39. /************************************************
  40. ALIENTEK精英STM32开发板实验1
  41. 跑马灯实验
  42. 技术支持:www.openedv.com
  43. 淘宝店铺:http://eboard.taobao.com
  44. 关注微信公众平台微信号:"正点原子",免费获取STM32资料。
  45. 广州市星翼电子科技有限公司  
  46. 作者:正点原子 @ALIENTEK
  47. ************************************************/
  48. //协议初始化
  49. void Gizwits_Init(void)
  50. {        
  51.         TIM3_Int_Init(9,7199);//1MS系统定时
  52.     usart3_init(9600);//WIFI初始化
  53.         memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));//设备状态结构体初始化
  54.         gizwitsInit();//缓冲区初始化
  55. }

  56. //数据采集
  57. void userHandle(void)
  58. {
  59.         currentDataPoint.valueLED=!LED0;
  60.         currentDataPoint.valueCurtain=curtain_flag;
  61.         currentDataPoint.valueTemp=DHT11_Temp;
  62.         currentDataPoint.valueHum=DHT11_Hum;
  63.         currentDataPoint.valuePre=Pre;
  64.         currentDataPoint.valueGZ_Val=gz_value;
  65.         currentDataPoint.valueMQ2_Val=m2_value;
  66.         currentDataPoint.valueMQ7_Val=m7_value;
  67.         currentDataPoint.valueMQ135_Val=m135_value;
  68.         
  69. }

  70. void Get_Data(u16 count);//获取传感器数据
  71. void WIFI_Contection(u8 key);//WiFi连接控制
  72. void Canshu_Change(u8 key);//系统参数调节
  73. void Mode_Change(u8 key);//模式切换
  74. void BUJING_Cotrol(u8 mode,u16 time,u16 count);
  75. int main(void)
  76. {        
  77.         u8 t=0;
  78.         int key_value;                //按键值
  79.         delay_init();            //延时函数初始化
  80.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  81.         uart_init(115200);                         //串口初始化为115200
  82.         Adc1_Channe_Init();                        //ADC通道初始化
  83.         KEY_Init();                                        //按键引脚初始化
  84.         //EXTIX_Init();
  85.         bmp280Init();
  86.         while(DHT11_Init());        
  87.         LED_Init();                                          //初始化与LED连接的硬件接口
  88.         OLED_Init();                                //OLED初始化
  89.         OLED_Clear();                                //OLED清屏
  90.         Gizwits_Init();               
  91.         
  92.         STMFLASH_Read(FLASH_SAVE_ADDR+10,&A_DHT11_Temp,2);        //开机读取温度阈值
  93.         STMFLASH_Read(FLASH_SAVE_ADDR+12,&A_DHT11_Hum,2);        //开机读取湿度阈值
  94.         STMFLASH_Read(FLASH_SAVE_ADDR+14,&A_pre,2);                        //开机读取气压阈值
  95.         STMFLASH_Read(FLASH_SAVE_ADDR+18,&A_gz_value,2);        //开机读取光照强度阈值
  96.         STMFLASH_Read(FLASH_SAVE_ADDR+20,&A_m2_value,2);        //开机读取烟雾阈值
  97.         STMFLASH_Read(FLASH_SAVE_ADDR+22,&A_m7_value,2);        //开机读取一氧化碳阈值
  98.         STMFLASH_Read(FLASH_SAVE_ADDR+24,&A_m135_value,2);        //开机读取空气质量阈值

  99.         while(1)
  100.         {
  101.                 Get_Data(0);
  102.                 if(gz_value<=A_gz_value&&mode==0)
  103.                 {
  104.                         LED0=0;
  105.                         curtain_flag=0;
  106.                 }else if(gz_value>A_gz_value&&mode==0){
  107.                         LED0=1;
  108.                         curtain_flag=1;
  109.                 }
  110.                 if(last_curtain_flag!=curtain_flag&&mode==0)
  111.                 {
  112.                         BUJING_Cotrol(curtain_flag,3,180);
  113.                         //                BUJING_Cotrol(curtain_flag,4,180);
  114.                         last_curtain_flag = curtain_flag;
  115.                 }
  116.                 if(last_curtain_flag!=currentDataPoint.valueCurtain&&mode==1)
  117.                 {
  118.                         BUJING_Cotrol(currentDataPoint.valueCurtain,3,270);
  119.                         curtain_flag = currentDataPoint.valueCurtain;
  120.                         last_curtain_flag = currentDataPoint.valueCurtain;
  121.                 }        
  122.                 if(mode==1)
  123.                 {
  124.                         LED0=!currentDataPoint.valueLED;
  125.                 }
  126.         //        if(Pre>=A_pre||m135_value<=A_m135_value||m2_value>=A_m2_value||m7_value>=A_m7_value)
  127.                 if(Pre>=A_pre||m135_value>=A_m135_value||m2_value>=A_m2_value||m7_value>=A_m7_value)
  128.                 {
  129.                         BEEP=        !BEEP;
  130.         //                BEEP=        1;
  131.                 }else BEEP = 0;

  132.                 key_value = KEY_Scan(0);
  133.                 if(key_value==3)
  134.                 {
  135.                         display_contrl++;
  136.                 }
  137.                 if(display_contrl%2==0&&t>=10)
  138.                 {
  139.                         OLED_ShowCHinese(0,0,0);
  140.                         OLED_ShowCHinese(16,0,2);
  141.                         sprintf((char*)buff,":%2dC",DHT11_Temp);
  142.                         OLED_ShowString(32,0,buff,16);        //显示温度   
  143.                         OLED_ShowCHinese(82,0,2);
  144.                         sprintf((char*)buff,":%2d%%",DHT11_Hum);
  145.                         OLED_ShowString(96,0,buff,16);//显示湿度        
  146.                         
  147.                         OLED_ShowCHinese(0,2,3);
  148.                         OLED_ShowCHinese(16,2,4);
  149.                         sprintf((char*)buff,":%2dpa     ",Pre);
  150.                         OLED_ShowString(32,2,buff,16);//显示气压
  151.                         
  152.                         OLED_ShowCHinese(0,4,5);
  153.                         OLED_ShowCHinese(16,4,6);
  154.                         OLED_ShowCHinese(32,4,7);
  155.                         OLED_ShowCHinese(48,4,8);
  156.                         sprintf((char*)buff,":%4dppm",gz_value);
  157.                         OLED_ShowString(64,4,buff,16);//显示光照强度
  158.                         
  159.                         OLED_ShowCHinese(0,6,9);
  160.                         OLED_ShowCHinese(16,6,10);
  161.                         OLED_ShowCHinese(32,6,11);
  162.                         OLED_ShowCHinese(48,6,12);
  163.                         sprintf((char*)buff,":%4dppm",m135_value);
  164.                         OLED_ShowString(64,6,buff,16);//显示空气质量
  165.                 }else if(display_contrl%2==1&&t>=10)
  166.                 {
  167.                         OLED_ShowCHinese(0,0,13);
  168.                         OLED_ShowCHinese(16,0,14);
  169.                         OLED_ShowCHinese(32,0,15);
  170.                         OLED_ShowCHinese(48,0,16);
  171.                         sprintf((char*)buff,":%4dppm",m2_value);
  172.                         OLED_ShowString(64,0,buff,16);//显示M2数据
  173.                         
  174.                         OLED_ShowCHinese(0,2,17);
  175.                         OLED_ShowCHinese(16,2,18);
  176.                         OLED_ShowCHinese(32,2,19);
  177.                         OLED_ShowCHinese(48,2,20);
  178.                         sprintf((char*)buff,":%4dppm",m7_value);
  179.                         OLED_ShowString(64,2,buff,16);//显示M7数据
  180.                         
  181.                         OLED_ShowCHinese(0,4,5);
  182.                         OLED_ShowCHinese(16,4,6);
  183.                         OLED_ShowCHinese(32,4,7);
  184.                         OLED_ShowCHinese(48,4,8);
  185.                         sprintf((char*)buff,":%4dppm",gz_value);
  186.                         OLED_ShowString(64,4,buff,16);//显示光照强度
  187.                         
  188.                         OLED_ShowCHinese(0,6,9);
  189.                         OLED_ShowCHinese(16,6,10);
  190.                         OLED_ShowCHinese(32,6,11);
  191.                         OLED_ShowCHinese(48,6,12);
  192.                         sprintf((char*)buff,":%4dppm",m135_value);
  193.                         OLED_ShowString(64,6,buff,16);//显示M135数据
  194.                 }

  195.                 userHandle();                                        //用户数据采集
  196.                 gizwitsHandle((dataPoint_t *)¤tDataPoint);//机智云协议处理

  197.                 WIFI_Contection(key_value);//WiFi连接控制
  198.                 Canshu_Change(key_value);
  199.                
  200.                 t++;
  201.                 delay_ms(100);
  202.         }
  203. }

  204. void WIFI_Contection(u8 key)//WiFi连接控制
  205. {
  206.         if(key==4)
  207.         {
  208.                 printf("WIFI进入AirLink连接模式\r\n");
  209.                 gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link模式接入
  210.         }                        
  211.         if(key==1)
  212.         {  
  213.                
  214.                 printf("WIFI复位,请重新配置连接\r\n");
  215.                 gizwitsSetMode(WIFI_RESET_MODE);//WIFI复位
  216.         }
  217.         
  218. }

  219. void Canshu_Change(u8 key)
  220. {
  221.         u8 obj=7;
  222.         if(key==2)
  223.         {
  224.                 BEEP=0;
  225.                 OLED_Clear();
  226.                 while(1)
  227.                 {
  228.                         key = KEY_Scan(0);
  229.                         if(key==2)
  230.                         {
  231.                                 obj++;
  232.                                 if(obj>=8)
  233.                                 {
  234.                                         obj=0;
  235.                                 }
  236.                         }
  237.                         sprintf((char *)buff,"Working md:%4d",mode);
  238.                         OLED_ShowString(8,0,buff,12);
  239.                         sprintf((char *)buff,"A_Temp    :%4d",A_DHT11_Temp);
  240.                         OLED_ShowString(8,1,buff,12);
  241.                         sprintf((char *)buff,"A_Hum     :%4d",A_DHT11_Hum);
  242.                         OLED_ShowString(8,2,buff,12);
  243.                         sprintf((char *)buff,"A_pre     :%4d",A_pre);
  244.                         OLED_ShowString(8,3,buff,12);
  245.                         sprintf((char *)buff,"A_gz_val  :%4d",A_gz_value);
  246.                         OLED_ShowString(8,4,buff,12);
  247.                         sprintf((char *)buff,"A_m2_val  :%4d",A_m2_value);
  248.                         OLED_ShowString(8,5,buff,12);
  249.                         sprintf((char *)buff,"A_m7_val  :%4d",A_m7_value);
  250.                         OLED_ShowString(8,6,buff,12);
  251.                         sprintf((char *)buff,"A_m135_val:%4d",A_m135_value);
  252.                         OLED_ShowString(8,7,buff,12);
  253.                         if(obj==0)
  254.                         {
  255.                                 OLED_ShowString(0,0," ",12);
  256.                                 OLED_ShowString(0,1,">",12);
  257.                                 OLED_ShowString(0,2," ",12);
  258.                                 OLED_ShowString(0,3," ",12);
  259.                                 OLED_ShowString(0,4," ",12);
  260.                                 OLED_ShowString(0,5," ",12);
  261.                                 OLED_ShowString(0,6," ",12);
  262.                                 OLED_ShowString(0,7," ",12);
  263.                         }
  264.                         if(obj==1)
  265.                         {
  266.                                 OLED_ShowString(0,0," ",12);
  267.                                 OLED_ShowString(0,1," ",12);
  268.                                 OLED_ShowString(0,2,">",12);
  269.                                 OLED_ShowString(0,3," ",12);
  270.                                 OLED_ShowString(0,4," ",12);
  271.                                 OLED_ShowString(0,5," ",12);
  272.                                 OLED_ShowString(0,6," ",12);
  273.                                 OLED_ShowString(0,7," ",12);
  274.                         }
  275.                         if(obj==2)
  276.                         {
  277.                                 OLED_ShowString(0,0," ",12);
  278.                                 OLED_ShowString(0,1," ",12);
  279.                                 OLED_ShowString(0,2," ",12);
  280.                                 OLED_ShowString(0,3,">",12);
  281.                                 OLED_ShowString(0,4," ",12);
  282.                                 OLED_ShowString(0,5," ",12);
  283.                                 OLED_ShowString(0,6," ",12);
  284.                                 OLED_ShowString(0,7," ",12);
  285.                         }
  286.                         if(obj==3)
  287.                         {
  288.                                 OLED_ShowString(0,0," ",12);
  289.                                 OLED_ShowString(0,1," ",12);
  290.                                 OLED_ShowString(0,2," ",12);
  291.                                 OLED_ShowString(0,3," ",12);
  292.                                 OLED_ShowString(0,4,">",12);
  293.                                 OLED_ShowString(0,5," ",12);
  294.                                 OLED_ShowString(0,6," ",12);
  295.                                 OLED_ShowString(0,7," ",12);
  296.                         }
  297.                         if(obj==4)
  298.                         {
  299.                                 OLED_ShowString(0,0," ",12);
  300.                                 OLED_ShowString(0,1," ",12);
  301.                                 OLED_ShowString(0,2," ",12);
  302.                                 OLED_ShowString(0,3," ",12);
  303.                                 OLED_ShowString(0,4," ",12);
  304.                                 OLED_ShowString(0,5,">",12);
  305.                                 OLED_ShowString(0,6," ",12);
  306.                                 OLED_ShowString(0,7," ",12);
  307.                         }
  308.                         if(obj==5)
  309.                         {
  310.                                 OLED_ShowString(0,0," ",12);
  311.                                 OLED_ShowString(0,1," ",12);
  312.                                 OLED_ShowString(0,2," ",12);
  313.                                 OLED_ShowString(0,3," ",12);
  314.                                 OLED_ShowString(0,4," ",12);
  315.                                 OLED_ShowString(0,5," ",12);
  316.                                 OLED_ShowString(0,6,">",12);
  317.                                 OLED_ShowString(0,7," ",12);
  318.                         }
  319.                         if(obj==6)
  320.                         {
  321.                                 OLED_ShowString(0,0," ",12);
  322.                                 OLED_ShowString(0,1," ",12);
  323.                                 OLED_ShowString(0,2," ",12);
  324.                                 OLED_ShowString(0,3," ",12);
  325.                                 OLED_ShowString(0,4," ",12);
  326.                                 OLED_ShowString(0,5," ",12);
  327.                                 OLED_ShowString(0,6," ",12);
  328.                                 OLED_ShowString(0,7,">",12);
  329.                         }
  330.                         if(obj==7)
  331.                         {
  332.                                 OLED_ShowString(0,0,">",12);
  333.                                 OLED_ShowString(0,1," ",12);
  334.                                 OLED_ShowString(0,2," ",12);
  335.                                 OLED_ShowString(0,3," ",12);
  336.                                 OLED_ShowString(0,4," ",12);
  337.                                 OLED_ShowString(0,5," ",12);
  338.                                 OLED_ShowString(0,6," ",12);
  339.                                 OLED_ShowString(0,7," ",12);
  340.                         }
  341.                         if(obj==0)
  342.                         {
  343.                                 if(key==4)
  344.                                 {
  345.                                         A_DHT11_Temp+=1;
  346.                                 }
  347.                                 if(key==1)
  348.                                 {
  349.                                         A_DHT11_Temp-=1;
  350.                                 }
  351.                         }
  352.                         if(obj==1)
  353.                         {
  354.                                 if(key==4)
  355.                                 {
  356.                                         A_DHT11_Hum+=1;
  357.                                 }
  358.                                 if(key==1)
  359.                                 {
  360.                                         A_DHT11_Hum-=1;
  361.                                 }
  362.                         }
  363.                         if(obj==2)
  364.                         {
  365.                                 if(key==4)
  366.                                 {
  367.                                         A_pre+=20;
  368.                                 }
  369.                                 if(key==1)
  370.                                 {
  371.                                         A_pre-=20;
  372.                                 }
  373.                         }
  374.                         if(obj==3)
  375.                         {
  376.                                 if(key==4)
  377.                                 {
  378.                                         A_gz_value+=50;
  379.                                 }
  380.                                 if(key==1)
  381.                                 {
  382.                                         A_gz_value-=50;
  383.                                 }
  384.                         }
  385.                         if(obj==4)
  386.                         {
  387.                                 if(key==4)
  388.                                 {
  389.                                         A_m2_value+=50;
  390.                                 }
  391.                                 if(key==1)
  392.                                 {
  393.                                         A_m2_value-=50;
  394.                                 }
  395.                         }
  396.                         if(obj==5)
  397.                         {
  398.                                 if(key==4)
  399.                                 {
  400.                                         A_m7_value+=50;
  401.                                 }
  402.                                 if(key==1)
  403.                                 {
  404.                                         A_m7_value-=50;
  405.                                 }
  406.                         }
  407.                         if(obj==6)
  408.                         {
  409.                                 if(key==4)
  410.                                 {
  411.                                         A_m135_value+=50;
  412.                                 }
  413.                                 if(key==1)
  414.                                 {
  415.                                         A_m135_value-=50;
  416.                                 }
  417.                         }
  418.                         if(obj==7)
  419.                         {
  420.                                 if(key==4)
  421.                                 {
  422.                                         mode+=1;
  423.                                 }
  424.                                 if(key==1)
  425.                                 {
  426.                                         mode-=1;
  427.                                 }
  428.                         }
  429.                         if(key==3)
  430.                         {
  431.                                 STMFLASH_Write(FLASH_SAVE_ADDR+10,&A_DHT11_Temp,2);        //开机读取温度阈值
  432.                                 STMFLASH_Write(FLASH_SAVE_ADDR+12,&A_DHT11_Hum,2);        //开机读取湿度阈值
  433.                                 STMFLASH_Write(FLASH_SAVE_ADDR+14,&A_pre,2);                        //开机读取气压阈值
  434.                                 STMFLASH_Write(FLASH_SAVE_ADDR+18,&A_gz_value,2);        //开机读取光照强度阈值
  435.                                 STMFLASH_Write(FLASH_SAVE_ADDR+20,&A_m2_value,2);        //开机读取烟雾阈值
  436.                                 STMFLASH_Write(FLASH_SAVE_ADDR+22,&A_m7_value,2);        //开机读取一氧化碳阈值
  437.                                 STMFLASH_Write(FLASH_SAVE_ADDR+24,&A_m135_value,2);        //开机读取空气质量阈值
  438.                                 OLED_Clear();
  439.                                 break;
  440.                         }
  441.                
  442.                 }
  443.         }
  444. }

  445. void Get_Data(u16 count)//获取传感器数据
  446. {
  447.         static float bmp280_press,bmp280;                                //气压
  448.         
  449.         DHT11_Read_Data(&DHT11_Temp,&DHT11_Hum);
  450. ……………………

  451. …………限于本文篇幅 余下代码请从edaboss下载附件…………
复制代码


程序源码.7z

292.51 KB, 下载次数: 0, 下载积分: E币 -5 元

智能家居.pdf

260.93 KB, 下载次数: 0, 下载积分: E币 -5 元

积分规则
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-16 13:46 , Processed in 0.042957 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表