了解设备接入协议
了解设备接入协议
了解设备连网方式后,我们接下来关心的是,设备和云平台如何交换数据,这就涉及到设备和云平台的接入通信协议。
这一节,我们将简要介绍云平台支持的设备接入协议,帮您对这些方式有一个总体的了解,并大概知道如何选择它们。每一种接入方式的具体原理和操作方式,我们将在后续的相关章节中详细说明。
MQTT
MQTT
协议基于 TCP/IP
协议,是一种基于消息队列机制的应用层协议,通常用于物联网消息通信场景。
提示
详细的设备 MQTT 接入文档,请 点此进入。
在 MQTT
接入方式中,设备需要和云平台建立 TCP
长连接,并通过 MQTT
协议特有的方式完成身份认证。当设备成功连接到云平台后,通过 发布
和 订阅
相应的 主题(Topic)
,来完成和云平台的消息通信。
以上一节的设备数据上报为例,如果采用 MQTT
方式上报,设备首先要和云平台建立MQTT
连接,我们同样在设备详情页的【连接】页面可以找到 MQTT
接入点地址,比如:
mqtt://<mqtt_broker_url>:1883
在硬件开发中,根据不同硬件平台,有相应的 MQTT
实现方式。这里我们以第三方 MQTT 客户端工具 MQTT.fx 为例,来模拟设备和云平台建立 MQTT
连接。
建立 MQTT
连接时,除了接入点地址外,还需要身份验证,我们使用云平台提供的普通证书方式,设置如下:
参数 | 值 |
---|---|
username | AccessToken |
password | ProjectKey |
clientId | 空或任意 |
提示
ThingsCloud 上不同区域的 MQTT
接入点地址不同,您可以在设备详情页中的【连接】页面找到。
在 MQTT.fx 上新建一个连接,配置如下图:
当设备和云平台成功连接 MQTT
连接后,设备需要向以下 主题
:
attributes
发布如下数据:
{
"humidity": 78,
"light": 8910
}
即可完成一次数据上报。
在 MQTT.fx 中发布以上的数据,如下图:
在控制台中,可以看到设备有了新的数据,这些数据我们都称为属性
,后边的章节中我们会详细介绍 ThingsCloud 中 属性
的含义。
MQTT 有一些明显的优势,也正是这些优势让它几乎成为物联网通信协议的代名词。
支持实时控制
由于和云平台建立了 TCP 长连接,设备可以随时收到云平台下发的消息,从而达到实时远程控制的目的。
ThingsCloud 支持基于 MQTT
的多种消息下发方式,例如:属性下发、命令下发、自定义数据下发,这些方式在后边的章节中会有详细介绍。
通过实时控制,您可以实现智能家居中的远程开关家中的智能电器,可以实现远程控制农业大棚中的风机转速,还可以实现从云端智能调节楼宇灯光亮度。
易于监测设备在线状态
同样得益于 TCP 长连接,我们可以较为容易的监控设备的在线状态,但这不是绝对的。虽然 TCP 通过心跳包来维持连接,但意外断线有时不会产生正常的 TCP 连接关闭,导致在线状态可能和实际情况不一致。不过 MQTT
本身也有心跳机制,可以相对较好的解决这个问题。
支持不同级别的证书
ThingsCloud 支持普通证书的 MQTT 设备身份验证,非常适合普通场景或资源有限的设备。同时我们也支持基于 TLS 的 MQTT 加密传输,实现设备和云平台通信的安全性和完整性。
数据流量较小
MQTT
协议采用二进制格式设计,除了数据之外,控制部分非常精简,整体消息包相对较小,整体流量开销不大。
HTTP
在上一节,我们使用了 HTTP
协议完成设备向云平台的数据上报。事实上,在很多数据采集的单一场景中,HTTP
不外乎是一种相对简单可靠的应用层协议,它工作在 TCP/IP 协议栈上,具有很好的易用性和强大的基础库支持,对开发者来说很容易快速上手。
提示
详细的设备 HTTP 接入文档,请 点此进入。
适合单纯的数据采集场景
HTTP
接入协议很适合单纯的数据采集场景,不需要对设备下发实时消息。设备如果有丰富的资源,还可以使用更加安全的 HTTPs
实现加密传输。
TCP
除此之外,ThingsCloud 还支持无所不能的 TCP 接入协议,在控制台可以设置基于 TCP 的自定义数据格式,支持 ASCII
、 HEX
、 JSON
等格式。
提示
详细的设备 TCP 接入文档,请 点此进入。
前边提到的 DTU,通常都支持 TCP
透传方式接入云平台。
CoAP
CoAP
可以说是一个精简版的 HTTP
协议,它运行在 UDP
协议之上,而 HTTP
运行在 TCP
协议之上。除此之外,CoAP
的使用方法和 HTTP
极为相似。
适合低功耗设备
CoAP
由于不需要和云平台建立 TCP
连接,所以设备用于网络通信的开销相对比较低,很适合用在低功耗设备,例如:需要依赖电池常年工作的 NB-IoT 智能水表。