# ai家智能家居 **Repository Path**: minjx/server_A10 ## Basic Information - **Project Name**: ai家智能家居 - **Description**: ai家智能家居,智能家居平台 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2024-04-26 - **Last Updated**: 2024-04-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目概述 ## 项目背景 随着科技的高速发展,智能家居成为越来越热门的话题,正在渐渐成为时代潮流,也正在成为了越来越多人的日常需求。许多科技厂商在这一领域正在展开激烈竞争。智能家居是物联网应用中的朝阳产业,家居生活正在不断走向智能化。在消费升级的趋势下,智能家居市场正呈现出勃勃生机的景象。在政策支持、人工智能与IoT技术发展、消费升级等诸多利好因素的影响下,智能音箱、智能锁等智能家居细分品类蓬勃发展,单品优化趋势下的智能家居数据价值凸显。 各智能家居已经成为战略新兴产业重点应用,行业的标准体系正在建立当中。居民的消费能力不断提高,城镇化水平也在提高,大量住房为智能家居市场创造了巨大需求。但是,目前消费者对智能家居的认知程度受限。这成为目前行业发展的一个阻力因素。同时,家居智能化消费较高,对于大多数家庭仍然是一笔不小的开销。开发者们正在不断提升关键技术,让其与智能家居产业化应用相互促进,使智能家居越来越普及。 ## 项目简介 项目名称为爱家智能家居远程控制系统。系统主要分为用户控制系统和管理员后台管理系统两个子系统。用户控制系统有APP端和网页端,拥有智能安防,智慧照明,智能暖通,实时监控等四个场景;管理员后台管理系统可以实现用户信息、房屋信息、房间信息和设备信息等的增、删、改、查功能。 ## 项目目标 根据用户期望,该项目的目标是设计并开发一款智能家居远程控制APP,实现对房间内各类智能家居设备(例如灯、空调、门锁等)的远程开关和调整,从而为用户带来更加智能和便利的生活。为了达成该目标,项目团队将从以下几个方面入手: (1) 设计智能家居网关,用来连接各种设备,组成智能家居网络。 (2) 提升用户体验感,尽可能满足用户的需求。同时,也要让用户可以灵活的接入家居,实现系统功能的可扩展性。用户不仅可以单独操控房屋内的单独区域,也实现多区域部分家居一键操控功能。 (3) 实现家庭成员协同控制房屋。用户不光可以控制自己的房屋,也可以关联家人的房屋。对于老人和子女分开住的家庭尤为合适,可以随时随地帮助到老人。让科技为爱赋能。 (4) 提高系统的通用性。目标系统不光适用于住户家庭,也适用于学校,工厂,公司等多个场景,实现管理的智能化,提高生产效率,同时降低发生火灾等灾难的可能性,提高安全性。 (5) 增加系统的可维护性。设计后台管理系统,让管理人员第一时间内可以为用户服务。当用户遇到问题时,管理人员有一个很好的平台可以快速地为用户解决问题,提升产品信用度,提升用户体验感。 # 总体功能设计 本系统主要分为智能安防、智能照明、智能暖通、实时监控四个功能模块。智能安防基于智能门锁以及居家摄像头实现;智能照明和智能暖通基于智能网关以及部署设备实现;实时监控房间内空气质量、盆栽土壤湿度、功率检测等,实时更新。总体功能结构图如图2.1所示。 ![](assets/296a1a76c9232cc5b4a18388b66bb89a.png) 图 2.1 总体功能图 ## 智能安全系统 智能安全系统是智能家居系统的一个重要组成部分,包括安防系统和火警系统两个子模块。其中,安防系统可以实现实时监控和远程开锁,而火警系统可以实现火灾预警的实时监控和危险警报功能。 安防系统是智能家居系统的一个关键部分,可以通过监控摄像头实时监控家庭安全状况,如入侵、盗窃等行为。同时,安防系统还可以通过远程控制门锁,实现远程开锁功能,方便用户进行远程控制和管理。 火警系统是智能家居系统中另一个重要的安全子模块,可以通过火灾探测器实时监测家庭火灾情况,发现火灾时立即发出声光警报并向用户发送警报信息,以便及时采取应对措施。此外,火警系统还可以监测一些其他危险情况,如气体泄漏等,及时警报用户并采取相应的措施。 总的来说,智能安全系统可以为用户提供安全保障,及时发现家庭安全和火灾等危险情况,提高家庭安全性和安全感。同时,通过远程控制和监测,也方便用户管理和控制家庭安全,提升生活便利度。 ## 智能照明系统 智能照明系统是智能家居系统的一个重要组成部分,可以实现对家庭灯光的智能化控制和管理。除了基本的一键开关外,智能照明系统还可以实现更多的智能化控制功能,例如分区一键开关、操控单个灯光等功能。 分区一键开关是指可以通过智能设备实现对家庭灯光的分区控制,例如将客厅和卧室的灯光分成两个区域,用户可以通过智能手机或语音助手实现单独或同时控制不同区域的灯光开关。 操控单个灯光功能是指用户可以通过智能手机或语音助手实现对单个灯光的开关、亮度和颜色等参数的调节。这个功能可以让用户更加精细地控制家庭灯光,满足不同需求的个性化调节。 总的来说,智能照明系统的多种智能化控制功能可以让用户更加方便地控制家庭灯光,提高家庭生活的品质和舒适度。同时,这些功能也可以帮助用户节省能源,达到节能环保的目的。 ## 智能暖通系统 智能暖通系统是智能家居系统的一个重要组成部分,可以实现对家庭暖通设备的智能化控制和管理,其中包括空调的一键开关、空调的分区一键开关、以及控制单个设备的功能,包括调节风速、调节温度、控制模式等。 空调的一键开关功能是指用户可以通过智能设备实现对整个空调系统的开关控制。这个功能可以让用户在不同场景和时间段快速打开或关闭空调系统,提高家居生活的便捷性。 空调的分区一键开关功能是指可以通过智能设备实现对家庭空调系统的分区控制,例如将客厅和卧室的空调分成两个区域,用户可以通过智能手机或语音助手实现单独或同时控制不同区域的空调开关。 控制单个设备的功能是指用户可以通过智能手机或语音助手实现对单个空调设备的风速、温度和模式等参数进行调节。这个功能可以让用户更加精细地控制家庭空调系统,满足不同需求的个性化调节。 总的来说,智能暖通系统的多种智能化控制功能可以让用户更加方便地控制家庭暖通设备,提高家庭生活的品质和舒适度。同时,这些功能也可以帮助用户节省能源,达到节能环保的目的。 ## 实时监控系统 实时监控系统是一种智能化的监控系统,由多个子模块组成,包括花园管理、电力监控、温湿度检测等。其中,花园管理子模块包括浇灌、土壤湿度检测等功能,电力监控子模块包括实施电力监控,温湿度检测子模块包括温度检测、湿度检测等功能。 花园管理子模块的浇灌功能可以自动控制花园的浇水,根据土壤湿度情况进行浇水,从而保证花园植物的生长和健康。土壤湿度检测功能可以实时监测花园土壤湿度的情况,根据设定的参数自动调节浇水量,达到节约用水的效果。 电力监控子模块可以实时监测家庭用电情况,包括功率、电流、电压等参数,从而帮助用户了解家庭用电情况以及用电的成本情况。在发现异常情况时,系统可以及时报警提醒用户进行处理,确保家庭用电的安全和稳定。 温湿度检测子模块可以实时监测家庭环境的温度和湿度情况,可以通过智能设备实现远程监控和控制,从而帮助用户调节家庭环境的舒适度和健康程度。 总的来说,实时监控系统的多个子模块可以帮助用户实现智能化的监控和管理,从而提高家庭生活的品质和便捷性。同时,这些功能也可以帮助用户节省资源、减少浪费,达到节能环保的目的 # 详细设计 ## 总体架构 本项目的流程大致分为五个模块。传感器实时监测产生实时数据,主机网关通过MQTT服务器将实时数据发送至后端。由服务器负责用户前端的数据通信。同时,对于用户控制信息,通过后端进行筛选过滤,并通过MQTT服务器发送至设备,实现远程控制。总体架构图如图3.1所示。 图 3.1 总体架构图 客户端通过HTTP协议与智能中心交换数据信息,包括获取房间设备信息状态以及发送控制信息;智能控制中心综合当前设备情况和控制信息通过MQTT服务发送控制信息,智能设备通过智能网关接受信息解析实现远程控制;智能设备通过网关通过MQTT服务器发送当前状态至智能控制中心。如图3.2所示。 图 3.2 整体信息流向图 ## 硬件系统设计 基于用户期望,团队使用Arduino Mega实现对于多种传感器的控制;但由于Arduino Mega并没还有无线通信的功能,使用ESP8266作为网关。同时,使用ESP32-CAM完成实时摄像头。 ### 3.2.1 相关硬件简介 **Arduino MEGA** ![](assets/00e2fcb490379e4682bf833a62073b21.jpeg) 图 3.3 ARDUINO MEGA引脚说明图 Arduino Mega 是一款基于ATmega2560的开发板。它是为较为复杂的ARDUINO开发项目而设计的。它有54个数字输入/输出引脚(其中有15个引脚可用于PWM输出),16个模拟输出引脚,4个USART硬件串行接口,16 MHz晶振,1个USB接口,1个电源接口,支持在线串行编程以及复位按键。引脚说明如图3.3所示。Arduino Mega主要技术参数如表3.1所示。 表 3.1 Arduino Mega主要技术参数 | 微控制器 | ATmega2560 | | ---------------- | ---------- | | 工作电压 | 5伏特 | | 输入电压(推荐) | 7-12伏特 | | 输入电压(限值) | 6-20伏特 | | 数字输入输出引脚 | 54个 | | 模拟输入引脚 | 16个 | | 输入/输出引脚直流电流 | 20 毫安 | | Flash Memory(闪存) | 256 KB | | SRAM(静态存储器) | 8 KB | | EEPROM | 4 KB | | 内置LED引脚 | 13 | | 长 | 101 mm | | 宽 | 53 mm | | 重 | 37克 | | 时钟频率 | 16 MHz | ** ** **ESP8266-NodeMCU** ![](assets/399e91f163baf940dcad5ec40c877311.png) 图 3.4 ESP8266引脚功能图 ESP8266-NodeMCU是一个开源硬件开发板,对比图3.3和图3.4,可以发现,它的功能引脚远没有Arduino Mega丰富,但与Arduino Mega相比最大的优势就是支持WIFI功能。它的主要参数如表3.2所示。 表 3.2 ESP8266-NodeMCU主要参数表 | 核心模块 | ESP8266 | | -------- | ------------------- | | 工作电压 | 5伏特 | | 输入电压(推荐) | 5伏特 | | 输入电压(极限) | 4.5 ~ 10 伏特 | | 数字输入输出引脚 | 10个 | | PWM引脚 | 10个 | | 模拟输入引脚 | 1个 | | WIFI标准 | 802.11 b / g / n | | 工作模式 | STA / AP / STA + AP | | 重量 | 7g | 基于用户期望和团队讨论,针对灯源开关、空调控制、温湿度检测等要求 使用传感器如表3.3所示。 表 3.3 传感器列表 | 序号 | 传感器 | 功能 | | --- | ------------------------------- | ---------------------------- | | 1 | 烟雾传感器MQ2 | 监测试房间内空气中液化气、苯、烷、酒精、氢气、烟雾等浓度 | | 2 | 土壤湿度传感器YL-69 | 监测盆栽土壤湿度 | | 3 | 电流传感器ACS712 | 检测当前电流 | | 4 | 继电器模块Relay Module | 用于控制灯、水泵的开关, | | 5 | 红外发射模块Infrared emissions Module | 向空调发射红外控制信号 | | 6 | 蜂鸣器 | 在温度或烟雾浓度超过阈值报警 | | 7 | 温湿度传感器DHT11 | 检测房间内温度和湿度 | 各传感器图片如图3.5至3.10所示。 ![](assets/2196d567967401f9af17dae76dafcb9d.png) 图 3.5 烟雾传感器MQ2 ![](assets/1362b0c66f939f0a9e5af42d8d921a62.png) 图 3.6 土壤湿度传感器YL-69 ![](assets/0922c270aaae50f8ab550edca8902c78.png) 图 3.7 电流传感器ACS712 ![](assets/0a3d3f1f1c31eec6d5ef4566ce68dccf.jpeg) 图 3.8 电磁继电器模块Relay Module ![](assets/aa93715cd6abdada989cadd7e93f5ca8.png) 图 3.9 红外发射模块Infrared emissions Module ![](assets/5cc95a519d418be586086016cc2f35ce.png) 图 3.10 温湿度传感器DHT11 ![](assets/2e2442d1b396eca71331ee7501d3f679.png) 图 3.11 蜂鸣器 ** ESP32-CAM** ![](assets/017f22b9a2daf87b333878698174d587.png) 图 3.12 ESP32-CAM功能引脚图 ESP32-CAM是一款集成了ESP32和摄像头的开发板,它可以通过WIFI连接到网络,并提供了基于网络的视频流传输能力。它可以广泛应用于物联网、家庭自动化、安防监控等领域。正是由于它集成摄像头模块,所以可以使用其作为智能家居中的摄像头部分。其引脚功能图如图3.12所示。 采用OV2640摄像头与ESP32-CAM相连。OV2640是一款常用于嵌入式设备的低成本摄像头,其分辨率可达到200W像素。使用ESP32的WIFI模块将采集到的图像数据传输到云端或其他设备,实现远程监控和数据处理等功能。 ### 3.2.2 技术要点 **(1) 网关设计** 由硬件简介可知,Arduino Mega并没有无线通信功能,但是它具有很多类型引脚,可以满足大量传感器的要求。而ESP8266具有WIFI功能,所以使用ESP8266作为WIFI模块,接收控制中心控制信息。 对于ESP8266与智能控制中心传输协议的选择,选择使用MQTT协议。与HTTP之类的协议相比,MQTT在通过网络传输数据时表现出众。该协议的另一个重要特点是易于在客户端实现。同时,MQTT 从诞生之初就是专为低带宽、高延迟或不可靠的网络而设计的。因此,MQTT成为了当今世界上最受欢迎的物联网协议。 在MQTT协议通讯中,有两个最为重要的角色。它们分别是服务端和客户端。 MQTT服务端通常是一台服务器。它是MQTT信息传输的枢纽,负责将MQTT客户端发送来的信息传递给MQTT客户端。MQTT服务端还负责管理MQTT客户端。确保客户端之间的通讯顺畅,保证MQTT消息得以正确接收和准确投递。团队使用在服务器上搭建EMQX服务器,以此实现MQTT功能。 MQTT客户端可以向服务端发布信息,也可以从服务端收取信息。把客户端发送信息的行为成为“发布”信息。而客户端要想从服务端收取信息,则首先要向服务端“订阅”信息。每个ESP8266作为客户端连接在MQTT服务器,智能控制中心同样作为客户端连接至MQTT服务器。 ESP8266与智能控制中心通过MQTT 服务器进行数据通信。如图3.2所示。它们之间通过这种“发布”与“订阅”同一主题实现消息的通信。通过主题区分是哪个客户端发送的信息,即区分是哪个房间的设备。 在数据库设计中,每个房屋的ID是唯一,而每个房屋内的房间的ID也是唯一的,因此可以使用“房屋ID/房间ID”表示唯一的房间,通过添加不同的符号串表示该房间的不同信息。ESP8266发布的主题功能信息如表3.4所示。 表 3.4 ESP8266发布的主题功能表 | 主题 | 功能 | | ---------------- | -------- | | will/房屋ID/房间ID | 房间在线信息发送 | | light/房屋ID/房间ID | 房间灯光信息发送 | | smog/房屋ID/房间ID | 房间烟雾信息发送 | | garden/房屋ID/房间ID | 房间土壤信息发送 | | indoor/房屋ID/房间ID | 房间空气信息发送 | | power/房屋ID/房间ID | 房间功率信息发送 | ESP8266订阅的主题功能信息如表3.5所示。 表 3.5 ESP8266订阅的主题功能表 | 主题 | 功能 | | ---------------- | -------- | | 房屋ID/房间ID/light | 接收灯光控制信息 | | 房屋ID/房间ID/water | 接收浇花信息 | | 房屋ID/房间ID/heater | 接收空调控制信息 | 在表3.4中,可以发现有一个主题“will/房屋ID/房间ID”,这个主题的作用就是供智能控制中判断该房间是否在线。在正常情况下,ESP8266作为客户端连接至MQTT服务器,如果客户端自己断开连接,此为正常情况。但是若发生了意外情况,则需要通知订阅该客户端发布主题消息的客户端设备意外断线。 为了让客户端可以更好的发挥作用,便于服务端管理,MQTT协议允许客户端在“活着”的时候就写好遗嘱,这样一旦客户端意外断线,服务端就可以将客户端的遗嘱公之于众。在ESP8266设备作为客户端连接至服务端后,发布遗嘱信息,表示设备离线。同时发布与遗嘱相同的主题,但是信息内容却不一样,此信息表示设备在线,将该消息设置为保留消息。这样无论显示客户端在任何时间该主题,都会马上收到该主题中的“保留消息”,也就是房间在线信息。 通过MQTT协议,实现了设备于智能控制中心的通信。而用户与智能控制中心进行数据交换,从而过滤信息发送至ESP8266,完成整体智能网关的设计。 **(2) 串口通信设计** 由于ESP2866的引脚数量不够实现项目要求,使用Arduino Mega与ESP8266通过串口通信实现信息交流。由硬件介绍可知,ESP8266本身的只有一个硬件串口,为了方便开发,在ESP8266设置了两个软串口,一个负责接收Arduino Mega发送的信息,而另一个负责向Arduino Mega接受信息,后续统一使用串口描述。 Arduino Mega本身就带有多个硬件串口,不用设置软串口,但由于传输的数据量比较大,需要更改串口缓冲区的大小,以此满足项目要求。为了保证信息传输的正确率,串口通信的速率不能设置太快。过快的串口波特率会导致ESP8266无限重启,致使系统瘫痪。对应引脚连接如表3.6所示。 表 3.6 Arduino Mega和ESP8266的串口连线表 | ESP8266 | Arduino Mega | | ------- | ------------ | | D7 | 16 | | D8 | 17 | | D5 | 18 | | D6 | 19 | Arduino Mega和ESP8266的连接方式如图3.13所示。 ![](assets/67d95fe2fa6de6ffe1566c4077de3a3b.jpeg) 图 3.13 串口连线示意图 串口传输速率与MQTT通信速率差距就很大。经常会发生Arduino Mega未能接收完全上一条的串口信息,而ESP8266收到主题的消息,再次发送至串口,造成串口数据堆积现象,简称串口数据堆积问题。 **(3) 智能控制算法设计** 为解决串口数据堆积问题,团队设计了一套智能控制算法对串口堆积数据进行处理,划分。关于算法的设计,采取了计算机网络体系结构中数据链路中“封装成帧”的基本思想,对于由ESP8266通过串口发送过来的数据,由ESP8266对于每个数据头前加上“@”符号,尾部加上“\#”符号,表示这个数据的头部和尾部。这两个符号与智能控制中心约定不出现在数据信息中。 智能控制算法流程图如图3.14所示。 图 3.14 智能控制算法流程图 算法的步骤如下: (1) 读取串口字符串,进入步骤 (2); (2) 获取字符串第一个“@”的位置,进入步骤 (3); (3) 获取字符串第一个“\#”的位置,进入步骤 (4); (4) 如果“@”的位置和“\#”的位置至少有一个小于0,表示没有找到符号,跳出循环,进入步骤 (8);否则,表示两个符号都能找到,进入步骤 (5); (5) 截取“@”和“\#”位置之间的字符串作为控制信息,进入步骤 (6); (6) 对于控制信息进行分类信息处理,同一类型的控制信息以最后一条更新的信息为准,进入步骤 (7); (7) 对于字符串截取为“\#”位置之后的所有字符串作为下一次输入的字符串,进入步骤 (2); (8) 不同类型控制信息处理,进入步骤(9)。 (9) 结束 通过智能控制算法,能够有效缓解串口数据堆积问题,从中提取出有效控制信息。同时对于提取出来的控制信息,由于采用JSON数据格式传输,若不是JSON数据格式,丢弃无用数据;若是控制信息,通过解析JSON数据获取用户的控制信息,从而完成实际控制,实现远程控制。 **空调控制设计** 对于空调的部分的设计,由于不同品牌的空调红外遥控协议有所不同,为此项目团队针对美的空调红外遥控协议R05D进行测试编写代码。测试空调信号为美的冷俊星系列空调。 通常红外遥控采用NEC传输协议,而美的空调采用的是R05D红外协议,因此用一般红外编码发射模块无法直接对空调进行控制。项目团队获取R05D协议手册,用红外接收管对原有遥控器红外接收进行波形分析,以此实现对于美的空调的红外控制。 从协议手册理解,R05D红外协议编码与时序都跟NEC传输协议不一样。 下面进行编码讲解。R05D协议通常编码格式为: L, A, A’, B, B’, C, C’, S, L, A, A’, B, B’, C, C’ L为引导码;S为分隔码;A为识别码(A=10110010=0xB2,预留方案时A=10110111=0xB7),A’ 为A的反码;B’ 为B的反码;C’ 为C的反码。B、C含义如表3.7所示。 表 3.7 B、C含义 | B | C | | | | | | | | | | | | | | | | ------------ | --- | --- | --- | --- | --- | ------------ | ----------- | --- | --- | --- | --- | --- | --- | --- | --- | | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | C7 | C6 | C5 | C4 | C3 | C2 | C1 | C0 | | 风速 (见表3.6.1) | 1 | 1 | 1 | 1 | 1 | 温度 (见表3.6.3) | 模式 (表3.6.2) | 0 | 0 | | | | | | | 表3.7.1 风速 表3.7.2 模式 | 风速 | B7 | B6 | B5 | | -------------------------------------------------------------------------------- | --- | --- | --- | | 自动 | 1 | 0 | 1 | | 低风 | 1 | 0 | 0 | | 中分 | 0 | 1 | 0 | | 高风 | 0 | 0 | 1 | | 固定风 | 0 | 0 | 0 | | 注:在抽湿、自动模式下的经济运行,风量应该为自动风,即 B7 B6 B5=0 0 0 制冷及制热时的经济运行,风量应为自动风,即: B7 B6 B5=1 0 1 | | | | | 模式 | C3 | C2 | | -------------------------------- | --- | --- | | 自动 | 1 | 0 | | 制冷 | 0 | 0 | | 抽湿 | 0 | 1 | | 制热 | 1 | 1 | | 送风 | 0 | 1 | | 注:送风和抽湿模式代码一样,但抽湿模式有温度代码,而送分模式无。 | | | 表3.7.3 温度 | 温度 | C7 | C6 | C5 | C4 | | ------------------------------- | --- | --- | --- | --- | | 17℃ | 0 | 0 | 0 | 0 | | 18℃ | 0 | 0 | 0 | 1 | | 19℃ | 0 | 0 | 1 | 1 | | 20℃ | 0 | 0 | 1 | 0 | | 21℃ | 0 | 1 | 1 | 0 | | 22℃ | 0 | 1 | 1 | 1 | | 23℃ | 0 | 1 | 0 | 1 | | 24℃ | 0 | 1 | 0 | 0 | | 25℃ | 1 | 1 | 0 | 0 | | 26℃ | 1 | 1 | 0 | 1 | | 27℃ | 1 | 0 | 0 | 1 | | 29℃ | 1 | 0 | 1 | 0 | | 30℃ | 1 | 0 | 1 | 1 | | 无定义 | 1 | 1 | 1 | 0 | | 注:只有送风模式, C7 C6 C5 C4 = 1 1 1 0 | | | | | 第一帧和第二帧相同,采用MSB在先,LSB在后。也就是高位先发。具体时序讲解就不多赘述了。总而言之,编码与时序都跟NEC不一样,注定通过控制GPIO时序来发送R05D协议的编码。 使用逻辑分析仪采集到的数据如图3.15所示。 所有数据使用逻辑分析仪从遥控器上面采集的,并且手动把二进制转换成十六进制。由图3.15可以编写出相应的实际控制代码。 通过查阅R05D红外协议,可知其红外载波频率为38KHZ。实际使用过程中,由于未知原因,代码中需要设置红外载波频率为40KHZ,示波器测试频率38KHZ左右。 基于用户需要,目前支持模式(自动、制冷、制热、抽湿、通风)调节,温度调节(17℃\~30℃,分辨率1),风速调节(五档调节)。 图 3.15 美的空调编码 **远程监控设计** ESP32-CAM本身的CameraWebServer 的demo使用自己提供HTTP服务和视频流,会有较大性能开销。而且需要内网穿透才能外网访问。团队经过研究探讨最终采用ESP32-CAM不停拍照发送给服务端,服务端处理视频的请求,合成视频流给前端。这种方案取缔了ESP32-CAM自身运行HTTP服务的相关逻辑,使得ESP-CAM只负责不停拍照片发给服务端,从而减少ESP32-cAM的压力,提升了其视频流畅度 ### 3.2.3 程序设计 **(1) Arduino Mega程序设计** Arduino Mega程序流程图如图3.16所示。 图 3.16 Arduino Mega程序流程图 首先,Arduino Mega初始化所有连接的传感器,包括设置使用的引脚状态,初始化变量等等。 然后,程序会进入一个循环状态。 在该循环中,首选读取所有连接的传感器的数据,同时对于数据进行处理计算,赋值到相应的变量存储,也就是更新了传感器数据信息。 之后检查串口是否可用。 如果串口可用,表示有数据通过串口到达Arduino Mega,此时接收数据,使用智能控制算法针对对于数据处理提取。提取控制信息后,验证数据格式,格式正确进行解析,更新设备信息,向串口发送数据信息。 如果串口不可用,表示此时没有数据送达,将设备信息发送到串口。之后再次循环。 一旦用户手动复位或发送运行错误,结束程序运行。 ** ** **(2) ESP8266程序设计** ESP8266程序流程图如图3.17所示。 图 3.17 ESP8266程序流程图 首先ESP8266上电连接WIFI,直到WIFI连接成功。然后连接MQTT服务器,直到连接成功。通信准备完成后,订阅指定的主题,这些指定的主题的信息为控制信息。然后初始化连接的传感器。 进入循环,首先从串口读取Arduino Mega发送来的信息,对信息分类,发送至不同的主题。如果订阅的MQTT主题收到控制信息,接受信息后,根据不同的主题对于信息的处理不同。由于对于空调的红外发射传感器使用ESP8266控制,所以对于空调的控制信息需要在ESP8266内解析读取,从而发射相应的控制编码。当接受的主题不是空调的控制信息,对于该信息进行处理,在信息的头添加‘@’,在信息的尾部添加‘\#’,再使用串口发送至Arduino Mega。之后重新开始循环。 ** ** **(3) ESP32-CAM程序设计** ESP32-CAM程序流程图如图3.18所示。 图 3.18 ESP32-CAM程序流程图 首先初始化摄像头,连接WIFI,等到WIFI连接成功为止进入下一步。在连接WIFI成功后,获取硬件本身MAC地址作为与服务器通信的标识。连接服务器开发的端口,等待获取通道索引。获取通道索引成功后,拍摄一帧图片,发送该帧至服务器,由服务器负责视频流的合成视频流。 ### 3.2.4 实际部署 部署要求环境中拥有一台支持2.4GHz的频宽的路由器,因为ESP8266只能连接2.4GHz的WIFI。各种传感器与开发板的连线概要如图3.19 所示。 ![](assets/dfb68e430f1e8669514e73b79f3a6da2.png) 图 3.19 系统连线概要图 **(1) 智能安全系统** 智能安全系统的功能基于ESP32-32CAM、蜂鸣器、烟雾传感器实现。 实时监控采用ESP32-CAM作为家居摄像头。摄像头固定在门上。 本次项目使用舵机模拟门的锁芯,通过ESP8266连接控制舵机。用户通过APP或Web端发送控制信号,对应ESP8266接受完成后完成相应控制指令。 烟雾传感器MQ2放置在房间的最高处,检测房间空气中液化气、酒精、烟雾等浓度变化。烟雾传感器连接至Arduino Mega。与Arduino Mega的连线如表3.8所示。 表 3.8 烟雾传感器MQ2与Arduino Mega引脚连线表 | MQ2 | Arduino Mega | | --- | ------------ | | VIN | 5V | | GND | GND | | A0 | A2 | 蜂鸣器放置在核心控制板周围。蜂鸣器连接Arduino Mega,一旦环境温度或空气中有害气浓度超过阈值,蜂鸣器发出警报声音,提醒周围用户离开。蜂鸣器与Arduino Mega的引脚连线如表3.9所示。 表 3.9 蜂鸣器与Arduino Mega引脚连线表 | 蜂鸣器 | Arduino Mega | | --- | ------------ | | VIN | 9 | | GND | GND | **(2) 智能照明系统** 智能照明系统的功能都是基于对于灯源的开关,本项目使用继电器作为灯源的开关进行控制。用户发送控制信息至ESP8266模块,由ESP8266通过串口发送该信息至Arduino Mega。Arduino Mega解析信息完成后,对相应灯源的继电器开关控制即可。实际中使用继电器连接家庭中电灯开关。项目采用8路继电器与Arduino 进行连接,不仅可以满足当前的需求,同时,提供更多接入家居电器的接口。8路继电器与Arduino Mega引脚连线如表3.10所示。 表 3.10 8路继电器与Arduino Mega引脚连线表 | 8路电磁继电器 | Arduino Mega | | -------- | ------------- | | VIN | 5V | | GND | GND | | IN1\~IN8 | 51\~37(以2为间隔) | **(3) 智能暖通系统** 智能暖通系统的功能基于对于空调的控制。本项目使用红外发射模块发射对应的控制编码至空调,从而完成空调的模式、风速、温度的控制。为了充分发挥ESP8266性能特点,同时提高响应速度。设计将红外设计模块连接至ESP2866,用户的控制信号到达ESP8266后,直接由ESP8266进行解析。对空调发射对应控制信号。使用限制为目前只开发并测试了美的冷俊星系列空调,同时红外发射模块需要距离空调很近。红外发射传感器与Arduino Mega引脚连线如表3.11所示。 表 3.11 红外传感器与Arduino Mega引脚连线表 | 红外发射模块 | ESP8266 | | ------ | ---------------------- | | VIN | 5V(实际上连接到Arduino Mega) | | GND | GND | | S | D2 | **(4) 实时监控系统** 实时监控系统的功能基于土壤湿度传感器、继电器、温湿度传感器、电流传感器实现。 土壤湿度传感器安装在盆栽周围附近,该传感器连接Arduino Mega,由于Arduino Mega采集信息并通过串口传输信息至ESP8266,ESP8266同时MQTT协议传输信息至智能控制中心。 土壤湿度传感器与Arduino Mega引脚连线如表3.12所示。 表 3.12 土壤湿度传感器与Arduino Mega引脚连线表 | 土壤湿度传感器YL-69 | Arduino Mega | | ------------ | ------------ | | VIN | 5V | | GND | GND | | A0 | A1 | 继电器和智能照明系统中使用的继电器的一致都是作为开关存在。不同的是,需要将水泵的开关连接至继电器。基于不同的植物对于水的需求量不同,并没有设计自动浇灌系统。由用户监测土壤湿度,由用户控制浇花,给用户更加智能化的体验。 温湿度传感器用户测量房间内空气中温度和湿度,实际接入与Arduino Mega连接。温湿度传感器与Arduino Mega引脚连线如表3.13所示。 表 3.13 温湿度传感器与Arduino Mega引脚连线表 | 温湿度传感器DHT11 | Arduino Mega | | ----------- | ------------ | | VIN | 5V | | GND | GND | | DATA | 30 | 电流传感器连接需要测量电器,测量出使用当前电流。由Arduino Mega开发板通过电流计算得出功率,发送至智能控制中心。电流传感器与Arduino Mega引脚连线如表3.14所示。 表 3.14 电流传感器与Arduino Mega引脚连线表 | 电流传感器ACS712 | Arduino Mega | | ----------- | ------------ | | VIN | 5V | | GND | GND | | OUT | A3 | **(5) 硬件成果展示** 通过上述开发板和各类传感器,项目团队进行硬件事物连接,如图3.20所示。 ![](assets/083f165a7836f767bffd3c27fe706c7f.jpeg) 图 3.20 硬件成果展示 ## 后端系统设计 本项目的后端部分实现的功能如下: 1\. 获取智能网关发送的实时设备信息。 2\. 存储并分析智能网关获取的设备信息。 3\. 传输智能网关发送设备信息至app,以供用户查阅。 4\. 接收由APP发送的控制信息,并传输至智能网关,以实现设备控制(包括开关、一键开关、调节空调温度等操作) ### 3.3.1 控制层 本项目的控制层提供相应的接口给客户端,使用户端与智能网关相连接,以实现实时获取智能设备状态信息、实时控制智能设备的需求。详见接口文档。 ### 3.3.2 服务层 本项目使用MQTT协议,将服务器与智能网关相连。本项目使用到的服务主要有:MQTT信息传输服务、Redis数据缓存服务、MySQL数据库服务。服务概况如图3.21所示。 ![](assets/01f0a1f6dca594df6c349c7190eb7f96.png) 图 3.21 服务概览图 **MQTT信息传输服务** 基于MQTT的发布/订阅模式,在本项目中,服务器将订阅所有的设备有关的MQTT信息。也就是说,在本项目中,服务器将作为所有主题的订阅者。 同时,为了保证设备信息的稳定性和安全性,本项目中所有发布的主题都将设置严格的密码限制,以确保再本项目中服务器是MQTT协议中权限最高的订阅者。 本项目通过服务器监控所有的MQTT主题,以获取智能网关发送的全部设备信息。同时,客户端可以通过控制层来请求服务器提供MQTT服务,通过接口来访问智能网关发送的实时设备信息或通过接口来发送设备控制信息。 MQTT主要参数如表3.15所示。 表 3.15 MQTT主要参数表 | 参数名 | 说明 | | ----------------- | ----------------- | | ClientId | 客户端id | | Clean Session | 持久会话标识 | | Username/Password | 用户名和密码,用于客户端认证和授权 | | Will Message | 遗愿信息 | | KeepAlive | 通信的时间间隔 | | QOS | 消息的服务质量 | | Payload | 主题携带的信息内容 | | timeout | 数据接收时间 | **Redis数据缓存服务** 本项目建立的系统是一个可供多用户操控的、实时的、智能系统。为了方便监控和获取智能网关和发送的实时数据,也为了方便客户端发送控制信号,系统使用redis数据库将所有服务器监听到的MQTT信息以键值对的形式存储(key为主题,value为消息的实际内容)。 例如:当智能网关发送MQTT信息:主题smog/100002/100001、内容:{"type": "smog","smog": 171},服务器将接收到该主题,并将主题和内容存储至Redis中。当客户端请求烟雾信息接口时,服务器将查询Redis数据库,并返回烟雾指数信息。当智能网关发送同样的主题后,服务器将监听到该主题,并对Redis中的数据进行覆盖与更新,以此来实现数据的实时性。 综上所述,在本项目中使用Redis有以下好处: 1\. Redis的查询速度非常快,在本项目中作为缓存使用,便于数据的获取与传递。 2\. Redis可以存放大量的数据,可以满足多用户系统的需求。 3\. Redis可以所为项目的中间媒介,方便服务器对数据的分析。 ### 3.3.3 数据库设计 本项目搭建的服务器可以为多用户提供服务,为此需要使用MySQL来存储相应的用户信息、房屋信息、设备信息,以提供定制化的用户服务。 MySQL存储的信息主要有:用户的基本信息(包括:用户id、用户密码、用户名称、等)、房子的基本信息、房间的基本信息、设备信息等。 **概念设计** (1) 用户表的E-R图,含所有的用户信息如图3.22所示。 ![](assets/da82966a3c7b92e433649312a26ab24a.png) 图 3.22 user实体图 (2) 房子表的E-R图,含所有的属性信息如图3.23示。 ![](assets/f32d9afc2668f470e4385f7dc5a634e7.png) 图 3.23 home实体图 (3) 房间表的E-R图,含所有的属性信息如图3.24所示。 ![](assets/d8883e4b9bd3b9acc4c7585381d28a56.png) 图 3.24 room实体图 (4) 灯光表的E-R图,含所有的属性信息如图3.25所示。 ![](assets/04211958d6534c70694cac8d01a928c6.png) 图 3.25 light实体图 (5) 空调表的E-R图,含所有的属性信息如图3.26所示。 ![](assets/6e07e4cea215c7822d189e6b693dddc5.png) 图 3.26 heater实体图 (6) 雾传感器表的E-R图,含所有的属性信息如图3.27所示。 ![](assets/a51d128518873a532e265388f870528d.png) 图 3.27 smog实体图 (7) 大门表的E-R图,含所有的属性信息如图3.28所示。 ![](assets/d9d12fb4b01074664c8650033d7776b8.png) 图 3.28 door实体图 (8) 花园表的E-R图,含所有的属性信息如图3.29所示。 ![](assets/319a5352a9fac4d3ae51eb81e66b4d1f.png) 图 3.29 garden实体图 (9) 电力表的E-R图,含所有的属性信息如图3.30所示。 ![](assets/e7729ed1fc118c9492ee7fbed0d38608.png) 图 3.30 power实体图 (10) 用户与主房的连接表E-R图,含所有的属性信息如图3.31所示。 ![](assets/807eddfb7c9e3ee1a11a56fbcddee542.png) 图 3.31 heater实体图 **逻辑结构** (1) user(id、name、passwd、sex、address、phone、email、isAdmin) 说明:id表示用户表的主键,name表示用户的姓名,passwd表示用户的密码,sex表示用户的性别,address表示用户的居住地址,phone表示用户的联系电话,email表示用户的邮箱,isAdmin表示用户是否为管理员。 (2) home(id、master_id、name、address、creat_time、update_time) 说明:id表示房子表的主键,master_id表示房子的户主,name表示房子的名字,address表示房子的地址,creat_time表示当前信息创建的时间,update_time当前信息修改的时间。 (3) room(id、home_id、name、create_time、update_time) 说明:id表示房间表的主键,home_id表示房间关联的房子的id,name表示房间的名字,creat_time表示当前信息创建的时间,update_time当前信息修改的时间。 (4) door(id、home_id、is_open、name、create_time、update_time) 说明:id表示大门的主键,home_id表示烟雾传感器关联的房子id,is_open表示大门的开关情况,name表示大门的名字,creat_time表示当前信息创建的时间,update_time当前信息修改的时间。 (5) light(id、room_id、name、create_time、update_time) 说明:id表示灯光表的主键,room_id表示灯关联的房间id,name表示灯的名字,creat_time表示当前信息创建的时间,update_time当前信息修改的时间。 (6) heating_equipment(id、room_id、name、create_time、update_time) 说明:id表示空调表的主键,room_id表示空调关联的房间id,name表示空调的名字,creat_time表示当前信息创建的时间,update_time当前信息修改的时间。 (7) smog(id、room_id、name、home_id、smogInf) 说明:id表示烟雾传感器的主键,room_id表示烟雾传感器关联的房间id,name表示烟雾传感器的名字,home_id表示烟雾传感器关联的房子的id,smogInf表示烟雾传感器的数据。 (8) power(id、room_id、name、home_id、data、time) 说明:id表示电力传感器的主键,room_id表示电力传感器关联的房间id,name表示电力传感器的名字,home_id表示电力传感器关联的房子的id,data表示电力传感器的数据,time表示数据产生的时间。 (9) garden(id、room_id、name、home_id、soilHumidity) 说明:id表示土壤湿度传感器的主键,room_id表示土壤湿度传感器关联的房间id,name表示烟雾传感器的名字,home_id表示土壤湿度传感器关联的房子的id,soilHumidity表示土壤湿度传感器的数据。 (10) user_main_home(user_id、home_id) 说明:user_id是用户主房子表的主键,一个用户只能关联一个主房子。home_id是用户关联的房子id。 **物理实现** (1) 用户(user)表,它的所有属性以及数据类型如表3.16所示。 表 3.16 user表 | 字段名称 | 字段类型 | 是否为空 | 说明 | | ----------- | ----------- | ---- | ------ | | id | int(11) | NO | 主键 | | name | varchar(20) | NO | 姓名 | | passwd | varchar(60) | NO | 密码 | | isAdmin | tinyint(1) | YES | 是否为管理员 | | create_time | datetime | YES | 创建时间 | | update_time | datetime | YES | 更新时间 | | is_deleted | int(11) | NO | 是否被删除 | | sex | varchar(10) | YES | 性别 | | address | varchar(40) | YES | 地址 | | phone | varchar(20) | YES | 手机号 | | email | varchar(20) | YES | 邮箱 | (2)房子(home)表,它的所有属性以及数据类型如表3.17所示。 表 3.17 home表 | 字段名称 | 字段类型 | 是否为空 | 说明 | | ----------- | ----------- | ---- | ------- | | id | int(11) | NO | 主键 | | name | varchar(20) | NO | 名字 | | create_time | datetime | YES | 创建时间 | | update_time | datetime | YES | 更新时间 | | master_id | int(11) | NO | 户主id,外键 | | address | varchar(40) | YES | 地址 | (3) 房间(room)表,它的所有属性以及数据类型表3.18所示。 表 3.18 room表 | 字段名称 | 字段类型 | 是否为空 | 说明 | | ----------- | ----------- | ---- | ---------- | | id | int(11) | NO | 主键 | | name | varchar(20) | NO | 名字 | | home_id | int(11) | YES | 关联的房子id,外键 | | create_time | datetime | YES | 创建时间 | | update_time | datetime | YES | 更新时间 | (4) 大门(door)表,它的所有属性以及数据类型表3.19所示。 表 3.19 door表 | 字段名称 | 字段类型 | 是否为空 | 说明 | | ----------- | ----------- | ---- | ---------- | | id | int(11) | NO | 主键 | | name | varchar(20) | NO | 名字 | | home_id | int(11) | YES | 关联的房子id,外键 | | create_time | datetime | YES | 创建时间 | | update_time | datetime | YES | 更新时间 | | is_deleted | int(11) | NO | 是否被删除 | | is_open | tinyint(1) | YES | 开启状态 | (5) 灯光(light)表,它的所有属性以及数据类型如表3.20所示。 表 3.20 light表 | 字段名称 | 字段类型 | 是否为空 | 说明 | | ----------- | ----------- | ---- | ---------- | | id | int(11) | NO | 主键 | | name | varchar(20) | NO | 名字 | | room_id | int(11) | YES | 关联的房间id,外键 | | create_time | datetime | YES | 创建时间 | | update_time | datetime | YES | 更新时间 | | is_deleted | int(11) | NO | 是否被删除 | (6) 空调(heating_equipment)表,它的所有属性以及数据类型表3.21所示。 表 3.21 heating_equipment表 | 字段名称 | 字段类型 | 是否为空 | 说明 | | ----------- | ----------- | ---- | ---------- | | id | int(11) | NO | 主键 | | name | varchar(20) | NO | 名字 | | room_id | int(11) | YES | 关联的房间id,外键 | | create_time | datetime | YES | 创建时间 | | update_time | datetime | YES | 更新时间 | | is_deleted | int(11) | NO | 是否被删除 | (7) 烟雾传感器(smog)表,它的所有属性以及数据类型如表3.22所示。 表 3.22 smog表 | 字段名称 | 字段类型 | 是否为空 | 说明 | | ------- | ----------- | ---- | ---------- | | id | int(10) | NO | 主键 | | name | varchar(60) | NO | 名字 | | room_id | int(11) | NO | 关联的房间id,外键 | | home_id | int(11) | YES | 关联的房子id,外键 | | smogInf | double | YES | 烟雾信息 | (8) 电力(power)表,它的所有属性以及数据类型如表3.23所示。 表 3.23 power表 | 字段名称 | 字段类型 | 是否为空 | 说明 | | ------- | -------- | ---- | ---------- | | id | int(10) | NO | 主键 | | home_id | int(10) | YES | 关联的房间id,外键 | | time | datetime | YES | 数据产生的时间 | | data | float | YES | 电力数据 | | room_id | int(10) | YES | 关联的房间id,外键 | (9) 花园(garden)表,它的所有属性以及数据类型如表3.24所示。 表 3.24 garden表 | 字段名称 | 字段类型 | 是否为空 | 说明 | | ------------ | ----------- | ---- | ---------- | | id | int(10) | NO | 主键 | | name | varchar(60) | NO | 名字 | | room_id | int(11) | NO | 关联的房间id,外键 | | home_id | int(11) | YES | 关联的房间id,外键 | | soilHumidity | double | YES | 土壤湿度数据 | (10) 用户主房子(user_main_home)表,它的所有属性以及数据类型如表3.25所示。 表 3.25 user_main_home表 | 字段名称 | 字段类型 | 是否为空 | 说明 | | ------- | ------- | ---- | --------- | | user_id | int(10) | NO | 主键 | | home_id | int(10) | NO | 用户的主房子,外键 | 数据库的EER图表如图3.32所示。 ![](assets/f9cf694bbdc811569652ae3333832a47.png) 图 3.32 EER图 ## MQTT服务器信息传输格式 如前文所述,MQTT服务器作为整个系统的信息传递媒介而存在,其内的信息格式是非常重要的。 在本项目中发送的MQTT主题采用统一的规范。MQTT主题的一般格式如下: 1\. 智慧网关发送的MQTT信息主题:sensor_name/home_id/room_id 2\. 客户端发送的MQTT信息主题:home_id/room_id/sensor_name (sensor_name表示设备id,home_id表示房子id,room_id表示房间id) 为了信息传递的高效性,本项目中MQTT信息一律采用JSON格式。 ### 3.4.1 火警系统 智能网关发送的传感器信息: 主题:smog/home_id/room_id(home_id表示房子的值,room_id表示房间的值) 数据格式: | **参数名** | **参数类型** | **是否必填** | **参数描述** | | ------- | -------- | -------- | -------- | | type | String | 是 | 信息类型 | | Smog | Float | 是 | 烟雾指数 | 数据示例: | { "type":"smog", "smog":13.0 } | | ------------------------------ | ### 3.4.2智能照明系统 **智能网关发送的传感器信息:** 主题:light/home_id/room_id(home_id表示房子的值,room_id表示房间的值) 信号描述:该信号由智能网关获取每个房间的灯光信息后发送,一次性发送一整个房间的灯光开关信息。 数据格式: | **参数名** | **参数类型** | **是否必填** | **参数描述** | | ----------- | -------- | -------- | ------------ | | type | String | 是 | 信息类型 | | Smog | Float | 是 | 烟雾指数 | | list.id | Integer | 是 | 灯的id | | List.isOpen | Integer | 是 | 开关信息,0为关,1为开 | 数据示例: | { "type": "light", "list": [ { "id": 100000, "isOpen": 1 }, { "id": 100001, "isOpen": 1 }, { "id": 100002, "isOpen": 0 } ] } | | ------------------------------------------------------------------------------------------------------------------------------------------- | **客户端发送的控制信号:** 主题:home_id/room_id/light(home_id表示房子的值,room_id表示房间的值) 信号描述:该信号由客户端发送,一次性发送一整个房间的灯光开关信息,当智慧网关接收到灯光信息后,将会根据灯光id和灯光的开关信息来执行开关操作。如果想要实现一键开关的效果,可将灯光信息全部置0/1。 数据格式: | **参数名** | **参数类型** | **是否必填** | **参数描述** | | ----------- | -------- | -------- | ------------ | | type | String | 是 | 信息类型 | | list | Array | 是 | 数据列表 | | list.id | Integer | 是 | 灯的id | | List.isOpen | Integer | 是 | 开关信息,0为关,1为开 | 示例信息: | { "type": "light", "list": [ { "id": 100003, "isOpen": 0 }, { "id": 100004, "isOpen": 0 }, { "id": 100005, "isOpen": 1 } ] } | | ------------------------------------------------------------------------------------------------------------------------------------------- | ### 3.4.3智能暖通系统 **客户端发送的控制信号:** 主题:home_id/room_id/heater(home_id表示房子的值,room_id表示房间的值) 信号描述: 该信号可以存放一个房间内的多个空调的信息,当控制信号发送至智能网关中,智能网关将根据控制信号对空调进行相应的控制操作。如需实现房间内的空调一键开关的功能,则需要把控制信号中的isOpen全设置为1/0。 空调信号中需要指明所控空调的id、空调开关信息、空调模式信息、空调风速信息、空调温度信息。 空调共有6档风速,编号如下所示:0/1/2/3/4/5。编号越大,表示风速越大。 空调共有5种模式,编号为0\~4。在不同的模式下,空调的控制信号会有所不同,具体情况如下所示: 0:自动模式,温度限定为26摄氏度,风速不可改。 1:制冷,温度风速可调 2:制热,温度风速可调 3:抽湿模式,温度限定为26摄氏度,风速不可改。 4:送风模式,无温度设定(不可调),风速可调 特别地,本项目中使用的测试空调,温度范围为17\~30℃。控制信号中的温度信息应该处于该范围中。 数据格式: | **参数名** | **参数类型** | **是否必填** | **参数描述** | | ----------- | -------- | -------- | ------------ | | type | String | 是 | 信息类型 | | list | Array | 是 | 数据列表 | | list.id | Integer | 是 | 空调的id | | list.isOpen | Integer | 是 | 开关信息,0为关,1为开 | | list.model | Integer | 是 | 模式信息 | | airSpeed | Integer | 是 | 风速信息 | 示例信息: | { "type": "heater", "list": [ { "id": 100001, "isOpen": 1, "model": 4, "airSpeed": 2, "temperature": 26 } ] } | | ----------------------------------------------------------------------------------------------------------------------- | ### 3.4.4花园管理系统 **智能网关发送的传感器信息:** 主题:garden/home_id/room_id(home_id表示房子的值,room_id表示房间的值) 信号描述:智能网关一次发送一个房间内的一组花园信息。土壤湿度信息最高值为1023,最低为0,当土壤湿度为1023时表示最干旱。 数据格式: | **参数名** | **参数类型** | **是否必填** | **参数描述** | | ----------------- | -------- | -------- | -------- | | type | String | 是 | 信息类型 | | list | Array | 是 | 数据列表 | | list.id | Integer | 是 | 花的id | | list.soliHumidity | Integer | 是 | 土壤湿度信息 | 示例信息: | { "type":"garden", "list":[ { "id":100000, "soliHumidity":1023 }, { "id":100001, "soliHumidity":19 } ] } | | ------------------------------------------------------------------------------------------------------------------- | **客户端发送的控制信号:** 主题:home_id/room_id/water(home_id表示房子的值,room_id表示房间的值) 信号描述:客户端一次发送一组相应房间的花园控制信息。 数据格式: | **参数名** | **参数类型** | **是否必填** | **参数描述** | | ------------ | -------- | -------- | ------------ | | type | String | 是 | 信息类型 | | list | Array | 是 | 数据列表 | | list.id | Integer | 是 | 花的id | | list.isWater | Integer | 是 | 开关信息,0为关,1为开 | 示例信息: | { "type": "water", "list": [ { "id": 100001, "isWater": 1 }, { "id": 100003, "isWater": 1 } ] } | | ---------------------------------------------------------------------------------------------------------- | ### 3.4.5电力监控系统 **智能网关发送的传感器信息:** 主题:power/home_id/room_id(home_id表示房子的值,room_id表示房间的值) 信号描述:智能网关一次发送一个房间的电力信息。 数据格式: | **参数名** | **参数类型** | **是否必填** | **参数描述** | | ------- | -------- | -------- | -------- | | type | String | 是 | 信息类型 | | Power | Float | 是 | 电力信息 | 示例信息: | { "type": "power", "power": 29.23597 } | | ---------------------------------------- | ### 3.4.6温湿度检测系统 **智能网关发送的传感器信息:** 主题:indoor/home_id/room_id(home_id表示房子的值,room_id表示房间的值) 信号描述:智能网关一次发送一个房间的温度信息、湿度信息、风热指数。 数据格式: | **参数名** | **参数类型** | **是否必填** | **参数描述** | | ----------- | -------- | -------- | -------- | | type | String | 是 | 信息类型 | | temperature | Float | 是 | 温度信息 | | humidity | Integer | 是 | 湿度信息 | | heatIndex | Float | 是 | 风热指数 | 示例信息: | { "type": "indoor", "temperature": 26.7, "humidity": 71, "heatIndex": 28.42988 } | | ------------------------------------------------------------------------------------ | ## 用户界面设计 ### 3.5.1 APP界面设计 **(1) 注册和登录** ![Screenshot_2023-04-13-09-54-42-26_5afc5ef9b866801](assets/d2b3c2ef7a54ac647f46ce8931677870.jpeg) ![](assets/175fda37eb97db58f42cb68326cbcce0.jpeg) 图 3.33 用户注册和登录页面 用户注册需要输入信息,信息要求如表3.33所示。 表 3.26 注册信息要求表 | 输入的信息 | 必要性 | | ----- | --- | | 输入信息 | 必要 | | 账号 | 必要 | 注册成功后,用户可根据注册信息登录,登录页面如图3.33所示。 当用户进入登录页面之后需要输入账号和密码,点击登录按钮时,会将输入的数据提交,与数据库中的信息进行匹配,再显示有关登录的状态消息提示框,如表3.27所示。如果登录成功则消息提示框则会显示登录成功,并跳转到另一页面;如果输入账号或密码错误,则显示账号或密码错误;如果输入的账号不存在,则会显示用户不存在。 表 3.27 登录信息返回表 | 账号 | 密码 | 返回信息 | | ---- | ---- | ------- | | 匹配成功 | 匹配成功 | 登录成功 | | 匹配成功 | 匹配失败 | 账号或密码错误 | | 匹配失败 | 无法匹配 | 用户不存在 | **(2) 主房屋所关联的房间页面** **![Screenshot_2023-04-13-10-20-48-76_5afc5ef9b866801](assets/bff706fedec71980a8fa5065c6021af8.jpeg)** ![IMG_20230413_10283816](assets/0a91eeb23ab2caabd775281ef81dd889.jpeg) 图 3.34 主房屋关联的房子展示图 图3.34左侧是当前状态下的房间并未连接,所以呈现灰色,点击未连接房间则会通过模态弹窗显示无法进入,如果房间已连接,如图3.33右侧图片所示,房间则显示蓝色。上图3.33有房子内设备一键开关,可以一键控制房子内所有灯和空调。还设有语音识别组件,点击识别语音,进行设备操控。用户操作流程如图3.35所示。 ![C:/Users/suze/AppData/Local/Temp/wps.TOBzhmwps](assets/e69cc146c9c542bbabe82b552c8664e6.png) 图 3.35 用户操作流程图 用户点击大门,进入视频监控页面,视频监控页面展示大门前的情况,用户可以根据大门前的当前情况,选择是否开门。点击开门开关,即可开门。如果监控未连线,则不会显示视频。监控在线情况下,监控页面如图3.36。 ![IMG_20230413_10272234](assets/00c6a7ceab9c8a9040278882a7db36c8.jpeg) 图 3.36 监控页面 同时,该页面也可以看到摄像头传来的实时画面,然后进行开关门控制。同时也设有语音识别模块,也可以通过语音控制门的开关。 针对于用户一键开关房屋内所有空调、灯源的期望,在图3.34中,在用户房子界面,用户可以点击使用页面中间的“灯”和“空调”按钮实现一键控制开关所有的灯源和空调。针对于空调多种模式,一键开关下空调模式设定为自动模式。操作按钮如图3.37所示。 ![](assets/b444e3885a7e452e68b2f2769e837c5b.png) 图 3.37 房子内所有房间一键控制按钮图 **(3) 设备页面** 依据整体的设计思路,用户应该登录成功后,选择旗下的房子进行控制,对于房间内系统设备在线的房间可以进行控制。为了测试方便,项目团队提供了两个APP的安装包,一个为正常用户使用的安装包,另一个为测试用户使用安装包。前者用户只有房间设备在线才能进进入房间,选择设备控制;后者移除这个限制,但是测试人员登录后只能进入固定的单个房间,由于不保证设备是否在线,该应用仅用于观察控制设备界面。可使用账号:100000,密码:123。 设备页面如图3.38所示。 ![](assets/908311a36cfec82838bcbcc0b40ad21c.png) 图 3.38 设备页面 点击房间进入相应的设备页面,其中设备包含土壤湿度监测、火情监测、灯、空调,以及显示当前室内情况(室内温湿度),跳转电力分析页面。 土壤湿度监测:监测湿度情况,如果太干燥则会出现警戒色(红色),点击浇水则会控制设备自动浇水。当警戒色消失,就点击停止浇水,可以控制设备停止浇水。 火情监测:监测烟雾指数,如果烟雾指数超过512,则会出现警戒色,且蜂鸣器会发出警报声。 灯:此页面依然设有灯的一键开关,此处是控制该房间内所有的灯,还设有单独控制灯的按钮,可以打开任意想开的某盏灯。 空调:此页面仍有空调一键开关,一键控制房间内所有的空调。与灯类似,也可以控制具体某个空调,点击下方空调按钮,跳转到对应的空调操控页面。 电力分析:点击导航栏的电力分析也将跳转到相应的页面。 设备页面操作流程图如图3.39所示。 ![wps](assets/e626c7053ece64a3b75e73ae220c648f.png) 图 3.39 设备页面流程图 **(4 )空调控制页面** ![Screenshot_2023-04-13-16-06-10-07_5afc5ef9b866801](assets/f3deba94ea30c21bee89a012e77665c3.jpeg) 图 3.40 空调页面 如图3.40所示,用户可以通过最上方模式调节远程控制空调的模式。最上方,通过滑动操作,切换到风速调节,用户可以调节空调的风速。中间可以用户控制空调的当前情况和房间当前的温度和湿度,以便用户进行更加准确的调节。在最下方,用户可以通过调节空调温度和控制开关。 **(5) 电力监测页面** ![Screenshot_2023-04-13-17-50-31-92_5afc5ef9b866801](assets/ceee69f634080d9b5d16a2c3b8b059f5.jpeg) 图 3.41 电力监测页面 如图3.41所示,该页面每隔1s获取一次,由于APP屏幕大小限制,只能展示7个数据,因此每次展示7s内的用电情况,时刻7是当前用电量,时刻1\~6是距离此时6秒内的用电量。 **(6) 用户信息界面** ![Screenshot_2023-04-13-18-01-06-52_5afc5ef9b866801](assets/d213863133e07843b60ff0453339957f.jpeg) ![](assets/e5c57a56e4a92ee84f6b9a5e80ef13bb.jpeg) 图 3.42 用户信息页面 图 3.43 用户信息界面 如图3.42所示,此页面展示用户的头像和昵称,点击头像可以修改头像,也提供了修改名字和退出登录功能。并且用户可通过此页面进入其关联的房子。修改用户昵称如图3.43所示。 **(7) 用户关联房子** ![Screenshot_2023-04-13-18-27-13-31_5afc5ef9b866801](assets/44e548ff9594cb7903b67be57912cde9.jpeg) 图 3.44 用户关联房子界面 此页面显示所有用户相关房子,点击任一房子进入所对应的房间,房间页面布局与图3.37和图3.38相同,由大门、一键开关(灯和空调)和若干个房间组成。 ### 3.5.2 Web界面设计 **(1) 注册界面** ![](assets/e8ef166156a251917cbb2953b68d7700.png) 图 3.45 注册界面 页面地址:http://124.222.52.246:8080/test1/register.html 用户注册需信息会以表单形式传递给接口,再存入数据库中。 **(2) 登录界面** 页面地址:http://124.222.52.246:9088/\#/login 注册成功后,用户可以根据注册信息登录。登录界面如3.46所示。 ![](assets/11f5e173b096c0480e98bc04c1905c96.png) 图 3.46 用户登录界面 ** ** **(3) 房子选择界面** 当用户登录成功后,首先进入的是房屋选择界面。用户登录成功后,会展示用户有多少房子,然后用户选择需要操作的房屋。 ![](assets/17f7c6a6d72c85236bdc81925ed9e9e8.png) 图 3.47 房子选择界面 渲染效果如图3.47所示。每个房屋会对应一个板块,展示房屋的名称。中间有一个绿色的按钮,用户点击这个按钮后,会跳转到下一个操作界面——房间选择页面,从而去选择被选房屋中要操作的房间。 **(4) 房屋选择页面** ![](assets/ff42c9bf7f9b477a63547d7053bc2db7.png) 图 3.48 房屋选择界面 **(5) 家居选择页面** 用户跳转到家居选择页面之后,可以选择要控制的家具。 ![](assets/d963884260dfc214258b7430ef37a459.png) 图 3.49 家居选择页面 **(6) 智能安全系统** 智能安防系统由大门和摄像头组成。 门的实现逻辑和房间选择页面类似。因为每个房屋都只需要控制一个门,所以门的标识符可以用houseid来辨别。 ![](assets/66fe7030314c9d427702c2e6bfb96f90.png) 图 3.50 监控页面 门的操作界面设有控制开关和实时的门口监控视频。户主可以在远程看到到访者是谁,从而决定是否开门,这样可以进一步提高安全性和便利性。 **(7) 智能照明系统** 家里分大厅,卧室,厨房,卫生间等多个区域,每个区域都有灯。不仅要设置一键操作所有的灯,还有分别去操纵每盏灯。操作灯的界面如图3.51所示。 ![](assets/dd06e0fc3766df16e518d745acb4c807.png) 图 3.51 灯的控制页面 界面会获取当前的房屋号和房间号,然后发给后端的接口,接口得到请求后,会返回数据给页面。页面获取到数据后会将数据渲染在页面上。如图3.52所示,该房间内有多少盏灯,页面就会返回多少个开关按钮组合,并将其渲染在页面的左半部分。页面的右半部分会展示出当前灯的编号,以及灯的开关状态,当点击按钮变化的时候,灯的状态改变会显示在右图的表格。 **(8) 智能暖通系统** 智能暖通系统实现了分别对房屋内的空调一键全开和房间内的空调一键全开,也设置了单独操控每个房间内的空调,对于有多个空调的家庭,大大提升了系统的方便性。 在空调操作页面,首先展示的是屋内所有空调和房内所有空调的一键全开关按钮和该房间内空调的名称。这里可以实现对该房间内的空调和整个房屋的空调进行一键全开关操作。点击绿色按钮,会进入到单独控制该房间内的空调的界面。如图3.52所示。 ![](assets/e1dbf442d7c9374f6dd0c052b20c389c.png) 图 3.52 空调一键开关 在单独操控每个房间都空调时,用户不仅可以操控空调,也可以得知当前房屋的温度和湿度。用户根据当前屋内的温湿度来对空调进行调整,如选择温度,模式等。 空调的功能主要分为:开关、模式控制(制冷、制热、通风)、温度设定、风速(低分、中风、高风)。如图3.53所示。 ![](assets/5cf227f68da7982fac332afff7b99808.png) 图 3.53 空调页面 **(9) 智能电力系统** 为了方便用户可以了解当前的用电量,本系统配备了智能电力系统,实时检测当前的电量多少。智能电力系统的实现逻辑与其他家具的实现效果类似,同样是以房屋号加房间号作为查询信息向后端接口发出请求,接口再从数据库中查询当前电量信息。前端设置一个定时器,每隔3秒定时向接口发出请求,从而获取实时的电量数据。并且将数据渲染在页面上。智慧电力系统如图3.54所示。 ![](assets/815491374fec6c5ccdf7d8bdca259e29.png) 图 3.54 智能电力系统界面 图中用Echarts折线图展示了家中电量的功率,横坐标为时间,纵坐标为电功率。右侧是一个动态的折线图,实时获取当前的用电功率并展示。在界面的左上角有一个下载功能,是将截止到下载时刻为止的所有获取到的电功率以表格的形式下载。如图3.55所示。 ![](assets/17c9c551153f0968b5579c3f5df634f2.png) ![](assets/78a2d1fb8e970e9af05f06a398f5d502.png) 图 3.55 用电量表格 **(10) 爱家管理系统** 为了更好地维护项目,让项目进一步提高安全性,灵活性,以及用户的方便性,本团队开发了一个后台管理系统,专门用来管理、维护系统中的用户、房屋、设备,使系统进一步趋于完整。 用户管理系统由导航栏,主界面(展示不同管理系统的内容)组成。如图3.56所示。 ![](assets/1f8349c566d7fe9a4486c42c1f8d3a5d.png) 图 3.56 用户管理界面 用户管理界面展示数据库中用户的信息,有用户姓名、性别、电话、email、管理员、地址、用户id。除了展示用户的信息之外,还可以对用户进行增删改查。 **(11) 增加用户** ![](assets/31add8679d0becc8670ccd0a50ae6e3a.png) 图 3.57 增加用户页面 点击页面中的新增按钮,会出现一个弹窗,弹窗中会要求输入一些必要的内容:姓名,密码、电话、Email、性别、是否是管理员、地址,初始值都为空。如表3.28所示。 表 3.28 新增用户弹窗信息表 | 属性 | 初始值 | 必要性 | | ----- | --- | --- | | 姓名 | 空 | 必填 | | 电话 | 空 | 必填 | | 性别 | 空 | 必填 | | 地址 | 空 | 必填 | | 密码 | 空 | 非必填 | | Email | 空 | 必填 | | 管理员 | 空 | 必填 | 其中密码是非必填的,因为在后台管理系统,为了用户的安全性和保密性,是不会展示用户的密码,所以,管理员在新增用户的时候,也无需设置密码,当然,如果用户需要管理人员设置密码的话,也是可以的,这样可以提高用户的便利性。 **(12) 删除用户** 点击删除按钮,会出现一个弹窗,警示管理员是否要删除该用户。如图3.57所示所示。 ![](assets/7dc4e45a8d7eedd05e5fa97b9e44dffd.png) 图 3.58 删除用户页面 点击取消删除后,会显示已取消删除,如图3.59所示。 ![](assets/224029760f1788d27e2fefc325636731.png) 图 3.59 取消删除用户页面 点击确定后,会显示用户已删除,且在页面中,数据库中都会永久删除这个用户。如图3.60所示。 ![](assets/cca7c1f81cc7041c2f396bd1e808f7a8.png) 图 3.60 确认删除用户 **(13) 修改用户信息** 点击编辑按钮,会出现一个弹窗,其格式和要填的内容是和新增用户的弹窗是一样的,都是姓名、性别、电话、Email、管理员、地址、用户id,但其都有初始值,初始值是该用户的信息。如表3.29所示 表 3.29 修改用户信息要求 | 属性 | 初始值 | 必要性 | | ----- | --- | --- | | 姓名 | 空 | 必填 | | 电话 | 空 | 必填 | | 性别 | 空 | 必填 | | 地址 | 空 | 必填 | | 密码 | 空 | 非必填 | | Email | 空 | 必填 | | 管理员 | 空 | 必填 | 修改信息的弹窗如图3.61所示。 ![](assets/d1e4d9d17afb8ce5710f88a8d43f3985.png) 图 3.61 修改信息弹窗 **(14) 查询用户** 在搜索框中,输入用户的姓名,可以查询到对应的用户信息。同时,也可以进行模糊查询,比如搜索张,可以查询到所有姓张的用户。 ![](assets/da8ccee628a77253be418e00c24014bd.png) 图 3.62 模糊查询 ![](assets/28fa7009c73fe39bb46db0a881297862.png) 图 3.63 精确查询 后台管理系统中还有房屋管理,房间管理,以及设备管理。其实现的功能与逻辑和用户管理系统是相同的,同样具有增、删、改,查功能。所以就不赘述。 # 项目总结 ## 开发历程 在开发初期,团队成员明确了各自的分工,并对相关知识进行了针对性的巩固和学习。通过定期开会和对用户期望的分析,团队不断挖掘新的功能,提出对系统实现的想法并不断完善项目的需求实现文档。 (1) 开发初期 在开发初期,团队成员明确了各自的分工,并对相关知识进行了针对性的巩固和学习。通过定期开会和对用户期望的分析,团队不断挖掘新的功能,提出对系统实现的想法并不断完善项目的需求实现文档。 (2)开发中期 在开发中期,已经完成了系统开发的整体设计,进入关键的实际开发阶段。团队成员开始部署服务器环境并完成系统的部署,实现硬件组装部署,设计前端页面和APP。最终效果是完成各个模块的衔接,大致完成整个项目。 (3)开发末期 开发末期是测试及完善阶段,包括增加一些创新性的功能,前端页面的美化,系统的优化以及撰写文档。 档。 ## 项目展望 通过本次比赛,团队成员们提高了实际动手操作能力,学习到了很多课外知识。团队在沟通交流存在一些困难,但是通过积极沟通和互相帮助,困难被逐一解决。 本项目还有提高的空间,可以做得更加完善和创新。团队将会继续深入调研用户期望,接入更多的家居电器设备;同时,为了提高项目整体的响应速度,可以提高服务器的配置;从提高串口速率或优化算法房间优化串口数据堆积的现象;优化前端页面,提高用户的使用体验。 ## 过程感想 通过本次开发,团队的每一位同学都收获颇丰。在开发之前,每一位同学之间都彼此不是很熟悉,但是经过多次的开会交流和汇报自己的学习工作、对项目的想法以及在开发过程中遇到的问题,团队最终共同解决了相关的技术难点并统一了项目的实施方案。在此次开发中,团队的每一位同学不仅加深了对开发技术的掌握,而且对其他不同的技术领域也有了具体的了解。