APP下载

基于ZigBee与MQTT的控制系统*

2021-07-14郑璐豪邓世杰

机电工程技术 2021年4期
关键词:继电器用电框架

郑璐豪,邓世杰,阳 韬

(华南理工大学广州学院计算机工程学院,广州 510800)

0 引言

在智能联网的时代里,物联网正处于高速发展中,随着需求的不断增多,越来越多可节省人力的组件应该被实现。而在诸多的用电器密集区域如商场、工厂、高校教学楼以及宿舍单位中,其用电设备都会有管理困难、用电数据模糊,甚至是一些有着高危险系数用电器的工厂。而这些场景都可以依靠该项目中的系统搭建出一套体系,该系统提供数据可视化,远程集中管理,智能开关用电设备。在降低人力成本的同时还能降低资源的消耗,同时对与较为危险的工厂可很大幅度地降低其危险系数。

因此,本文设计一种基于ZigBee与MQTT的控制系统,实现上述功能。整套系统为了兼容多栋、多层、多间的场景以及便于管理,采用分布式设计,通过上层控制机对多个下层控制机管理来实现,并且所用的软件其搭建的框架也能够多系统运行,对微机的要求降低并且兼容性也更高。为了顺应移动智能设备的发展,该套系统使用uni-app开发出对应的网页版、小程序等等多种版本,让教室的管理人员和预约人员都能用手机等移动设备做到远程控制、远程监控或远程申请。直接点触控制的方式能让使用者更加便捷地使用该系统,同时也符合现代科技发展的趋势。

1 系统整体结构

系统整体由用于存放前后端以及数据库的云服务器、运行在Linux微机或树莓派上的MQTT服务器,以及和用电器互通的硬件集群3大模块组成,如图1所示。

图1 总体布局

为了满足外网可访的需求,故采用了云服务。其中云服务主要构成为前后端、数据库。而采用云服务器最大的优点是可以获取一个公网IP搭配域名解析直接访问网站。用户通过访问该服务器下的相关功能界面进行页面的请求发送,并获取服务器返回的相关数据。同时将数据库放置云服务器便于后端的访问,且提高了数据的安全性。

为了降低成本,MQTT服务器则是搭建在一台处于局域网内的Linux微机或树莓派上。此服务器中有着能通过MQTT接收发送相关数据的Qt程序,同时服务器通过直接获取云端数据库的信息,通过实时监听数据库将改变后的数据发送给硬件集群,实现指令发送。并且在硬件部分有相关任务被执行后也会将数据传回数据库作更新操作。

在硬件方面,主要采用可联网STM32控制板和ZigBee无线传输模块以及继电器组成一整个控制体系。在无线传输模块收到无线信号将数据传至控制板处理,并将处理结果以高低电平的方式作用于继电器上使继电器开闭,达到用电器开关。

整套系统数据走向清晰,层级分明,通过将物联网与小程序相结合,在便于客户使用的同时也符合科技发展趋势。

2 前端界面

该项目在前端上有H5端以及该H5端对应的一个后台管理系统(PC端),在H5端上采用了uni-app框架进行开发[1],因为考虑到后续可能还有小程序端、APP端,所以就采用了uni-app这个跨平台框架,该框架是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、H5,以及各种小程序等多个平台。

后台管理系统使用了Vue.js框架配合Element-ui组件库进行开发。H5端以及后台管理系统都使用axios作为网络请求库,并且在开发上遵循组件化和模块化的开发思想,组件化能提高前端代码的复用性及阅读性。模块化是指根据业务的需求将代码进行隔离成独立的模块,这样能让后续的项目更好地进行维护,也满足高内聚、低耦合的软件开发思想。

3 服务器部分

3.1 前后端服务器

该项目在服务端使用node.js的egg.js框架进行开发,egg.js是一个由阿里巴巴开发的基于Koa现有约束和规范的“企业级web开发框架”,该框架现在也广泛使用在阿里内部的项目里。这个框架也做了很多安全的防范,比如帮助防止csrf攻击。更重要的是egg.js按照一套统一的约定进行应用开发,有了制定好的约定,不需要团队去协商制定规范进行开发,这样可以减少开发人员的学习成本,防止因为规范协商问题造成沟通成本的提高。

在操作数据库上,不再使用传统的sql语句进行操作,而是使用Sequelize,它是一个基于promise的Node.js ORM。sequelize本质上是对sql语句上进行了封装[2],而使用sequelize能帮助通过代码进行建表,以及模型关联,联表查询,从而提高开发效率,如图2所示。

图2 前后端服务器

由于该项目为前后端分离结构,所以前后端的代码分别部署在两个服务器上。服务器采用了阿里云的ecs云服务器。但是在前后端分离的项目里,前端向后端发起请求的时候,会产生跨域,而跨域是出于浏览器的同源策略的限制,同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互,“协议/一级域名/二级域名/端口号”有一个不同就是跨域。而解决办法可以通过后端服务器去设置允许前端跨域的地址,或者在前端通过方向代理的方式去解决,而使用方向代理用户不知道自己真正访问的是谁,只知道自己访问了一台服务器,然后通过这台服务器去分发到其他服务器,而请求都是这台服务器分发的,所以也就解决了跨域的问题。

3.2 MQTT服务器

MQTT服务器在该项目中充当一个数据桥梁以及数据格式转换的角色。在该服务器中除了要运行MQTT的服务组件外,还要运行由Qt框架[3]所搭建的MQTT数据桥梁接通程序。该程序也是所有MQTT服务器中客户端的一员,充当数据的“接收发员”。该程序采用开源的emqx/qmqtt的开源模块[4]交叉编译构成MQTT的客户端模块组件进行编写,并采用MySql的Qt官方驱动于数据库进行对接。程序直接连接云服务上的数据库,由于Qt与MySql的库文件中没有数据库实时监听的模块[5],固采用“伪监听”的方式实时关注数据库的改动,通过定时器设定每秒查询一次当前状态表中的关键字段,与旧状态表中的记录作比较,若比较结果不同,则在对应主题下发送对应的变动指令,同时修改旧状态表。硬件部分在执行完相关指令后会反馈相关数据,数据在被Qt程序截获后会被转化为对应的操作记录写入日志中保存。

若硬件端所连的用电设备被人为手动开关,则根据硬件的设计,在人为开关后都会返回一个反馈信息,当程序的一个特定订阅反馈信息的客户端收到该反馈信息后会根据回传数据生成对应的修改数据库命令直接更新数据库的对应字段。

同时程序也有对应的定时功能,用户可以自主设定时间,在固定时间内自动发送关闭或开启命令,可执行全部关闭或按类别关闭,并且程序会自主维持一个长运行操作,会在每日12点整的时候作重启动作,将所有客户端重置后重新连接,达到message编号归零的操作,如图3所示。

图3 MQTT服务器

在这里展示项目中的教室控制案例中的数据格式。在数据格式上采用JSON数据格式,通过协商好的键值对,如表1所示。

表1 系统控制指令格式

4 硬件部分

4.1 电路结构

本系统的硬件部分是通过STM32单片机接收MQTT的消息,然后使能继电器,进而控制电器开关来实现的。

继电器的工作原理是将一个简单回路的一根导线一分为二,导线一端连接继电器公共端,另一端连接在继电器常开端。当继电器接收到使能信号,继电器的公共端和常开端连接在一起,将电路恢复到正常状态。

传统电器开关大多是用单刀单掷开关,配合继电器的使用会出现一种状况:用户需要手动控制开关,但是MQTT服务器没有发送消息,继电器没有被使能,导致用户无法正常使用电器。针对这种情况,本系统对电器开关进行一些改进。

本系统使用单刀双掷开关作为继电器和电器开关[6],单片机引出两条导线,一条导线连接到继电器,为继电器提供使能信号;另一条导线连接在电路,作为电流检测,如图4所示。当电路是通路或者断路时,单片机会识别出当前电路状态,然后反馈到MQTT服务器。用户手动控制开关不受影响,同时服务器也能知道当前电器状态。

图4 开关改进

4.2 STM32单片机

STM32单片机是硬件结构的核心部分,搭载LAN8720A以太网卡配置物理层,使用Lwip轻量IP协议配置数据链路层、网络层、传输层。当STM32单片机连接上以太网之后,配置相关信息进而连接上MQTT服务器,单片机和服务器可以相互收发消息。

STM32单片机和MQTT服务器通信时使用JSON数据格式,单片机调用cJSON库可以对数据进行解析和打包[7]。

4.3 ZigBee

在一个场景中并不需要所有电器设备都要入网,只需要至少一个联网设备接收MQTT服务器的消息,然后使用ZigBee自组网将数据转发出去[8],也能达到控制的目的。ZigBee无线传输技术在物联网中也是经常使用到的技术。

5 结束语

本文设计的控制系统经过实践操作,利用高校中的教学楼作为实践对象,顺利通过测试。经过测试,与传统的教室控制系统相比,在使用服务器以及路由器的搭桥之下实现了根据课表时间自动控制用电设备的开关,通过指令的方式控制教室中的用电器开关并返回相关用电设备的用电情况,比传统的系统更加智能,也大大降低了教室用电成本以及人力维护成本。该系统也可用于其他场景,具有一定的经济和社会效益。

猜你喜欢

继电器用电框架
框架
用煤用电用气保障工作的通知
安全用电知识多
广义框架的不相交性
继电器控制及诊断在电动汽车动力电池包的应用
便携式继电器测试台的研制和应用
为生活用电加“保险”
用电安全要注意
继电器在电气工程及其自动化低压电器中的作用
关于原点对称的不规则Gabor框架的构造