收藏官网首页
查看: 538467|回复: 660

【GoKit+STM32】 之智能家居云控制套件

 

3

主题

11

帖子

134

积分

注册会员

Rank: 2

积分
134
跳转到指定楼层
#
发表于 2016-8-17 01:18:04 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
免费使用STM32、APP自动代码生成工具
本帖最后由 Genius 于 2016-9-2 11:30 编辑

机智云智能硬件创新大赛作品

希望大家多多支持!
项目名称:【gokit+STM32】之智能家居云控制套件
作品适用环境:适用类似于学生宿舍这种小型住宅,套件中的小模块可直接替换住宅中86盒子面板,嵌入到墙壁内,不破坏原来的环境。智能网关与家中路由配对后就可持续工作,使整个套件一直处于联网状态,用户可轻松感知家里的状态和控制家中的已配对电器。

需要用到的材料:
1.TFT串口屏  X1
2.STM32F103ZET6单片机  X1
3.汉枫LPB100wifi模块  X1
4.NRF24L01无线通讯模块 X6
5.AMS1117-3.3 AMS1117-5.0稳压芯片若干
6.电阻、电容、led、导线若干
7. 220V-7.2V稳压电源  X1
8. STC15W408AS 单片机 X4
9.五脚继电器  X5
10. MP3模块 X1
11. 红外发射管 X4
12.86型开关面板、底盒  X3
13.干簧管 X1
14 3.3V锂电池  X1
15.220V白炽灯 X1  

软件开发环境:
KEIL5 MDK
KEIL4 C51

1.总体方案设计
       智能家居云控制套件最终要实现可以在手机应用程序上远程控制家里的电灯、插座、红外遥控电器的开关以及他们的定时时间,也可以在住宅内的智能网关控制系统上,通过网关携带的图形化人机交互界面设置电灯控制模块、插座控制模块、红外电器遥控模块、门窗开合警报模块、语音模块的所有功能以及监控来自云端的实时遥控命令。
       因为采用了“机智云”的物联网技术方案,使手机应用程序端能与智能网关保持快速数据通信。智能网关是整个设计的核心,能起到承上启下的作用,所以设计了STM32主控芯片、高清彩色触控屏、WIFI模块加双发无线通信模块这一方案。STM32主控芯片负责处理来自WIFI模块、触控屏和无线通信模块的数据,并把数据重新打包分发出去,触控屏独立负责人机交互界面,WiFi模块负责与路由器通信,两个无线通信模块负责与下属的子模块进行数据交互。电灯控制模块负责实际开关电灯,插座控制模块负责实际通断插座电源,红外电器遥控模块负责操控红外遥控的电器,门窗开合警报模块负责检测门窗的状态,语音模块负责提供语音警报和播放歌曲,所有的子模块均与智能网关保持无线通信,除门窗开合警报模块外均由220伏市电提供电源
          所以整个智能家居云控制套件分为手机控制端、智能网关控制器、电灯控制模块、插座控制模块、红外电器遥控模块、门窗开合警报模块、语音模块七部分

1.1智能网关控制器
    智能网关控制器是整个设计的重点,它在本设计中起到数据汇集、承上启下的作用。智能网关需要通过WIFI模块接收来自云端的控制命令,然后发送到MCU上,MCU更新数据库和做出相应的处理后再根据不同的协议把控制指令通过无线通信模块发送到子模块上。智能网关同时还要接收子模块、触控屏和时钟芯片的数据,MCU对数据进行相应的逻辑处理后再发送到云端或临时保存起来。

1.2电灯控制模块
电灯控制模块的功能是通过无线通信模块接收来自智能网关的电灯控制指令,通过MCU对控制指令进行处理分析,MCU根据得到的结果再去控制继电器的通断来控制电灯,MCU还要根据接收控制信号指示灯的状态。最后还要防止继电器的电压对MCU产生干扰。

1.3插座控制模块
    智能网关把插座信息的控制指令发出后,插座的无线通信模块就会接收到数据并把数据发到MCU上进行处理分析。MCU根据得到的结果再去控制继电器的通断来控制插座电源,MCU还要控制信号指示灯的状态。最后还要对继电器的信号进行光电隔离。在考虑插座模块的具体应用场景后,还要为模块设定独立的电源开关,使用户在插座模块上也能控制电源通断。

1.4红外电器遥控模块
    红外电器遥控模块的主要功能是通过无线通信模块接收来自智能网关的遥控指令,MCU把收到的遥控指令进行解释重组后通过红外发射模块把遥控指令转发出去,进而控制空调、电视等。MCU还要根据通信状态控制信号指示灯。

1.5门窗开合警报模块
    门窗开合警报模块的主要功能是用模块上的干簧管检测门窗的开合状态,然后用无线通信模块把信号发送给智能网关进行处理。还要根据门的状态用MCU控制信号指示灯的颜色。最后要为粘贴在门窗上的警报模块选择合适的供电方案。

1.6语音模块
    语音模块的主要功能是用无线通信模块接收来自智能网关的语音控制指令,MCU把收到的遥控指令进行解释重组后控制警报发生器做出反应。使警报发生器发出声音,起到阻吓贼人的作用。

浏览器复制打开:http://v.youku.com/v_show/id_XMT ...
智能家居云控制套件视频演示:
http://player.youku.com/player.php/sid/XMTU3NTcyNzA4OA==/v.swf



回帖可见相关源码:
游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

  • · dzv|主题: 1, 订阅: 0

6

主题

33

帖子

1396

积分

金牌会员

Rank: 6Rank: 6

积分
1396
推荐
发表于 2016-9-9 09:36:08 | 只看该作者

mark,鼓励开源,期待楼主跟新

3

主题

11

帖子

134

积分

注册会员

Rank: 2

积分
134
推荐
 楼主| 发表于 2016-8-20 22:08:53 | 只看该作者
4.智能家居云控制系统的软件设计
    智能家居云控制套件由七个独立的小系统组成,他们之间通过无线通信的方式组成一个大系统。把七个小系统的电源接通后,小系统之间的通信模块就会自动握手连通,智能家居云控制系统正式进入运行状态。智能网关上电后就与WiFi模块保持心跳通信,STM32每隔一段时间都把自己的状态通过WiFi模块上传到云端上,然后从云端把手机控制端的数据点下载下来保存到STM32的数据库中。STM32还要与串口HMI保持通信,每个程序周期内要都把STM32的数据库通过串口的方式更新到HMI中,用以保持人界界面数据的实时性。同时还要检测用户有没有操控人机界面,一旦检测到数据变化就把人机界面的数据更新到STM32的数据库。STM32 还要读取DS1302时钟模块中的时间。STM32通过以上通信把数据保存到数据库中后就将这些数据进行整合分析,判断是否有开关灯、播放音乐、定时的控制指令。运算结束后就会把这些控制指令从新打包放到发送数据库中,通过发射模式的无线通信模块广播出去。插座、红外、电灯等模块接收到来自智能网关的数据包后就会根据通信协议提取出自己那部分的数据,然后保存到各自的数据库中。子模块会一直检测数据库中的控制指令参数是否改变,一旦有数据改变,就会执行动作,控制电灯点亮、空调调温、切换歌曲等。而门窗开合警报模块会一直向智能网关发送门窗的状态。

4.1 HF-PB100 WiFi模组通信协议
WiFi模组与STM32是以9600波特率、8个数据位的方式进行串口通信。他们之间需要传输请求设备信息、WiFi模组与设备MCU的心跳、重置WiFi模组、请求重启MCU、读取设备的当前状态、组控制设备等复杂的命令。而串口通信每次只能传输一个字节,要想实现复杂的控制功能就要设计出稳定可靠的通信协议。现约定以下通信格式:
header(2B)=0xFFFF, len(2B), cmd(1B), sn(1B), flags(2B), payload(xB), checksum(1B)
上述协议中,通信协议的包头固定为0xFFFF,用来标记数据包的起始位置。Len是数据包的长度,它记录着命令开始到校验和之间的字节长度。cmd是数据包的命令类型,如:0X01表示WiFi模组请求设备信息,0X09表示设备MCU通知WiFi模组进入配置模式……。Sn是消息的序列号,发送方发出后,接收方应答时要返回。Checksum是检验和,本协议的校验方式是对数据包的长度位按字节开始求和,把得到的结果对256进行求余运算。对数据包命令进行分类处理的函数为:

  1. /*****************************************************
  2. * Function Name  : MessageHandle
  3. * Description    : 串口有数据发生了,先检查数据是否合法,再解析数据帧,做相应处理
  4. * Input          : None
  5. * Output         : None
  6. * Return         : None
  7. * Attention                   : None
  8. *****************************************************/
  9. void MessageHandle(void)
  10. {
  11.         Pro_HeadPartTypeDef   Recv_HeadPart;
  12.         memset(&Recv_HeadPart, 0, sizeof(Recv_HeadPart));  //初始化结构体Recv_HeadPart        memset(&UART_HandleStruct.Message_Buf, 0, sizeof(16));  //Message_Buf为数组缓冲区
  13.         if(UART_HandleStruct.Package_Flag) //接收到完成串口数据包标志位
  14.         {
  15.                
  16.         UART_HandleStruct.Message_Len = UART_HandleStruct.UART_Cmd_len + 4;       
  17.         memcpy(&UART_HandleStruct.Message_Buf, UART_HandleStruct.UART_Buf,
  18.                UART_HandleStruct.Message_Len );                       
  19.        memcpy(&Recv_HeadPart, UART_HandleStruct.Message_Buf, sizeof(Recv_HeadPart));                memset(&UART_HandleStruct.UART_Buf, 0, sizeof(UART_HandleStruct.Message_Buf));               
  20.         UART_HandleStruct.Package_Flag = 0; //完整串口数组接收标志位清零
  21.         UART_HandleStruct.UART_Count = 0;
  22.                
  23.         if(CheckSum(UART_HandleStruct.Message_Buf, UART_HandleStruct.Message_Len) !=
  24.          UART_HandleStruct.Message_Buf[UART_HandleStruct.Message_Len - 1]) //检验和
  25.                 {
  26.                         Pro_W2D_ErrorCmdHandle();  //WIFI非法通知,MCU返回
  27.                         return ;               
  28.                 }
  29.                 switch (Recv_HeadPart.Cmd)  //Cmd, 串口命令分类处理
  30.                 {
  31.                         case Pro_W2D_GetDeviceInfo_Cmd: //0x01,wifi模组请求MCU信息
  32.                                 Pro_W2D_GetMcuInfo();   //mcu返回设备信息
  33.                                 break;
  34.                         case Pro_W2D_P0_Cmd:  //0x03,wifi模块下发的控制命令
  35.                                 Pro_W2D_P0CmdHandle();                 
  36.                                 break;
  37.                         case Pro_W2D_Heartbeat_Cmd:        //0x07,WIFI模块发送的 心跳                                               
  38.                                 Pro_W2D_CommonCmdHandle();
  39.                                 printf("Pro_W2D_Heartbeat ...\r\n");       
  40.                                 break;                                               
  41.                         case Pro_W2D_ReportWifiStatus_Cmd: //0x0d,WiFi状态变化通知
  42.                                 Pro_D2W_ReportDevStatusHandle(); //返回MCU设备各个状态变量
  43.                                 break;
  44.                         case Pro_W2D_ErrorPackage_Cmd:   //0x11,非法通知
  45.                                 Pro_W2D_ErrorCmdHandle();   // WiFi发送收到非法信息通知,
  46.                                 break;
  47.                         default:
  48.                                 break;
  49.                 }       
  50.         }
  51.                
  52. }       
复制代码

给设备发送命令的处理函数:

  1. *****************************************************
  2. * Function Name  : Pro_W2D_Control_DevceHandle
  3. * Description    : WiFi 使用P0协议给设备发送命令处理函数
  4. * Input          : uint8_t *Buf:接收到的指令
  5. * Output         : None
  6. * Return         : None
  7. * Attention                   : None
  8. *****************************************************/
  9. extern uint8_t Switch_Sta;
  10. extern u8 tmp_buf[30];
  11. void Pro_W2D_Control_DevceHandle(void)
  12. {
  13.         Pro_P0_ControlTypeDef      Pro_P0_ControlStruct;  //4WiFi模组控制设备
  14.         Pro_W2D_CommonCmdHandle();
  15.         memcpy(&Pro_P0_ControlStruct, UART_HandleStruct.Message_Buf,
  16.                sizeof(Pro_P0_ControlStruct));
  17.         switch (Pro_P0_ControlStruct.Attr_Flags1)
  18.         {
  19.                 case Socket_Power: //0x01 插座开关信号
  20.                   if(Pro_P0_ControlStruct.Device_Wirte.Power_Switch==0x01)   //
  21.                   {tmp_buf[8]=1;}      //把单独的位信号,放入自己定义的寄存器Switch_Sta中,                        else                                                                                      {tmp_buf[8]=0;}                        
  22.                         break;                       
  23.                 case Socket_Timing:         //0x02 插座定时器开关信号                               
  24.                   if(Pro_P0_ControlStruct.Device_Wirte.Power_Switch==0x02)
  25.                   {tmp_buf[5]=1;}
  26.                   else
  27.                  {tmp_buf[5]=0;}
  28.                  break;
  29.                 case Lamp_Power:    //0x04 电灯开关信号
  30.                   if(Pro_P0_ControlStruct.Device_Wirte.Power_Switch==0x04)
  31.                   {        tmp_buf[12]=1;}
  32.                         else
  33.                         {        tmp_buf[12]=0;}
  34.                         Device_WirteStruct.Power_Switch = Switch_Sta ;
  35.                         break;
  36.                 case Lamp_Timing: //0x08  电灯定时器开关信号
  37.                   if(Pro_P0_ControlStruct.Device_Wirte.Power_Switch==0x08)
  38.                   {tmp_buf[9]=1;}
  39.                         else
  40.                         {tmp_buf[9]=0;}
  41.                         Device_WirteStruct.Power_Switch = Switch_Sta ;
  42.         break;
  43.                 case Gree_Power:  //0x10 格力空调开关
  44.                   if(Pro_P0_ControlStruct.Device_Wirte.Power_Switch==0x10)
  45.                   { tmp_buf[17]=1; }
  46.                         else
  47.                   { tmp_buf[17]=0;}
  48.                         Device_WirteStruct.Power_Switch = Switch_Sta ;
  49.                        
  50.                         break;/******/
  51.                        
  52.                 case Socket_Hour: //0x20 插座定时器时数据
  53.          Device_WirteStruct.Socket_Hour = Pro_P0_ControlStruct.Device_Wirte.Socket_Hour;
  54.          tmp_buf[6]=Pro_P0_ControlStruct.Device_Wirte.Socket_Hour;
  55.                         break;
  56.                case Socket_Minute: //0x40 插座定时器分数据
  57.         Device_WirteStruct.Socket_Minute = Pro_P0_ControlStruct.Device_Wirte.Socket_Minute;
  58.        tmp_buf[7]=Pro_P0_ControlStruct.Device_Wirte.Socket_Minute;
  59.                         break;
  60.                 case Lamp_Hour: //0x80  电灯定时器时数据
  61.         Device_WirteStruct.Lamp_Hour = Pro_P0_ControlStruct.Device_Wirte.Lamp_Hour;
  62.         tmp_buf[10]=Pro_P0_ControlStruct.Device_Wirte.Lamp_Hour;
  63.                         break;
  64.        
  65. /*************************添加更多可写设备*******************************/


  66. /******************************************************************/                               
  67.                 default:
  68.                         break;
  69.         }
  70.         switch (Pro_P0_ControlStruct.Attr_Flags2)
  71.         {
  72.                 case Lamp_Minute: //0x01 电灯定时器分数据
  73.                 Device_WirteStruct.Lamp_Minute = Pro_P0_ControlStruct.Device_Wirte.Lamp_Minute ;
  74.                   tmp_buf[11]=Pro_P0_ControlStruct.Device_Wirte.Lamp_Minute ;
  75.                         break;                       
  76.                 case Gree_Temp:         //0x02 格力空调温度值
  77.                Device_WirteStruct.Gree_Temp = Pro_P0_ControlStruct.Device_Wirte.Gree_Temp ;
  78.                   tmp_buf[18]=Pro_P0_ControlStruct.Device_Wirte.Gree_Temp;
  79.                         break;
  80.                 default:
  81.                         break;
  82.         }
  83.         Pro_D2W_ReportDevStatusHandle();
  84.         memset(&Pro_P0_ControlStruct, 0, sizeof(Pro_P0_ControlStruct));
  85. }
复制代码






0

主题

4

帖子

31

积分

新手上路

Rank: 1

积分
31
658#
发表于 2024-8-29 16:26:48 | 只看该作者
鼓励开源,期待楼主跟新

1

主题

10

帖子

206

积分

中级会员

Rank: 3Rank: 3

积分
206
657#
发表于 2024-5-1 17:25:53 | 只看该作者
校园创客福利
看看ffffffffffffffffffffffffffffffff

0

主题

1

帖子

122

积分

注册会员

Rank: 2

积分
122
656#
发表于 2024-3-25 18:13:37 | 只看该作者

mark,鼓励开源,期待楼主跟新

0

主题

7

帖子

91

积分

注册会员

Rank: 2

积分
91
653#
发表于 2023-12-21 15:21:12 | 只看该作者
厉害!学习了!

0

主题

7

帖子

91

积分

注册会员

Rank: 2

积分
91
652#
发表于 2023-12-21 15:20:23 | 只看该作者
教您5分钟接入机智云,实现傻瓜式开发
厉害!学习了!!!!!!!!!!!!!

0

主题

5

帖子

41

积分

新手上路

Rank: 1

积分
41
651#
发表于 2023-11-4 16:19:10 | 只看该作者
你好我想要智能家居控制套件

0

主题

1

帖子

32

积分

新手上路

Rank: 1

积分
32
650#
发表于 2023-10-29 14:54:25 | 只看该作者
怎么可以下载这个文件阿,求解

0

主题

1

帖子

29

积分

新手上路

Rank: 1

积分
29
648#
发表于 2023-4-30 15:20:14 | 只看该作者
期待,希望楼主有更新与开源

0

主题

1

帖子

11

积分

新手上路

Rank: 1

积分
11
646#
发表于 2023-4-7 20:41:51 | 只看该作者
向大佬看齐,向大佬学习

0

主题

1

帖子

33

积分

新手上路

Rank: 1

积分
33
645#
发表于 2023-4-7 11:18:44 | 只看该作者
作者好厉害

0

主题

3

帖子

35

积分

新手上路

Rank: 1

积分
35
644#
发表于 2023-3-11 17:43:31 | 只看该作者
xuexi
xuexi
xuexile

0

主题

2

帖子

45

积分

新手上路

Rank: 1

积分
45
643#
发表于 2023-3-10 09:52:04 | 只看该作者
工程文件的原理图能发上来吗,那个原理图太零散了 不好理解

0

主题

2

帖子

45

积分

新手上路

Rank: 1

积分
45
642#
发表于 2023-3-10 09:30:53 | 只看该作者
注册成为机智云开发者,手机加虚拟设备快速开发
好资料,学习学习了

0

主题

1

帖子

17

积分

新手上路

Rank: 1

积分
17
641#
发表于 2023-3-8 15:10:36 | 只看该作者
感谢开源,共同学习

0

主题

7

帖子

45

积分

新手上路

Rank: 1

积分
45
640#
发表于 2023-1-28 14:15:57 | 只看该作者
感谢楼主,学习学习

0

主题

7

帖子

45

积分

新手上路

Rank: 1

积分
45
639#
发表于 2023-1-28 14:14:57 | 只看该作者
感谢楼主付出,学习一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

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