基于Wi-Fi SoC及阿里IOT平台的智能家居控制节点设计
2021-06-28龙顺宇周仁佳杨伟林道锦
龙顺宇,周仁佳,杨伟,林道锦
(海南热带海洋学院,海洋信息工程学院,海南三亚,572022)
0 引言
随着IOT领域相关技术的不断发展,智能家居控制节点的形态日趋多样[1]。在场景应用中,节点间相互联系,构成了信息交换网络以实现家居环境参数测量、设备控制、网络通信、信号转换等具体功能[2]。系统节点增加后,控制难度相应增加,接入方式也需要根据实际情况进行适配,所以近距离的通信、组网技术成为了家居应用的研究热点,Wi-Fi作为近距离通信、组网技术中的一种,仍占主导[3]。本文基于乐鑫信息科技公司的Wi-Fi SoC方案ESP8266芯片搭配STC8单片机及外围电路构成了个性化的家居控制节点,可以方便的构建测控节点网络,再辅助以阿里IOT云服务器、PAD终端或手机客户端即可完成家居控制。
1 系统框架及功能设计
本文设计的控制节点可在小范围内组网,进行局域控制,也可以连接到家居无线路由器访问外网,内外网的访问都是透明的,整个系统框图如图1所示,大体上可以分为“云下部分”和“云上部分”。云下部分是节点的实体,包含ESP8266模组、STC8单片机核心、开关量电路单元(如继电器)、模拟量电路单元(如可控硅)等。云上部分是控制得以实现的重点部分,因为每个节点都已经IP化、地址化,所以无线路由就能将其连接成特定拓扑形式的网络,最终通过Wi-Fi连接至阿里IOT云服务器,云端平台与ESP8266之间用MQTT协议通信,该协议非常精简、易于实现,在控制功耗和节省带宽上均有很好的性能[4]。阿里IOT云平台为MQTT消息代理,负责主题订阅管理、消息转发和缓冲,实现控制节点与数据采集中心的信息交互(如继电器控制、可控硅控制),系统通过发布和订阅MQTT报文与阿里IOT云服务器进行数据通信,在内网通过手机云智能APP实现了用户的个人信息管理、设备的个人配网绑定,并可进行内外网切换,跨时间、跨地域的进行家居设备的控制。
图1 家居控制节点系统框图
基于节点架构,在场景设计中还可以添加其他云上控制形式,例如可以通过Web客户端和平板APP设计控制界面实现远程控制,Wi-Fi模块接收到报文数据后,再向单片机发送信号,单片机经过对信息的处理,最终输出开关量或者模拟量对接后续电路,实现电器管理与控制,这样一来,家居设备就能实现物物互联,工作在一定的控制策略和逻辑之下。
2 硬件单元设计
本设计以ESP8266模组作为Wi-Fi通信核心,实际选择开关量控制方式,通过相关技术论证和架构分析之后,搭建了云下部分的硬件系统,其电路原理如图2所示。系统可划分为三个核心组成单元,即:ESP8266 Wi-Fi单元连接、STC8单片机主控单元以及继电器控制单元。硬件系统采用5V供电(实际由USB口供电)待机功耗小于20mA,运行功耗小于150mA,节点通过内网和外网相结合的方式控制家居设备,有效的解决了远距离控制设备的问题。
图2 家居控制节点整体电路原理图
2.1 ESP8266 Wi-Fi模组连接
ESP8266是一款超低功耗的异步串行通信接口无线Wi-Fi芯片,应用于移动设备和物联网设计,由它解决STC8A8K64S4A12单片机联入网络的需求。实验中采用ESP8266模组,模组上自带必要外围电路和2.4GHz印制线路天线[5]。ESP8266通过连接无线路由器加入网络,继而访问阿里IOT云服务器。在透明传输模式下,作为TCP客户端同服务器进行交互。
ESP8266核心模组的接口非常丰富,支持UART、PWM、GPIO以及ADC;支持UART串口与单片机连接,可以实现串口到Wi-Fi无线网络之间的控制信号转换,支持串口透传,内置了TCP/IP协议栈和MQTT协议栈。模组支持三种组网模式,即:Station模式、Soft AP模式和Soft AP+Station模式。Wi-Fi模组的作用是让整个控制节点与云端连接,完成无线信号与串口信号之间的转换。实验中的节点选择了Soft AP+Station模式。
2.2 STC8单片机主控单元设计
本设计采用1T增强型MCS-51内核的STC8A8K64S4A12单片机完成对数据的处理以及云端通信,该单片机具兼容传统8051单片机系列,内部集成了高速RC振荡器,只需在烧写程序时配置STC-ISP选项即可对相关参数进行配置,考虑到单片机长时间与ESP8266模组进行异步串口通信,此时对波特率精度要求较高,故而电路设计中仍保留了外部石英晶体振荡器电路。该型号单片机自带4组独立的异步串行通信接口,可用于ADC数据采集扩展与多Wi-Fi模块扩展。硬件设计中分配串口2为ESP6288模组与单片机的串口通信端口,预留串口1与ADC转换接口方便程序下载和后期模拟信号采集扩展。单片机的P1.0和P1.1引脚与ESP8266模块的TXD和RXD两个引脚交叉相连,实现UART通信。
2.3 继电器控制单元设计
继电器控制单元主要是控制家用电器等负载设备。电路添加PC817光电耦合器对后级电路进行隔离,分配P0.2引脚控制光耦的开关信号端,为了进一步增加驱动能力,光耦的开漏输出端接了一级三极管开关电路(三极管选用SS8050)。若三极管正偏,则继电器吸合,反之断开。家居设备默认接在继电器的常开端以防止上电误动作导致的闪断。
3 系统软件设计
软件设计的重点在于ESP8266模组的网络配置,主要功能包括ESP8266模组自动连接无线路由器、通过MQTT协议实现ESP8266模组与阿里云IOT云服务器进行数据通信功能。云下平台上电之后会等待远程控制信号,当主控单片机收到控制信号之后会进行分析判断,再控制节点执行不同操作。
3.1 ESP8266模组自动联网程序设计
为保证ESP8266模组与无线路由器的自主通信和在线保持功能,程序默认开启了ESP8266模组的自动联网模式,并在程序中事先保存无线路由器的SSID名称和PassWord密码参数,将相应的信息写在程序中,保存成对应的AT指令字符串形式,最后由STC8A8K64S4A12主控单片机将AT指令发送给ESP8266模组以完成自动联网功能。成功连接无线路由器之后,无线路由器会通过DHCP功能为节点分配IP地址。ESP8266模组自动连接路由器的主要功能源码如下:
3.2 MQTT对接阿里IOT云服务器程序设计
MQTT是消息队列遥测传输的英文缩写,其英文全称为Message Queuing Telemetry Transport。该协议是由IBM公司撰写的适用于物联网通信的传输协议。MQTT协议工作在TCP/IP协议簇上,通过发布/订阅的范式工作,可适配硬件性能低的远程设备以及网络状态不良的情况。其定义对象为MQTT客户端与MQTT服务端。其中MQTT服务端是整个以MQTT协议为基础的通信网络系统的核心,本文的系统使用的是阿里云IOT云服务器作为MQTT协议的服务端,以受控设备端和移动手机端来实现系统中发布与订阅两者之间的关系,系统订阅和发布的基本流程如图3所示,整个通信过程主要包括以下三个部分:
图3 系统信息订阅与发布流程
(1)构建连接。在受控设备端与移动手机端建立可靠连接的基础上,受控客户端会给阿里云IOT云服务端发送CONNECT连接报文,请求与阿里云IOT云服务端建立连接,在阿里云IOT云服务端同意构建连接的同时,会给客户端回复CONNACK确认连接报文同意连接,并且成功建立客户端与服务端的连接。
(2)主题订阅。在客户端与服务端成功连接后,客户端会给阿里云IOT云服务端发送SUBSCRIBE订阅主题报文,阿里云IOT云服务端会验证发送的订阅报文是否是正确,并返回一个结果值。
(3)消息发布。在客户端与服务端成功连接后,客户端会给阿里云IOT云服务端发送PUBLISH报文来发布消息,这里首先是移动手机端向阿里云IOT云服务端发送控制智能家居的控制命令,阿里云IOT云服务端收到命令之后将这些控制命令推送给智能家居设备控制客户端,以此实现远程控制智能家居的功能。
若将系统信息订阅与发布的过程程序化就可以得到如下源码:
4 客户端APP设计与系统实测
为更好的适配手机端应用,本设计在Eclipse环境中运用Java语言编写了安卓手机APP软件,其操作界面如图4所示。系统运行时先将云下平台上电,保证家居路由器正确访问外网,等待ESP8266模组通过MQTT协议连接到阿里云IOT云服务端,若系统正确连接到云端,打开APP后应能看到“继电器”对象显示“在线”状态,此时点开控件进行继电器开关操作即可,手机端的操作最终会变成消息传送到云平台,再由云平台传给节点所在的ESP8266模组,最终控制云下平台的实体继电器开关。经过实测,移动手机端可在APP上远程操控家居节点,平均网络延迟小于5秒,操作正确率优于95%,至此完成了系统功能验证。
图4 云智能APP的操控界面
5 结语
本设计作为单片机类电子工艺实训项目在实际实验中取得了较好的效果,通过本文设计的云上平台和云下平台,可以实现用户对家居的远程控制。设计中使用的ESP8266模组本身也是个32位的微处理器核心,完全可以在其内部编写专属软件,自行连接个性化云服务平台,利用MQTT访问云端后台,通过系统信息订阅与发布实现信息双向传递。还可以继续扩展APP功能,做成多用户、多节点的统一管理,以适配不同规模的智能家居测控应用。