本解决方案使用专为 QuecPython 编写的 azure.py 库,实现与 Azure IoT Hub 建立 MQTT 连接。
本方案面临的主要挑战之一是生成 SAS 令牌,以及处理某些 Python 特性缺失的问题 —— 因为与标准 Python 相比,QuecPython 是一个受限环境。然而,得益于 QuecPython 提供的强大支持和灵活性,已克服这些限制,实现了与 Azure IoT Hub 的可靠通信。
本项目作为基于移远模块的 IoT 设备轻量级 SDK,即使在资源受限的环境中也能与 Azure 的 IoT 生态系统进行集成。
功能特性:设备连接、客户端与服务端双向通信、直接方法和设备孪生。
认证方式:SAS 令牌和 CA 签名的 x.509 证书
要使用本项目,首先需要克隆代码仓库:
使用以下命令将项目克隆到本地机器:
git clone https://github.com/QuecPython/azure-iot.git然后设置 QuecPython 开发环境。
请按照官方 QuecPython 快速入门指南设置所有必要的工具: https://developer.quectel.com/doc/quecpython/Getting_started/zh/index.html
该指南将引导您完成:
-
安装移远模块所需的驱动程序
-
下载并安装 IDE(QPYcom 或 QPYcom-IDE)
-
烧录最新的 QuecPython 固件
-
设置开发环境并通过 USB 连接您的模块
完成这些步骤后,您就可以运行示例代码并测试与 Azure IoT Hub 的 MQTT 连接了。
您需要的另一个测试和监控工具是 Azure IoT Explorer。您可以在此处找到安装步骤和指南: https://learn.microsoft.com/en-us/azure/iot/howto-use-iot-explorer
要使用此程序,您必须首先拥有一个 Microsoft Azure 账户并在您的 IoT Hub 上注册设备。
您可以按照官方 Azure 指南中的步骤操作: https://learn.microsoft.com/en-us/azure/iot-hub/create-connect-device?tabs=portal
Azure 支持多种设备连接认证方式。 在本项目中,我们演示两种常用方法:
-
SAS 令牌认证
-
x.509 证书认证
import usr.azure as azure
import modem
import ujson
from usr.config import CERT, PRIVATE_KEY, SHARED_ACCESS_KEY, PASSWORD
client_id = 'device_qp'
server = 'qp-hub.azure-devices.net'
port = 8883
username = None
def event_callback(data):
pass
# 创建 Azure 对象
azure_obj = azure.Azure(client_id, server, port, keep_alive=60, user=username, password=PASSWORD, ssl=True, ssl_params={"cert": CERT, "key": PRIVATE_KEY})
print("创建 azure 对象")
# 连接到 MQTT 服务器
print("azure 连接开始")
azure_obj.connect()
print("azure 连接结束")
azure_obj.start()import usr.azure as azure
import modem
import ujson
from usr.config import CERT, PRIVATE_KEY, SHARED_ACCESS_KEY, PASSWORD
client_id = 'device_qp'
server = 'qp-hub.azure-devices.net'
port = 8883
username = '{}/{}/?api-version=2021-04-12'.format(server, client_id)
uri = "{}/devices/{}".format(server, client_id)
SharedAccessKey = SHARED_ACCESS_KEY
def event_callback(data):
pass
# 创建 Azure 对象
azure_obj = azure.Azure(client_id, server, port, keep_alive=60, user=username, password=PASSWORD, ssl=True, ssl_params={"cert": CERT, "key": PRIVATE_KEY})
print("创建 azure 对象")
# 生成 SAS 令牌
token = azure_obj.generate_sas_token(uri, SharedAccessKey, None)
azure_obj.mqtt_client.password = token
# 连接到 MQTT 服务器
print("azure 连接开始")
azure_obj.connect()
print("azure 连接结束")
azure_obj.start()在运行示例之前,请确保正确设置 usr/config.py 文件中的变量。此文件存储认证所需的所有凭证和路径。
# x.509 证书认证参数
PRIVATE_KEY = None # 私钥 - 来自 private_key.key 文件的内容
CERT = None # 证书 - 来自 .pem 文件的内容
# 从主密钥或辅助密钥获取,用于生成 SAS 令牌
SHARED_ACCESS_KEY = None
# 用作 MQTT 客户端的密码 - 可以是在 Azure IoT Explorer 中创建的 SAS 令牌
PASSWORD = None如何插入证书或密钥内容:
PRIVATE_KEY = """
-----BEGIN PRIVATE KEY-----
密钥内容
-----END PRIVATE KEY-----
"""