基于微信的智能家居控制系统的设计与实现
目 录
1 绪论 6
1.1 课题研究的背景 6
1.2 智能家居系统的研究现状和发展前景 6
1.3 课题研究的意义 7
1.4 设计的研究内容 8
2 相关理论和技术介绍 8
2.1 微信小程序 8
2.2 腾讯云服务器 10
2.3 Websocket传输协议 11
2.4 嵌入式Linux系统 12
2.5 ZigBee技术 12
2.6 相关传感器 14
3 总体设计方案 16
3.1 系统方案选取 16
3.2 系统设计环境选取 18
4 系统硬件设计 20
4.1 硬件方案内容 20
4.2 芯片选型 20
4.3 网关模块部分设计 22
4.4 ZigBee终端模块部分设计 24
5 系统软件设计 27
5.1 微信小程序客户端程序设计 27
5.2 云服务器的搭建、配置和程序设计 32
5.3 Linux程序设计 39
5.4 ZigBee模块程序设计 41
6 系统调试与测试 43
7 设计总结与展望 44
7.1设计总结 44
7.2设计展望 45
1.4 设计的研究内容
本课题的主要研究内容是设计出一种基于微信小程序的低成本、可靠性高、实用性强的智能家居系统,在分析和对比传统智能家居的缺点和发展现状的基础后,综合扩展性、灵活性等因素,本系统的整体方案分为四部分:
(1)微信小程序客户端:用户可以通过该客户端实时查看自己家中的温度、湿度等数据,并可以下发各项命令用于控制各终端设备,通过Websocket与云服务器端进行连接。
(2)云服务器端:该部分充当整个系统的桥梁纽带作用,服务器端采用MySql用于存储用户信息、设备数据等,采用Radis对相关数据进行缓存,采用Nginx反向代理服务器用于接受客户端和网关设备的连接请求,处理并返回相关请求的数据。
(3)智能家居网关:该部分主要包括基于Linux的嵌入式系统的ARM处理器和ZigBee协调器,两者通过串口进行数据传输,协调器通过ZigBee协议与其他终端设备进行数据传输,由此可将终端设备的数据传至云服务器的数据库中,并将用户的指令下发至终端节点。
(4)智能设备终端:该部分主要由传感器和ZigBee通信模块组成,是整个系统的数据来源,也是智能家居中最重要的、与用户体验最接近的一部分。
将以上四部分组成一个较为完整的嵌入式智能家居系统。
3 总体设计方案
3.1 系统方案选取
智能家居从最初简单的家庭灯光控制,到后来的智能家电控制,在发展到现在的智能穿戴和智能机器人等,智能家居的概念已经不仅仅停留在家居生活中。从早期的电力线载波通信和总线技术通信发展到现在的无线技术通信,再到现在第四代的基于IP技术的智能家居,出现了针对用户客制化的多种智能家居解决方案,本课题针对若干传统智能家居方案进行分析,并基于一种较为合理和创新性的方案进行研究。
传统智能家居方案1:
该方案采用Wi-Fi通信技术使终端节点与网关进行数据传输,是智能家居系统解决方案中比较成熟也比较常见的方案,利用单片机等采集传感器的数据并转换为数字量封包发送给网关,由网关进行统一的解析和数据处理,并由网关进行情景分析和判断,并通过Wi-Fi将控制指令发给家电实现智能化控制。
方案优点:Wi-Fi技术较为成熟,方案简单易于实现,无需重新布线,安装方便灵活,扩展性良好。
方案缺点:Wi-Fi技术频段在当下应用范围广泛,容易与其他应用出现同频干扰或临频干扰等问题;组网方式单一,信号覆盖等问题较大,面积较大时需采用中继器等扩大信号覆盖范围增强信号强度;控制均由网关进行控制,用户操作不方便。
方案结构示意图如图3.1所示。
图3.1 传统智能家居方案1方案结构示意图
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
(2)添加PHP脚本的支持,用于提供外部应用接口。
location ~ \.php$ {
# root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
(3)配置Websocket通信支持,
location /websocket/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400s;
}
}