使用 MQTT 连接到 Azure IoT 中心

joh*_*ley 2 azure-iot-hub

我正在尝试使用以下方法直接使用 MQTT 连接到 Azure IoT 中心:

https://learn.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support#using-the-mqtt-protocol-directly-as-a-device

我正在使用适用于 Windows 的 MQTT 资源管理器:https ://mqtt-explorer.com/ 我输入以下详细信息。我的 ioTHub 称为 IoTHub,我的设备称为 device,因此根据文档:

协议:mqtt:// 主机:iothub.azure-devices.net/?api-version=2018-06-3430 端口:8883 验证证书:关闭 加密:关闭 用户名:iothub.azure-devices.net/device/?api -版本=2018-06-30 密码:SharedAccessSignature sr=iothub.azure-devices.net&sig=XXXXXXXXXXXXXXXXXXXredactedXXXXXXXXXXXXXXXXXXXX&se=1642603375&skn=iothubowner

我所在位置没有任何端口被封锁。连接失败并表示已与服务器断开连接。如果我尝试使用 TLS 加密,它会显示未授权。

如何使用 MQTT 访问 IoTHub?

Mat*_*eer 6

你走在正确的轨道上!文档中缺少一个小细节

引用:

对于 ClientId 字段,请使用 deviceId。

可以使用高级设置来设置客户端 ID,如下面的两个屏幕截图所示:

高级设置 客户端ID字段

至于TLS加密,这是必需的。打开它,您应该能够连接。

编辑:正如您在评论中提到的,连接字符串也是错误的。您需要设备的共享访问签名。生成一个的一种简单方法是使用az cli. 当您运行下面的命令时,您需要提供设备的连接字符串(您可以从门户获取),它将为您创建共享访问签名。

az iot hub generate-sas-token --connection-string "HostName=iot-Hub.azure-devices.net;DeviceId=deviceId;SharedAccessKey=foo"

  • 我将添加 @MatthijsvanderVeer 优秀的答案,当您生成 SAS 令牌时,您可能需要指定比默认值 1 小时更长的持续时间,因此使用该标志: --duration <seconds> (2认同)