本文将介绍如何通过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"。
对应的"Hostname"为"MyIoTHub246.azure-devices.net",也就是这里填写的"Broker Address"。
至于Client ID,对应就是在这个中心注册的IoT设备。
现在进入第二个配置页面"User Credentials"。Azure IoT中心支持用户名/密码组合以及x.509证书两种登录方式,在本文中采用用户名/密码认证方式。
上图中,"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"。
与之相反,需要通过vscode软件生成一个动态令牌,作为连接使用的密码。一旦该令牌的有效期结束,连接将会失败,如下图所示。
2) 安装该扩展项后,进入“Explorer”窗口,连接Azure IoT中心(需要提供"primary connection string"和“primary key",此处略过)。
3) 进一步选中目标IoT设备,在右键菜单选中"Generate SAS Token for Device"。
输入令牌有效时间后,敲回车键结束。然后就可以在"output"窗口看到该令牌对应的字符串。
最下面一行,以"SharedAccessSignature"开头的整行字符串就是mqtt.fx中需要填写的密码。当然,过期后,需要重新生成。
将该字符串填写之后,再次点击"Connect",这次连接成功。
接下来是第三个配置页面"SSL/TLS",请按照下图配置即可。
这样基本上就完成了所有配置-后面两个页面"Proxy"和"LWT"留空即可。当然如果你是用了http代理,也需要配置相应的"Proxy"选项。
完成所有配置项之后,我们来试验一下MQTT消息的发送和接收。
1)切换到"Publish"页面,尝试消息发送。当然,除了发送方,还需要设定接收方。为了方便起见,我们直接使用VS CODE提供的测试页面进行接收。
另一方面,从”mqtt.fx"中发布消息到同一topic(官方声明不支持Qos2)。这里需要注意,这里的topic,也就是上图中的"Built-in Event Endpoint",实际上是由Azure自动生成的,对应于该IoT中心的一个数据输出端点。
然后,需要在mqtt.fx中,通过一个相关的topic进行数据发送。在该数据端点($Default)之下,定义topic的格式如下:
devices/IoT_device_name/messages/events/。
在下方窗口填写消息内容后,点击“Publish"按钮,就可以在VS code的测试页面,看到该消息。
与上面的实验类似,在"mqtt.fx"中订阅该主题(“devices/MyRaspberryPi/messages/devicebound/#”)的消息,然后从VS code发送消息(C2D消息),也是可行的。