您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

快速入门:控制连接到 IoT 中心的设备 (Python)

在本快速入门中,会使用直接方法来控制连接到 Azure IoT 中心的模拟设备。 IoT 中心是一项 Azure 服务,使你可以从云管理 IoT 设备,并将大量设备遥测引入云进行存储或处理。 可使用直接方法远程更改连接到 IoT 中心的设备的行为。 本快速入门使用两个 Python 应用程序:一个是模拟设备应用程序,用于响应从后端应用程序调用的直接方法;另一个是后端应用程序,用于在模拟设备上调用直接方法。

先决条件

  • 具有活动订阅的 Azure 帐户。 免费创建一个

  • Python 3.7+。 有关支持的其他 Python 版本,请参阅 Azure IoT 设备功能

  • Github 中的示例 Python 项目。 使用 github 存储库中的“代码”按钮下载或克隆示例。

  • 端口 8883 在防火墙中处于打开状态。 本快速入门中的设备示例使用 MQTT 协议,该协议通过端口 8883 进行通信。 在某些公司和教育网络环境中,此端口可能被阻止。 有关解决此问题的更多信息和方法,请参阅连接到 IoT 中心(MQTT)

  • Azure Cloud Shell 中使用 Bash 环境。

    在新窗口中启动 Cloud Shell

  • 如果需要,请安装 Azure CLI 来运行 CLI 参考命令。

    • 如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅登录 Azure CLI

    • 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展

    • 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade

备注

本文使用最新版本的 Azure IoT 扩展(称为 azure-iot)。 旧版本称为 azure-cli-iot-ext。只应同时安装有一个版本。 可以使用命令 az extension list 来验证当前安装的扩展。

使用 az extension remove --name azure-cli-iot-ext 可删除扩展的旧版本。

使用 az extension add --name azure-iot 可添加扩展的新版本。

若要查看已安装了哪些扩展,请使用 az extension list

创建 IoT 中心

如果已完成上一快速入门:将遥测数据从设备发送到 IoT 中心,则可以跳过此步骤。

此部分介绍如何使用 Azure 门户创建 IoT 中心。

  1. 登录 Azure 门户

  2. 从 Azure 主页中选择“+ 创建资源”按钮,然后在“搜索市场”字段中输入“IoT 中心”。

  3. 在搜索结果中选择“IoT 中心”,然后选择“创建” 。

  4. 在“基本信息”选项卡上,按如下所示填写字段:

    • 订阅:选择要用于中心的订阅。

    • 资源组:选择一个资源组或新建一个资源组。 若要新建资源组,请选择“新建”并填写要使用的名称。 若要使用现有的资源组,请选择它。 有关详细信息,请参阅管理 Azure 资源管理器资源组

    • 区域:选择中心所在的区域。 选择最靠近你的位置。 某些功能(如 IoT 中心设备流)仅适用于特定区域。 对于这些受限功能,你必须选择受支持的区域之一。

    • IoT 中心名称:输入中心的名称。 该名称必须全局唯一。

    重要

    由于 IoT 中心将作为 DNS 终结点公开可发现,因此请务必避免在命名它时输入任何敏感信息或个人身份信息。

    在 Azure 门户中创建中心。

  5. 在完成时选择“下一步:网络”,继续创建中心。

    选择可以连接到 IoT 中心的终结点。 你可以选择默认设置“公共终结点(所有网络)”,也可选择“公共终结点(选定的 IP 范围)”或“专用终结点” 。 接受此示例的默认设置。

    选择可以连接的终结点。

  6. 在完成时选择“下一步:管理”,继续创建中心。

    使用 Azure 门户为新的中心设置大小和规模。

    可在此处接受默认设置。 如果需要,可以修改以下任何字段:

    • 定价和缩放层:选择的层。 可以根据你需要的功能数以及每天通过解决方案发送的消息数从多个层级中进行选择。 免费层适用于测试和评估。 允许 500 台设备连接到中心,每天最多可传输 8,000 条消息。 每个 Azure 订阅可以在免费层中创建一个 IoT 中心。

      如果正在完成 IoT 中心设备流的快速入门,请选择免费层。

    • IoT 中心单元:每日每单位允许的消息数取决于中心的定价层。 例如,如果希望中心支持 700,000 条消息引入,请选择两个 S1 层单位。 有关其他层选项的详细信息,请参阅选择合适的 IoT 中心层

    • Defender for IoT:启用此功能可为 IoT 和设备添加额外的一层威胁防护。 此选项不可用于免费层的中心。 有关此功能的详细信息,请参阅适用于 IoT 的 Azure 安全中心

    • 高级设置 > 设备到云的分区:此属性将设备到云消息与这些消息的同步读取器数目相关联。 大多数中心只需要 4 个分区。

  7. 在完成时选择“下一步:标记”继续到下一屏幕。

    标记是名称/值对。 可以为多个资源和资源组分配相同的标记,以便对资源进行分类并合并计费。 有关详细信息,请参阅使用标记来组织 Azure 资源

    使用 Azure 门户为中心分配标记。

  8. 在完成时选择“下一步:查看+创建”可查看选择。 你会看到类似于此屏幕的内容,但其中包含创建中心时选择的值。

    查看用于创建新中心的信息。

  9. 选择“创建”以创建新的中心。 创建中心需要几分钟时间。

注册设备

如果已完成上一快速入门:将遥测数据从设备发送到 IoT 中心,则可以跳过此步骤。

必须先将设备注册到 IoT 中心,然后该设备才能进行连接。 在本快速入门中,将使用 Azure Cloud Shell 来注册模拟设备。

  1. 在 Azure Cloud Shell 中运行以下命令,以创建设备标识。

    YourIoTHubName:将下面的占位符替换为你为 IoT 中心选择的名称。

    MyPythonDevice:这是所注册的设备的名称。 建议使用 MyPythonDevice,如图所示。 如果为设备选择不同名称,则可能还需要在本文中从头至尾使用该名称,并在运行示例应用程序之前在其中更新设备名称。

    az iot hub device-identity create --hub-name {YourIoTHubName} --device-id MyPythonDevice
    
  2. 在 Azure Cloud Shell 中运行以下命令,以获取刚注册设备的 设备连接字符串

    YourIoTHubName:将下面的占位符替换为你为 IoT 中心选择的名称。

    az iot hub device-identity connection-string show --hub-name {YourIoTHubName} --device-id MyPythonDevice --output table
    

    记下如下所示的设备连接字符串:

    HostName={YourIoTHubName}.azure-devices.net;DeviceId=MyNodeDevice;SharedAccessKey={YourSharedAccessKey}

    稍后会在快速入门中用到此值。

  3. 还需一个服务连接字符串,以便后端应用程序能够连接到 IoT 中心并检索消息 。 以下命令检索 IoT 中心的服务连接字符串:

    YourIoTHubName:将下面的占位符替换为你为 IoT 中心选择的名称。

    az iot hub connection-string show \
      --policy-name service \
      --hub-name {YourIoTHubName} \
      --output table
    

    记下如下所示的服务连接字符串:

    HostName={YourIoTHubName}.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey={YourSharedAccessKey}

    稍后会在快速入门中用到此值。 此服务连接字符串与你在上一步中记录的设备连接字符串不同。

侦听直接方法调用

模拟设备应用程序会连接到 IoT 中心上特定于设备的终结点,发送模拟遥测数据,并侦听中心的直接方法调用。 在本快速入门中,中心的直接方法调用告知设备对其发送遥测的间隔进行更改。 执行直接方法后,模拟设备会将确认发送回中心。

  1. 在本地终端窗口中,导航到示例 Python 项目的根文件夹。 然后导航到 iot-hub\Quickstarts\simulated-device-2 文件夹。

  2. 在所选文本编辑器中打开 SimulatedDevice.py 文件 。

    CONNECTION_STRING 变量的值替换为之前记下的设备连接字符串。 然后将更改保存到 SimulatedDevice.py

  3. 在本地终端窗口中,运行以下命令,为模拟设备应用程序安装所需的库:

    pip install azure-iot-device
    
  4. 在本地终端窗口中,运行以下命令,以便运行模拟设备应用程序:

    python SimulatedDevice.py
    

    以下屏幕截图显示了模拟设备应用程序将遥测数据发送到 IoT 中心后的输出:

    运行模拟设备

调用直接方法

后端应用程序会连接到 IoT 中心上的服务端终结点。 应用程序通过 IoT 中心对设备进行直接方法调用,并侦听确认。 IoT 中心后端应用程序通常在云中运行。

  1. 在其他本地终端窗口中,导航到示例 Python 项目的根文件夹。 然后导航到 iot-hub\Quickstarts\back-end-application 文件夹 。

  2. 在所选文本编辑器中打开 BackEndApplication.py 文件 。

    CONNECTION_STRING 变量的值替换为以前记下的服务连接字符串。 然后将更改保存到 BackEndApplication.py

  3. 在本地终端窗口中,运行以下命令,为模拟设备应用程序安装所需的库:

    pip install azure-iot-hub
    
  4. 在本地终端窗口中,运行以下命令,以便运行终端应用程序:

    python BackEndApplication.py
    

    以下屏幕截图显示了应用程序对设备进行直接方法调用并接收确认后的输出:

    运行后端应用程序

    运行后端应用程序后,在运行模拟设备的控制台窗口中会出现一条消息,且其发送消息的速率也会发生变化:

    模拟客户端的变化

清理资源

如果想要继续学习下一篇建议的文章,可以保留已创建的资源,以便重复使用。

否则,可删除本文中创建的 Azure 资源,避免收费。

重要

删除资源组的操作不可逆。 资源组以及包含在其中的所有资源将被永久删除。 请确保不会意外删除错误的资源组或资源。 如果在现有的包含要保留资源的资源组中创建了 IoT 中心,则只删除 IoT 中心资源本身,而不要删除资源组。

若要按名称删除资源组,请执行以下操作:

  1. 登录到 Azure 门户,然后选择“资源组”。

  2. 在“按名称筛选”文本框中,键入包含 IoT 中心的资源组的名称。

  3. 在结果列表中的资源组右侧,选择“...”,然后选择“删除资源组” 。

    删除

  4. 系统会要求确认是否删除资源组。 再次键入资源组的名称进行确认,然后选择“删除” 。 片刻之后,将会删除该资源组及其包含的所有资源。

后续步骤

在本快速入门中,已从后端应用程序调用了设备上的直接方法,并在模拟设备应用程序中响应了直接方法调用。

若要了解如何将设备到云的消息路由到云中的不同目标,请继续学习下一教程。