本文内容参考:
《ESP32-C3 物联网工程开发实战》
特此致谢!
一、远程控制的介绍
什么是远程控制?顾名思义,远程控制就是远距离控制,是指控制设备(如智能手机、计算机等网络设备)通过广域网控制被控设备的行为。远程控制不受地域的限制,比如某个人可以在异地(如公司、外地等)通过智能手机控制家中的智能灯。远程控制的控制设备和被控设备一版都需要连接到云服务器,控制设备发送的控制命令交由云服务器,再转发至被控设备上。
实际上,远程控制和本地控制很类似,本地控制是局域网内的数据通信;而远程控制是广域网的数据通信。本地控制内的服务器端可以是被控设备本身、也可以是局域网内的一台主机,用户的控制设备(如手机、计算机)必须和服务器端在同一局域网内,这是一个受限条件;远程控制的服务器端一般都是云服务器(现在规模比较大的几家云服务器厂商有阿里云、亚马逊云、腾讯云等),被控设备和用户的控制设备都需要连接到云服务器上,数据的转发、存储交由云服务器处理。
远程控制的好处是设置灵活,可突破空间的限制。相比于本地控制,远程控制需要云服务和网络流量的支持,成本比本地控制高,而且远程控制的延时往往比本地控制大,数据的泄露风险更大。虽然远程控制需要云服务器的配合,成本比本地控制高,但远程控制方便于用于远程查看被控设备的运行状态,二者各有利弊。
具体到ESP32设备。在远程控制中,无论是控制设备(智能手机)还是被控设备(如本系列文章使用的ESP32-C3),都是直接与云服务器进行连接的,数据也是交由云服务器进行转发的,所以读者需要了解被控设备和控制设备是如何与云服务器进行通信的。
目前市面上大部分的物联网设备都可以接入各种云,如小米系、阿里系、京东系等产品都会接入自家的云平台,用户只需要下载对应的App进行配网绑定,就可以使用App来查看和控制物联网设备。
如果用户的智能手机与被控设备在同一个局域网内,则可以使用本地控制;如果用户的智能手机与被控设备不在同一个局域网内,就必须使用远程控制。本地控制也有自己的使用场景与优势,应当充分发挥本地控制与远程控制的优势,打造最适宜的物联网控制技术。
二、常见的云端数据通信协议
从远程控制的拓扑结构来看,智能手机和被控设备不是直接连接的,两者都连接到云服务器(云端),智能手机发送的数据和被控设备发送的数据都是通过云端进行转发的。那么,设备与云端连接的协议是什么?数据通信的协议是什么?只有弄清楚这些协议,读者才能对远程控制有一定的认识。
目前常见的设备与云端连接的协议有HTTP协议和MQTT协议。
1. HTTP协议
HTTP的英文全称为HyperText Transfer Protocol,中文为超文本传输协议。HTTP是基于传输层之上的应用协议。HTTP协议是万维网(World Wide Web,WWW或Web)的数据通信基础,其规定了客户端与服务器端之间数据传输的格式与方式。
HTTP协议是一个客户端(用户)和服务器端(网站)之间请求和应答的标准。客户端通过网页浏览器、网络爬虫或者其它的工具与服务器建立TCP连接,然后发送请求读取服务器端数据、上传数据或表单到服务器端,并读取服务器端的响应状态(如“HTTP/1.1 200 OK”),以及返回的内容(如请求的文件、错误消息或者其它信息)。通过HTTP协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
在0.9和1.0版本的HTTP协议中,TCP连接在每一次请求和回应之后关闭。在1.1版本的HTTP协议中,引入了保持连接的机制,一个连接可以重复多个请求和回应,这样可以在每次数据请求前减少TCP握手时间和网络开销。
常见的HTTP请求方法有:
- GET
请求指定的URI资源。
- POST
向指定URI资源提交数据,请求服务器端进行处理(如提交表单或者上传文件)。
- DELETE
请求服务器端删除URI所标识的资源。
举例:
在智能灯的本地控制中,客户端使用HTTP协议,可以通过HTTP请求方式来获取智能灯的开关状态(GET)或者操作智能灯的亮灭(POST),并且每个操作都会有对端的响应回复。也就是说,使用GET方法来获取智能灯的状态,使用POST方法来操控智能灯的行为。因此,HTTP协议在应用上比单纯的TCP协议更加完善与合理。
2. MQTT协议
MQTT协议是本系列文章的重点和焦点,因此放到下一篇文章中单独进行介绍。