找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 1383|回复: 4
打印 上一主题 下一主题
收起左侧

基于STM32单片机的智能家居监控系统程序

[复制链接]
跳转到指定楼层
楼主
ID:1129756 发表于 2024-7-29 12:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  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) //当按键1按下,进入阈值设置界面
  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; //进行温度阈值修改
  62.                                 Humidity_Flag = 0;
  63.                                 Lux_Flag = 0;
  64.                  }
  65.                  else if(KeyValue == 2) //当按键2按下
  66.                  {  
  67.                  }
  68.            else if(KeyValue == 3) //当按键3按下
  69.                  {
  70.                  }
  71.                  else if(KeyValue == 4) //当按键4按下
  72.                  {
  73.                  }
  74. //----------------------------------- Smart Home主界面 END -----------------------------------
  75. //----------------------------------- 阈值设置界面 BEGIN -----------------------------------
  76.                  while(ParaSet_Flag == 1)
  77.                  {
  78.                                 KeyValue = Key_Scan();
  79.                           if(KeyValue == 1) //当按键1按下,退出阈值设置界面
  80.                                 {
  81.                                         ParaSet_Flag = 0;
  82.                                         OLED_Clear();
  83.                                         OLED_ShowString(0,0,"Smart Home",16);
  84.                                 }
  85.                                 else if(KeyValue == 2) //当按键2按下,上下移动选择需要设置的阈值
  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;//进行湿度阈值修改
  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;        //进行光照阈值修改
  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;//进行温度阈值修改
  113.                                                 Humidity_Flag = 0;
  114.                                                 Lux_Flag = 0;       
  115.                                         }
  116.                                        
  117.                                 }
  118.                                 else if(KeyValue == 3) //当按键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) //当按键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. //----------------------------------- 阈值设置界面 END -----------------------------------
  172. //----------------------------------- 自动控制界面 BEGIN ---------------------------------
  173.                                                          
  174. //----------------------------------- 自动控制界面 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. }
复制代码

原理图: 无
仿真: 无
代码: STM32_Iot_OK.7z (188.33 KB, 下载次数: 22)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

举报

沙发
ID:1129756 发表于 2024-7-29 12:44 | 只看该作者
(1)基本功能   实现温湿度、光照的数据采集并上传至云平台   可以通过按键和APP对相关设备进行自动或手动控制;   数据在OLED屏幕以及APP显示
回复

举报

板凳
ID:1129756 发表于 2024-7-29 12:45 | 只看该作者
涉及知识储备:
1. C语言语法
2. STM32F1标准库的使用,GPIO、USART、TIMER、I2C
3. ESP8266-01S (重点)
4. MQTT协议(重点)
5. 云平台(重点)
回复

举报

地板
ID:1129756 发表于 2024-7-29 12:45 | 只看该作者
元器件清单
1、面包板
2、STM32F103C8T6最小系统
3、杜邦线
4、ESP8266-01S
5、按键
6、OLED屏
7、USB-TTL(CH340)模块

软件:
1、Keil
2、串口调试助手
回复

举报

5#
ID:1129756 发表于 2024-7-29 12:45 | 只看该作者
目标:
1、移植OLED驱动代码(I2C为例)
2、实现一个按键循环切换3个页面
目标:
1、创建4个文件,KEY.c  KEY.h  LED.c  LED.h
2、实现按键通过点亮STM32F103C8T6的PC13 LED

回复

举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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