自建智能家居,使用Django+ESP8266+MQTT实现

一直想自己做一套还算有实用性的智能家居系统,恰逢毕业,将此想法落地,本篇将简单描述MyHouse智能家居系统的实现方法。

一、技术选型

1. 后端:

后端采用个人更为熟悉的python-django框架作为纯后端,负责为前端提供服务,使用paho-mqtt接收硬件设备上传的数据、并向设备发送用户传达的指令。

2. 前端:

前端采用Layui框架,其提供了较为完整的响应式UI组件库,并且为传统JS的设计模式(与现代Vue.js的MVVM架构所区分),对后端人来说,更容易上手。

使用JQuery做各种DOM操作、发送Ajax请求,虽然缺乏优雅,但胜在易理解,好操作。

使用Echarts实现数据可视化中的图表等,通过快速的阅读文档、查看例程,即可快速上手实践。

3. 数据库:

使用MariaDB作为关系型数据库,使用Redis作为缓存,存储临时数据的同时,也为MariaDB分担一些压力。

4. MQTT服务器:

使用Mosquitto作为MQTT服务器,部署方便,配置简单,对服务器负载相对较小。

5. 开发板:

使用乐鑫ESP8266-12E NodeMCU作为开发板。这款单片机提供了相对稳定的Wi-Fi连接功能,支持TCP/IP协议栈,可以很方便的进行网络通信。支持MicroPython与Arduino平台开发,在有基础的前提下,可以快速学习、开发。他也引出了所有引脚,对于单独操作某个智能家居执行器,也基本够用。

自建智能家居,使用Django+ESP8266+MQTT实现_第1张图片 基本设计​​​​

 二、逻辑实现

因为此前没有涉及过Web端的实体控制,所以思考这个逻辑还是花了一些时间的。

1. 基础数据交互:

这一块,类似普通网站的登录注册、浏览等功能,是Web应用的基本功能,遵循固有模式设计。

2. 硬件数据交互:

收:

此模块不同于普通站点,涉及了非HTTP协议的建立,且需要后端长时间与MQTT服务器保持连接。故需要一个任务随后端服务启动,与MQTT服务器建立连接,接收到数据后,分析,存储。该任务,随后端启动,但不经过wsgi网关、urls解析与View,但通过Model操作数据库。

发:

在接收到数据并解析后,立即检索是否存在设备联动的情况,若存在,则通过MQTT服务器向从设备发送对应指令。

当后端接收到用户在前端发出的指令后,解析对应设备和状态,在View中使用paho-mqtt通过MQTT服务器向设备发送指令。

3. MQTT消息订阅规则:

首先,每个设备需要自己独立的几个主题以避免发生数据误收,故借助ESP8266的MAC地址作为唯一身份标识,作为用户-设备绑定、发布/订阅主题的依据。

设备发,后端收:esp8266/+/state

设备收,后端发:esp8266/+/ctrl

设备上下线(遗嘱),后端收:esp8266/+/will

4. 设备联动:

数据库设计是这个模块最重要的一环,影响着数据解析、页面设计以及功能的高效实现。

“当设备A采集的B型数据,与C条件满足逻辑条件D时,E设备的F状态设为G”,

如:当<温湿度计>采集的<温度>,与<30(摄氏度)>满足<大于关系>时,<门窗开关>的状态<角度>设为<45(度)>

分析逻辑后,对条件进行抽象,可提取出关键性字段,存入数据库中,合理设置非主键索引,便于查询。


至此,系统运行逻辑基本完成,可根据各模块所需技术栈分别进行代码编写,完成相应功能。

你可能感兴趣的:(物联网,iot)