使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

时间:2024-03-25 20:49:18

本文将介绍如何通过Mqtt.fx(1.7.1)连接到Azure IoT设备中心。

首先来看Azure相应的配置。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

在“General”页面,需要配置"Broker Address","Client ID"和"Broker Port"。

上图中的"Broker Address",对应的就是IoT设备中心(不是IoT设备)的地址。另一个选项"Client ID"必须填写为IoT设备的ID。

举例来说,我在Azure IOT中心中创建了一个IoT设备中心"MyIoTHub246"。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

对应的"Hostname"为"MyIoTHub246.azure-devices.net",也就是这里填写的"Broker Address"。

至于Client ID,对应就是在这个中心注册的IoT设备。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

现在进入第二个配置页面"User Credentials"。Azure IoT中心支持用户名/密码组合以及x.509证书两种登录方式,在本文中采用用户名/密码认证方式。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

上图中,"User Name"文本框中,填写的字符串为:MyIoTHub246.azure-devices.net/MyRaspberryPi/?api-version=2018-06-30。

具体格式为:“IoT_hub_name/IoT_device_name/?api-version=2018-06-30”

但是,这里的密码实际上,并不是注册设备时,Azure自动生成的"Primary Key"或者"Secondary Key"。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

与之相反,需要通过vscode软件生成一个动态令牌,作为连接使用的密码。一旦该令牌的有效期结束,连接将会失败,如下图所示。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

这里再介绍一下如何在vscode获取令牌。

1)安装"Azure IoT Tools"扩展。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

2) 安装该扩展项后,进入“Explorer”窗口,连接Azure IoT中心(需要提供"primary connection string"和“primary key",此处略过)。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

3) 进一步选中目标IoT设备,在右键菜单选中"Generate SAS Token for Device"。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

输入令牌有效时间后,敲回车键结束。然后就可以在"output"窗口看到该令牌对应的字符串。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

最下面一行,以"SharedAccessSignature"开头的整行字符串就是mqtt.fx中需要填写的密码。当然,过期后,需要重新生成。

将该字符串填写之后,再次点击"Connect",这次连接成功。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

接下来是第三个配置页面"SSL/TLS",请按照下图配置即可。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

这样基本上就完成了所有配置-后面两个页面"Proxy"和"LWT"留空即可。当然如果你是用了http代理,也需要配置相应的"Proxy"选项。

完成所有配置项之后,我们来试验一下MQTT消息的发送和接收。

1)切换到"Publish"页面,尝试消息发送。当然,除了发送方,还需要设定接收方。为了方便起见,我们直接使用VS CODE提供的测试页面进行接收。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

另一方面,从”mqtt.fx"中发布消息到同一topic(官方声明不支持Qos2)。这里需要注意,这里的topic,也就是上图中的"Built-in Event Endpoint",实际上是由Azure自动生成的,对应于该IoT中心的一个数据输出端点。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

然后,需要在mqtt.fx中,通过一个相关的topic进行数据发送。在该数据端点($Default)之下,定义topic的格式如下:

devices/IoT_device_name/messages/events/。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

在下方窗口填写消息内容后,点击“Publish"按钮,就可以在VS code的测试页面,看到该消息。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

与上面的实验类似,在"mqtt.fx"中订阅该主题(“devices/MyRaspberryPi/messages/devicebound/#”)的消息,然后从VS code发送消息(C2D消息),也是可行的。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心

点击回车按钮,就能够在"mqtt.fx"中看到该消息。

使用Mqtt.fx(1.7.1)连接到Azure IoT设备中心