基于MQTT的ESP8266家庭自动化系统外文翻译资料
2021-12-23 22:43:12
英语原文共 6 页
基于MQTT的ESP8266家庭自动化系统
会议论文·2016年12月
内政部:10.1109/R10-HTC.2016.7906845
引用:17 阅读:4201
作者:
Ravi Kishore Kodali Sreeramya Soratkal
国家技术研究所,瓦兰加尔 国家技术研究所,瓦兰加尔
出版物87篇 出版物4篇
论文328篇 论文27篇
基于MQTT的ESP8266家庭自动化系统
Ravi Kishore Kodali和Srereamya Soratkal
电子与通信工程系
国家技术研究所,瓦兰加尔
瓦兰加尔506004 印度
摘要:由于自动化工业和无线连接的蓬勃发展,家庭中的所有电子设备都可以连接起来。这提高了生活舒适性,能源使用效率,室内安全性,并且节省了家庭生活成本。小型且特定功能的嵌入式设备被用于远程监控家庭环境和控制家用电器。在这种情况下,设备功耗和网络带宽成为应用的主要问题。我们需要一种通过不那么冗长的协议传输消息的低功耗设备。由于WiFi的通用性,家庭中的所有电器都可以通过一个公共网关连接。本文概述了一种轻量消息队列遥感传输(MQTT)协议。在设计的原型中,我们尝试在基于WiFi通信的开发板ESP8266上实现MQTT协议。将传感设备和执行设备一起连接到ESP8266上,并建立了基于Mosquitto(一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件)的MQTT代理,用于远程监控和控制。
关键词:消息队列遥感传输(MQTT),ESP8266,Mosquitto,家庭自动化
一、引言
家庭自动化是指远程监控家庭状况并执行所需的程序。通过家庭自动化,每台家庭设备(如电视、灯泡、风扇等)被分配一个唯一的地址,并通过公共家庭网关进行连接。这些设备可以通过任何个人电脑、移动设备或笔记本电脑进行远程访问和控制。这可以大大减少了能源的浪费,改善居住条件,同时提高了室内安全性。
由于科技的飞速发展,这些设备在近年来变得越来越智能。如今生活中的设备都配备了智能系统和计算能力,所以它们可以进行相应的可编程控制。嵌入式设备中的传感器以及低功耗无线连接方式便可用于远程监控设备。这是物联网网络的基本组成部分。物联网可以被视为一个无线连接的设备网络,以便它们根据预先定义的规则进行通信和控制。然而,这些设备在资源容量方面受到限制。因此,轻量级协议(如MQTT、CoAP等)便被用于无线连接上的数据传输。无线模块种类繁多,其中GSM、3G、WiFi、蓝牙、ZigBee等都很常见。由于目前WIFI热点的数量和覆盖范围的激增,使其足以执行所需的控制和监测功能,因此在原型设计中选择WIFI作为通信模式,通过使用ESP8266实现MQTT协议进行设备控制。
本文的组织结构如下:第二节简要介绍了MQTT协议。第三节讨论了该领域已经实现的相关产品。第四节简要介绍了网络设置、所用硬件和软件的设计细节。第五节讨论了开发原型的应用结果。第六节给出总结和未来的应用前景。
二、消息队列遥感传输
消息队列遥感传输(MQTT)是一种轻量传输协议,它有效地使用了具有2字节固定标头 [1] 的网络带宽。MQTT在TCP上工作,并确保将消息从节点传递到服务器。作为一种面向通信的信息交换协议,MQTT非常适合功能和资源容量有限的物联网节点。MQTT最初是由IBM公司 [2] 于1999年开发的,最近被结构化信息标准推进组织(OASIS)[2] 确认为通信标准。
MQTT是一种基于发送/接受的协议。任何MQTT连接通常都涉及两种代理:MQTT客户端和MQTT公共代理或MQTT服务器。由MQTT传输的数据称为应用程序信息。任何连接到网络并通过MQTT交换应用程序信息的设备或程序都称为MQTT客户端。MQTT客户端可以是发送服务器或接受服务器。发送服务器发布应用程序消息而接受服务器接受应用程序消息。MQTT服务器是连接MQTT客户端的设备或程序。它接受消息并向连接到它的多个客户端中传输应用程序消息。传感器、手机等设备可作为MQTT客户端。当MQTT客户端需要发送某些特定信息时,它会将数据发送到MQTT代理。MQTT代理负责进行数据的收集和整理。由MQTT发送客户端发布的应用程序消息被转发到其他MQTT接受客端中。MQTT旨在通过集中代理的方式来简化客户端的操作。发送端和接收端都是独立的,这意味着设备不需要关心其他设备的存在和使用。
在传输应用程序消息之前,控制数据包是根据与之相关联的QoS进行交换的。MQTT控制数据包由固定标头、可变标头和有效负载组成。CONNECT, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL, SUBSCRIBE, SUBACK等,都是在MQTT客户端和MQTT服务器之间交换的一些MQTT控制数据包 [4]。MQTT中的“主题”提供路由信息。每个主题都有一个主题名称和相关的主题级别。一个主题树中可能有多个主题级别它们由“/”分隔。通配符例如“#”和“ ”用于匹配主题中的多个级别。以队列系统为特色,如果客户端脱机,MQTT服务器将缓存所有消息,并在会话启用时将它们传递给客户端。
A. 建立连接
在MQTT客户端和MQTT服务器之间成功建立网络连接后,在客户端和服务器之间交换控制数据包。试图连接到MQTT服务器的客户端向服务器发送一个连接数据包,指定其标识符、标志、协议级别和其他字段。服务器通过连接数据包确认具有指定标识符的客户端,并返回代码表明连接状态。
图1. 建立、保持和终止MQTT连接
B.发布应用程序数据
如果客户端申请成为发送服务器,它会向服务器发送一个发布数据包。此数据包包含有关传输的QoS级别、主题名称、有效负载等的详细信息。MQTT支持向客户端提供三个级别的服务质量(QoS)[5]。如果应用程序消息以QOS 0传输,则客户端不会收到已发布数据包的任何确认。对于QoS 1,服务器确认发布的带有PUBACK的包,包括分组标识符。然而,在QoS 2中,交换了四个数据包,服务器确认接收到带有PUBREC包的发布数据包。接着,MQTT客户端发送一个用pubrel包发布的数据包,最后,服务器发送第四个数据包PUBCOMP,表示在给定的主题上发布应用程序消息的完成。
C.接受主题
如果MQTT客户端想要接受主题上发布的应用程序消息,它将发送接受数据包和以UTF-8编码表示的主题名称。服务器使用子数据包确认接受,并返回指示请求状态的代码。一旦接受成功,指定主题上的应用程序消息将以最大的QoS转发到客户端。如果要取消接受主题,客户端将向服务器发送一个取消接受数据包,服务器将使用取消接受数据包对其进行确认。
图2. 使用各种QoS将消息发布到服务器的客户端
D.保持连接状态
在一定的时间后,客户端和服务器之间会终止连接。 为了保持连接状态,客户端会向服务器发送PINGREQ数据包来表示它仍是活跃的。 MQTT服务器使用带有PINGRESP数据包的指示标识符响应客户端,并保持连接状态。
图3. 客户端接受与取消接受主题
E.终止连接
如果需要终止连接,MQTT客户端会向服务器发送DISCONNECT数据包。服务器不会确认此数据包,但是,服务器会将与客户端相关的所有应用程序信息清除,并断开客户端与服务器的连接。
图4. 通过MQTT传输信息
三、相关文献
在[6]中,作者讨论了现有的家庭自动化体系结构,并提出了一种新的家庭自动化体系结构,为所有新的物联网协议提供了方向。在[7]中,作者设计了一个通过短信息系统实现家庭自动化的方案,使用微控制器将GSM网络和设备进行桥接。它还着重于网络安全方面,提出了一个安全、可靠、适应性强的家庭自动化系统。在[8]中的研究表明,对于资源受限的节点,MQTT优于HTTP。事实证明,当使用3G速率进行网络连接时,通过MQTT传输数据的功耗只有0.05%/h。
四、实际操作
A. 网络设置
使用连接到ESP8266开发板的LDR传感器检测光强度。ESP8266开发板处理传感器数据并执行程序,它作为通过WiFi进行数据传输的网关。将ESP8266配置为MQTT客户端,将传感器数据发送到MQTT代理,并订阅控制驱动的命令。样机采用LED和蜂鸣器作为执行器。ESP8266模块发送主题为#39;esp \ sense#39;的传感器数据。它接受主题#39;esp \ led#39;和#39;esp \ buzzer#39;的接受命令来控制连接到ESP8266的GPIO的LED和蜂鸣器,为ESP8266设置MQTT mosquitto broker以发送和接收应用程序消息。其他MQTT客户端(如PC和移动设备)可通过以太网,2G,3G,WiFi等现有通信技术连接到MQTT服务器。
图5. 网络设置
B. ESP8266
ESP8266 [9]是一款低成本开发板,集成了GPIOs,I2C,UART,ADC,PWM和WiFi功能,可以实现快速原型设计。ESP8266采用3.3V电源供电,ESP8266与稳压器和USB转串口一起封装在ESP-12模块中。可以通过Arduino IDE或基于Lua的ESPlorer在此开发板上开发应用程序。
图6. 基于ESP8266的NodeMCU开发板
C. 软件设计
使用Arduino IDE编程将ESP8266模块设定为MQTT客户端,Mosquitto [10]是一个开源的MQTT代理软件,可以在Windows操作系统的计算机上运行。它使用mosquittopub和mosquittosub两个服务来发送和接受应用程序消息,MQTT-broker和bro-ker URL与安装在端口1883上的PC主机IP的Mosquitto broker一起设置。
五.结果与讨论
使用Mosquitto设置MQTT服务器,在设置服务器并启动服务后,可以在命令提示符下查看应用程序消息的发送与接收。所有拥有授权的MQTT客户端都可以使用其主机IP和端口1883的ID将数据发送或接收此服务器上。传感器数据由ESP8266模块整合并发送到主题为“esp/sense”的MQTT代理服务中,所有订阅过此主题的 MQTT客户端都可以查看传感器数据。在正确的主题上发送可执行
的控制命令来可以打开和关闭连接到ESP8266的LED和蜂鸣器。交换的MQTT信息可以通过MQTTLens和MyMQTT安卓应用程序进行抓取。可以同时使用通配符( 或#)控制多个执行设备。
图7. 安卓程序上的MyMQTT 图8. MQTTLens上的应用程序信息
应用程序信息
六、结论及今后工作
MQTT是一种如此轻量的协议,不仅占用带宽低,工作功率也很低。基于WiFi无线互联网接入的便利性,将MQTT客户端应用程序构建在ESP8266上。在ESP8266上实现了基于MQTT协议的家庭自动化系统原型,连接到ESP8266的传感器和执行设备可通过公共家庭网关进行远程监控。因此,现有的基础设施可用于增强家用电器的功能并使其智能化。该项目提出了一个智能、舒适、节能的家庭自动化系统的方案。它还能帮助老年人和残障人士更好、更容易地控制他们家中的电器。
更进一步考虑,基于网络的云平台可以用于整合、分析并将数据可视化。也可以开发定制化的图形用户界面来远程监视和控制各种设备。
参考文献
[1] MQTT v3.1协议规范,网络,网址:http://public.dhe。ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html
[2] Hivemq,网络,网址: