本文介绍:

Azure IoT Hub 对MQTT的支持;

使用MQTT 而不用Azure IoT Hub Device SDK 连接IoT Hub并双向通讯;

使用Azure IoT Hub 的 Device SDK时,SDK封装了常见的  设备到云的消息,从云端控制设备,设备孪生属性等相关操作,  无需关注MQTT中的主题订阅。

IoT Hub必须使用TLS/SSL,因此IoT Hub不支持端口1883通讯,默认采用8883。

IoT Hub 不是完整的MQTT 服务,并没有支持MQTT 3.1.1规范中的所有行为。

IoT Hub 的设备SDK默认使用 Qos 1与IoT Hub交换消息, CleanSession标志默认为0;

SDK中的默认超时时间及其是否可配置:

语言 默认的 keep-alive 时间间隔 可配置性
Node.js 180 秒
Java 230 秒
C 240 秒
C# 300 秒
Python 60 秒

 

Azure IoT Hub 的特有限制:IoT 中心将服务器端最大超时限制为 29.45 分钟(1767 秒),可设置的客户端最大 keep-alive 值为 1767 / 1.5 = 1177 秒。 任何流量都将重置 keep-alive。 例如,成功的 SAS 令牌刷新会重置 keep-alive

 

 

本文参考:https://docs.microsoft.com/zh-cn/azure/iot-hub/iot-hub-mqtt-support

 

视频演示:

 

 

重点图文步骤:

案例:使用MQTTX https://github.com/emqx/MQTTX      和 VS Code  测试Azure IoT Hub

 

下载并安装MQTTX客户端工具;

下载并安装VS Code 及IoT Hub扩展(请参照文档 https://www.51azure.cloud/post/2020/4/15/azure-iot-hub-1-prepare  中VS Code 部分);

一. 在MQTTX中连接Azure IoT Hub:

 

1.点击1添加按钮;

2.名称随意输入,此处表示连接的名称,不重复即可。

3.ClientID 填写 IoT Hub中Device ID:

 

4. 服务器地址为 mqtts,后边地址为IoT Hub的主机名:

 

5.端口8883

6.用户名

“用户名”字段使用 {iothubhostname}/{device_id}/?api-version=2018-06-30,其中 {iothubhostname} 是 IoT 中心的完整 CName。

例如,如果 IoT 中心的名称为 sean-iot-hub.azure-devices.net,设备的名称为 Device001,则完整“用户名”字段应包含:

sean-iot-hub.azure-devices.net/Device001/?api-version=2018-06-30

 

7.密码:

密码”字段使用 SAS 令牌。 对于 HTTPS 和 AMQP 协议,SAS 令牌的格式是相同的:

SharedAccessSignature sig={signature-string}&se={expiry}&sr={URL-encoded-resourceURI}

可以在VS Code中生成 SAS 或通过Azure cli生成(https://docs.microsoft.com/zh-cn/cli/azure/ext/azure-iot/iot/hub?view=azure-cli-latest#ext-azure-iot-az-iot-hub-generate-sas-token

在VS Code中,右键设备,生成sas,输入sas有效期,即可在下方的output窗口中出现sas token。

 

8.SSL/TLS:true

9.证书类型:CA signed server

其余值保持默认即可。

 

二. 开始向指定的主题发送设备到云的遥测消息

成功建立连接后,设备可以使用 devices/{device_id}/messages/events/ 作为主题名称将消息发送到IoT Hub:

可在VS Code中 start monitoring built-in event endpoint 开始监控设备到云的消息:

 

三.开始订阅 从云到设备的主题,接受云端消息:

若要从 IoT 中心接收消息,设备应使用 devices/{device_id}/messages/devicebound/# 作为 主题筛选器 来进行订阅。  

 

尝试从 VS Code 发送 C2D的消息,选择 send c2d message to device:

在上方输入message内容并按回车:

 

MQTTX 客户端接收到消息: