MQTT:连接到 Azure IoT 中心 (Micropython)

问题描述 投票:0回答:1

我无法使用 MicroPython v1.22.2 使用带有 SSL 的 umqtt.simple2 库连接到 Azure IoT 中心。

from umqtt.simple2 import MQTTClient

HUB_HOSTNAME = "AzureIoTHubHostName"
PORT = 8883
CLIENT_ID = "DeviceId"
USERNAME = f"{HUB_HOSTNAME}/{CLIENT_ID}/?api-version=2021-04-12"
PASSWORD = "SASToken"
TOPIC = f"devices/{CLIENT_ID}/messages/events/"
MESSAGE = b"Hello Azure IoT Hub!"
CADATA_PATH = "cadata_path"

with open(CADATA_PATH, "rb") as f:
    cadata = f.read()

ssl_params = {"cert_reqs": ussl.CERT_NONE, "cadata": cadata}

client = MQTTClient(
    CLIENT_ID,
    HUB_HOSTNAME,
    port=PORT,
    user=USERNAME,
    password=PASSWORD,
    ssl=True,
    ssl_params=ssl_params,
)

client.connect()

client.publish(TOPIC, MESSAGE)

client.disconnect()

connect 方法没有提供错误消息,使得进一步诊断问题变得困难(在 simple2 中的第 267 行,包装套接字时失败 --> self.sock = ussl.wrap_socket(self.sock_raw, **self .ssl_params))

我已经使用 openssl 测试了我的证书文件,以检查是否发生握手(openssl s_client -connect),并且它工作正常。

有人可以建议如何使用 MicroPython 解决 Azure IoT 中心的连接问题吗?任何指导将不胜感激。

azure ssl-certificate mqtt azure-iot-hub micropython
1个回答
0
投票

下面的代码用于使用 MQTT 和 Python 将设备连接到 Azure IoT 中心,并使用

umqtt.simple2
库设置到 Azure IoT 中心的连接,并发布一些遥测数据数据。

    我关注了 IoTMQTTSample
  • python
  • ESP32 上的 Micro Python 通过
  • MQTT 将遥测数据发送到 Azure IoT 中心
IOT_HUB_NAME = "{iothub_name}" IOT_HUB_DEVICE_ID = "{device_id}" IOT_HUB_SAS_TOKEN = "{sas_token}" def on_connect(client, userdata, flags, rc): print("connect: " + str(rc)) def on_publish(client, userdata, mid): print("publish: " + str(mid)) # Create an MQTT client instance mqtt_client = MQTTClient(client_id=IOT_HUB_DEVICE_ID, server=IOT_HUB_NAME + ".azure-devices.net", port=8883) # Set the connection callback mqtt_client.on_connect = on_connect # Set the publish callback mqtt_client.on_publish = on_publish # Set username and password mqtt_client.username_pw_set(username=IOT_HUB_NAME + ".azure-devices.net/" + IOT_HUB_DEVICE_ID + "/?api-version=2021-04-12", password=IOT_HUB_SAS_TOKEN)


messages = ["Accio", "Aguamenti", "Alarte Ascendare", "Expecto Patronum", "Homenum Revelio"]
for i in range(len(messages)):
    print("sending message[" + str(i) + "]: " + messages[i])
    mqtt_client.publish("devices/" + IOT_HUB_DEVICE_ID + "/messages/events/", payload=messages[i], qos=1)

    使用
  • MQTT 连接到 Azure IoT 中心
az iot hub generate-sas-token --connection-string "HostName=<your-hub-name>.azure-devices.net;DeviceId=<your-device-id>;SharedAccessKey=<your-shared-access-key>"
输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.