你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:将 Linux 或 Windows 上运行的示例 IoT 即插即用设备应用程序连接到 IoT 中心

本教程介绍如何生成示例 IoT 即插即用设备应用程序,将其连接到 IoT 中心,并使用 Azure IoT 资源管理器工具来查看它发送的遥测数据。 该示例应用程序以 C 编写,包含在适用于 C 的 Azure IoT 设备 SDK 中。解决方案构建者可以使用 Azure IoT 资源管理器工具来了解 IoT 即插即用设备的功能,而无需查看任何设备代码。

浏览代码

先决条件

请确保设置环境(包括 IoT 中心)后再继续。

可以在 Linux 或 Windows 上运行本教程。 本教程中的 shell 命令遵循适用于路径分隔符“/”的 Linux 约定,如果你是在 Windows 上操作,请务必将这些分隔符替换为“\”。

先决条件根据操作系统而异:

Linux

本教程假设你使用 Ubuntu Linux。 本教程中的步骤已使用 Ubuntu 18.04 进行了测试。

若要在 Linux 上完成本教程,需在本地 Linux 环境上安装以下软件:

使用 命令安装“GCC”、“Git”、“cmake”和所有必要的依赖项:

sudo apt-get update
sudo apt-get install -y git cmake build-essential curl libcurl4-openssl-dev libssl-dev uuid-dev

验证 cmake 的版本是否高于 2.8.12,GCC 的版本是否高于 4.4.7 。

cmake --version
gcc --version

Windows

若要在 Windows 上完成本教程,需在本地 Windows 环境上安装以下软件:

下载代码

在本教程中,你将准备一个用于克隆和生成 Azure IoT 中心设备 C SDK 的开发环境。

在所选目录中打开命令提示符。 执行以下命令将 Azure IoT C SDK 和库 GitHub 存储库克隆到此位置:

git clone https://github.com/Azure/azure-iot-sdk-c.git
cd azure-iot-sdk-c
git submodule update --init

此操作需要几分钟才能完成。

生成代码

可以使用 Visual Studio 或在命令行使用 cmake 生成并运行代码。

使用 Visual Studio

  1. 打开克隆存储库的根文件夹。 几秒钟后,Visual Studio 中的 CMake 支持会创建运行和调试项目所需的所有内容。

  2. Visual Studio 准备就绪后,在“解决方案资源管理器”中,导航到示例 iothub_client/samples/pnp/pnp_simple_thermostat/。

  3. 右键单击“pnp_simple_thermostat.c”文件并选择“添加调试配置”。 选择“默认值”。

  4. Visual Studio 将打开“launch.vs.json”文件。 按照以下代码片段编辑此文件,设置所需的环境变量。 完成为 IoT 即插即用设置环境的快速入门和教程后,请记下范围 ID 和注册主密钥:

    {
      "version": "0.2.1",
      "defaults": {},
      "configurations": [
        {
          "type": "default",
          "project": "iothub_client\\samples\\pnp\\pnp_simple_thermostat\\pnp_pnp_simple_thermostat.c",
          "projectTarget": "",
          "name": "pnp_simple_thermostat.c",
          "env": {
            "IOTHUB_DEVICE_SECURITY_TYPE": "DPS",
            "IOTHUB_DEVICE_DPS_ID_SCOPE": "<Your ID scope>",
            "IOTHUB_DEVICE_DPS_DEVICE_ID": "my-pnp-device",
            "IOTHUB_DEVICE_DPS_DEVICE_KEY": "<Your enrollment primary key>"
          }
        }
      ]
    }
    
  5. 右键单击“pnp_simple_thermostat.c”文件并选择“设置为启动项”。

  6. 若要在 Visual Studio 中跟踪代码执行,请在 pnp_simple_thermostat.c 文件中向 main 函数添加一个断点。

  7. 现在可以从“调试”菜单中运行并调试示例。

设备现在可以接收命令和属性更新,并已开始向中心发送遥测数据。 在执行后续步骤时,保持示例处于运行状态。

使用 cmake 生成代码

可以使用 cmake 命令行实用工具生成代码:

  1. 在设备 SDK 根文件夹中创建一个 cmake 子目录,并导航到该文件夹:

    cd azure-iot-sdk-c
    mkdir cmake
    cd cmake
    
  2. 运行以下命令以生成 SDK 和示例:

    cmake -Duse_prov_client=ON -Dhsm_type_symm_key=ON -Drun_e2e_tests=OFF ..
    cmake --build .
    

运行设备示例

设置环境部分创建了四个环境变量来配置示例,以使用设备预配服务 (DPS) 连接到 IoT 中心:

  • 具有值 的 IOTHUB_DEVICE_SECURITY_TYPE
  • 包含 DPS ID 范围的 IOTHUB_DEVICE_DPS_ID_SCOPE。
  • 包含值 的 IOTHUB_DEVICE_DPS_DEVICE_ID。
  • 包含注册主密钥的 IOTHUB_DEVICE_DPS_DEVICE_KEY。
  • 包含值 的 IOTHUB_DEVICE_DPS_ENDPOINT。

若要详细了解示例配置,请参阅示例自述文件

在 SDK 中运行示例应用程序,以模拟将遥测发送到 IoT 中心的 IoT 即插即用设备:

在 cmake 文件夹中,导航到包含可执行文件的文件夹,并运行该文件:

# Bash
cd iothub_client/samples/pnp/pnp_simple_thermostat/
./pnp_simple_thermostat
REM Windows
cd iothub_client\samples\pnp\pnp_simple_thermostat\Debug
.\pnp_simple_thermostat.exe

提示

若要在 Windows 上的 Visual Studio 中跟踪代码执行,请在 pnp_simple_thermostat.c 文件中向 main 函数添加一个断点。

设备现在可以接收命令和属性更新,并已开始向中心发送遥测数据。 在执行后续步骤时,保持示例处于运行状态。

使用 Azure IoT 资源管理器验证代码

设备客户端示例启动后,使用 Azure IoT 资源管理器工具验证它是否正常工作。

  1. 打开 Azure IoT 资源管理器。

  2. 在“IoT 中心”页上,如果尚未将连接添加到 IoT 中心,请选择“+ 添加连接”。 输入先前创建的 IoT 中心的连接字符串,然后选择“保存”。

  3. 在“IoT 即插即用设置”页上,选择“+ 添加”“本地文件夹”,然后选择在其中保存了模型文件的本地“模型”文件夹。

  4. 在“IoT 中心”页上,单击要使用的中心的名称。 你将看到已注册到 IoT 中心的设备的列表。

  5. 单击前面创建的设备的“设备 ID”。

  6. 左侧菜单显示了可用于设备的不同类型的信息。

  7. 选择“IoT 即插即用组件”以查看设备的模型信息。

  8. 可以查看设备的不同组件。 默认组件和任何其他组件。 选择要使用的组件。

  9. 选择“遥测”页,然后选择“开始”,查看设备正在为此组件发送的遥测数据。

  10. 选择“属性(只读)”页以查看为此组件报告的只读属性。

  11. 选择“属性(可写)”页以查看可以为此组件更新的可写属性。

  12. 按名称选择属性,为其输入新值,然后选择“更新所需值”。

  13. 若要查看显示的新值,请选择“刷新”按钮。

  14. 选择“命令”页以查看此组件的所有命令。

  15. 选择要测试参数的命令(如果有)。 选择“发送命令”以调用设备上的命令。 可以在正在运行示例代码的命令提示符窗口中看到你的设备响应命令。

查看代码

此示例实现了一个简单的 IoT 即插即用恒温器设备。 恒温器模型不使用 IoT 即插即用组件设备的 DTDL 模型文件定义了设备实现的遥测、属性和命令。

设备代码使用标准函数连接到 IoT 中心:

deviceHandle = IoTHubDeviceClient_CreateFromConnectionString(connectionString, MQTT_Protocol)

设备发送在连接请求中实现的 DTDL 模型的模型 ID。 发送模型 ID 的设备是 IoT 即插即用设备:

static const char g_ModelId[] = "dtmi:com:example:Thermostat;1";

...

IoTHubDeviceClient_SetOption(deviceHandle, OPTION_MODEL_ID, modelId)

更新属性、处理命令和发送遥测数据的代码与不使用 IoT 即插即用约定的设备的代码相同。

该代码使用 Parson 库来分析从 IoT 中心发送的有效负载中的 JSON 对象:

// JSON parser
#include "parson.h"

清理资源

如果已完成快速入门和教程,请参阅清理资源

本教程介绍如何生成示例 IoT 即插即用设备应用程序,将其连接到 IoT 中心,并使用 Azure IoT 资源管理器工具来查看它发送的遥测数据。 该示例应用程序以 C# 编写,并包含在 Azure IoT SDK for C# 中。 解决方案构建者可以使用 Azure IoT 资源管理器工具来了解 IoT 即插即用设备的功能,而无需查看任何设备代码。

浏览代码

先决条件

请确保设置环境(包括 IoT 中心)后再继续。

可以在 Linux 或 Windows 上运行本教程。 本教程中的 shell 命令遵循适用于路径分隔符“/”的 Linux 约定,如果你是在 Windows 上操作,请务必将这些分隔符替换为“\”。

下载代码

在本教程中,你将准备一个用于克隆和生成 Azure IoT SDK for C# 存储库的开发环境。

在所选文件夹中打开命令提示符。 运行以下命令,将 Microsoft Azure IoT SDK for C# (.NET) GitHub 存储库克隆到此位置:

git clone  https://github.com/Azure/azure-iot-sdk-csharp

生成代码

现在可以生成示例并运行它。 运行以下命令生成示例:

cd azure-iot-sdk-csharp/iothub/device/samples/solutions/PnpDeviceSamples/Thermostat
dotnet build

运行设备示例

若要运行示例,请运行以下命令:

dotnet run

设备现在可以接收命令和属性更新,并已开始向中心发送遥测数据。 在执行后续步骤时,保持示例处于运行状态。

使用 Azure IoT 资源管理器验证代码

设备客户端示例启动后,使用 Azure IoT 资源管理器工具验证它是否正常工作。

  1. 打开 Azure IoT 资源管理器。

  2. 在“IoT 中心”页上,如果尚未将连接添加到 IoT 中心,请选择“+ 添加连接”。 输入先前创建的 IoT 中心的连接字符串,然后选择“保存”。

  3. 在“IoT 即插即用设置”页上,选择“+ 添加”“本地文件夹”,然后选择在其中保存了模型文件的本地“模型”文件夹。

  4. 在“IoT 中心”页上,单击要使用的中心的名称。 你将看到已注册到 IoT 中心的设备的列表。

  5. 单击前面创建的设备的“设备 ID”。

  6. 左侧菜单显示了可用于设备的不同类型的信息。

  7. 选择“IoT 即插即用组件”以查看设备的模型信息。

  8. 可以查看设备的不同组件。 默认组件和任何其他组件。 选择要使用的组件。

  9. 选择“遥测”页,然后选择“开始”,查看设备正在为此组件发送的遥测数据。

  10. 选择“属性(只读)”页以查看为此组件报告的只读属性。

  11. 选择“属性(可写)”页以查看可以为此组件更新的可写属性。

  12. 按名称选择属性,为其输入新值,然后选择“更新所需值”。

  13. 若要查看显示的新值,请选择“刷新”按钮。

  14. 选择“命令”页以查看此组件的所有命令。

  15. 选择要测试参数的命令(如果有)。 选择“发送命令”以调用设备上的命令。 可以在正在运行示例代码的命令提示符窗口中看到你的设备响应命令。

查看代码

此示例实现了一个简单的 IoT 即插即用恒温器设备。 此示例实现的模型不使用 IoT 即插即用组件恒温器设备的数字孪生定义语言 (DTDL) 模型文件定义了设备实现的遥测、属性和命令。

设备代码使用标准 CreateFromConnectionString 方法连接到 IoT 中心。 设备发送在连接请求中实现的 DTDL 模型的模型 ID。 发送模型 ID 的设备是 IoT 即插即用设备:

private static void InitializeDeviceClientAsync()
{
  var options = new ClientOptions
  {
    ModelId = ModelId,
  };
  s_deviceClient = DeviceClient.CreateFromConnectionString(s_deviceConnectionString, TransportType.Mqtt, options);
  s_deviceClient.SetConnectionStatusChangesHandler((status, reason) =>
  {
     s_logger.LogDebug($"Connection status change registered - status={status}, reason={reason}.");
  });
}

模型 ID 存储在代码中,如以下代码片段所示:

private const string ModelId = "dtmi:com:example:Thermostat;1";

更新属性、处理命令和发送遥测数据的代码与不使用 IoT 即插即用约定的设备的代码相同。

该示例使用 JSON 库来分析从 IoT 中心发送的有效负载中的 JSON 对象:

using Newtonsoft.Json;

...

DateTime since = JsonConvert.DeserializeObject<DateTime>(request.DataAsJson);

清理资源

如果已完成快速入门和教程,请参阅清理资源

本教程介绍如何生成示例 IoT 即插即用设备应用程序,将其连接到 IoT 中心,并使用 Azure IoT 资源管理器工具来查看它发送的遥测数据。 该示例应用程序以 Java 编写,包含在用于 Java 的 Azure IoT 设备 SDK 中。 解决方案构建者可以使用 Azure IoT 资源管理器工具来了解 IoT 即插即用设备的功能,而无需查看任何设备代码。

浏览代码

先决条件

请确保设置环境(包括 IoT 中心)后再继续。

可以在 Linux 或 Windows 上运行本教程。 本教程中的 shell 命令遵循适用于路径分隔符“/”的 Linux 约定,如果你是在 Windows 上操作,请务必将这些分隔符替换为“\”。

若要完成本教程,需在本地开发环境中安装以下软件:

下载代码

在本教程中,你将准备一个用于克隆和生成 Azure IoT 中心设备 Java SDK 的开发环境。

在所选目录中打开命令提示符。 执行以下命令将 Azure IoT Java SDK 和库 GitHub 存储库克隆到此位置:

git clone https://github.com/Azure/azure-iot-sdk-java.git

生成代码

导航到克隆的 Java SDK 存储库中恒温器示例的根文件夹并生成它:

cd azure-iot-sdk-java/device/iot-device-samples/pnp-device-sample/thermostat-device-sample
mvn clean package

运行设备示例

设置环境部分创建了四个环境变量来配置示例,以使用设备预配服务 (DPS) 连接到 IoT 中心:

  • 具有值 的 IOTHUB_DEVICE_SECURITY_TYPE
  • 包含 DPS ID 范围的 IOTHUB_DEVICE_DPS_ID_SCOPE。
  • 包含值 的 IOTHUB_DEVICE_DPS_DEVICE_ID。
  • 包含注册主密钥的 IOTHUB_DEVICE_DPS_DEVICE_KEY。
  • 包含值 的 IOTHUB_DEVICE_DPS_ENDPOINT。

若要详细了解示例配置,请参阅示例自述文件

从 /device/iot-device-samples/pnp-device-sample/thermostat-device-sample 文件夹中,运行应用程序:

mvn exec:java -Dexec.mainClass="samples.com.microsoft.azure.sdk.iot.device.Thermostat"

设备现在可以接收命令和属性更新,并已开始向中心发送遥测数据。 在执行后续步骤时,保持示例处于运行状态。

使用 Azure IoT 资源管理器验证代码

设备客户端示例启动后,使用 Azure IoT 资源管理器工具验证它是否正常工作。

  1. 打开 Azure IoT 资源管理器。

  2. 在“IoT 中心”页上,如果尚未将连接添加到 IoT 中心,请选择“+ 添加连接”。 输入先前创建的 IoT 中心的连接字符串,然后选择“保存”。

  3. 在“IoT 即插即用设置”页上,选择“+ 添加”“本地文件夹”,然后选择在其中保存了模型文件的本地“模型”文件夹。

  4. 在“IoT 中心”页上,单击要使用的中心的名称。 你将看到已注册到 IoT 中心的设备的列表。

  5. 单击前面创建的设备的“设备 ID”。

  6. 左侧菜单显示了可用于设备的不同类型的信息。

  7. 选择“IoT 即插即用组件”以查看设备的模型信息。

  8. 可以查看设备的不同组件。 默认组件和任何其他组件。 选择要使用的组件。

  9. 选择“遥测”页,然后选择“开始”,查看设备正在为此组件发送的遥测数据。

  10. 选择“属性(只读)”页以查看为此组件报告的只读属性。

  11. 选择“属性(可写)”页以查看可以为此组件更新的可写属性。

  12. 按名称选择属性,为其输入新值,然后选择“更新所需值”。

  13. 若要查看显示的新值,请选择“刷新”按钮。

  14. 选择“命令”页以查看此组件的所有命令。

  15. 选择要测试参数的命令(如果有)。 选择“发送命令”以调用设备上的命令。 可以在正在运行示例代码的命令提示符窗口中看到你的设备响应命令。

查看代码

此示例实现了一个简单的 IoT 即插即用恒温器设备。 此示例实现的模型不使用 IoT 即插即用组件调温器设备的 DTDL 模型文件定义了设备实现的遥测、属性和命令。

设备代码使用标准 DeviceClient 类连接到 IoT 中心。 设备发送在连接请求中实现的 DTDL 模型的模型 ID。 发送模型 ID 的设备是 IoT 即插即用设备:

private static void initializeDeviceClient() throws URISyntaxException, IOException {
    ClientOptions options = new ClientOptions();
    options.setModelId(MODEL_ID);
    deviceClient = new DeviceClient(deviceConnectionString, protocol, options);

    deviceClient.registerConnectionStatusChangeCallback((status, statusChangeReason, throwable, callbackContext) -> {
        log.debug("Connection status change registered: status={}, reason={}", status, statusChangeReason);

        if (throwable != null) {
            log.debug("The connection status change was caused by the following Throwable: {}", throwable.getMessage());
            throwable.printStackTrace();
        }
    }, deviceClient);

    deviceClient.open();
}

模型 ID 存储在代码中,如以下代码片段所示:

private static final String MODEL_ID = "dtmi:com:example:Thermostat;1";

更新属性、处理命令和发送遥测数据的代码与不使用 IoT 即插即用约定的设备的代码相同。

该示例使用 JSON 库来分析从 IoT 中心发送的有效负载中的 JSON 对象:

import com.google.gson.Gson;

...

Date since = new Gson().fromJson(jsonRequest, Date.class);

清理资源

如果已完成快速入门和教程,请参阅清理资源

本教程介绍如何生成示例 IoT 即插即用设备应用程序,将其连接到 IoT 中心,并使用 Azure IoT 资源管理器工具来查看它发送的遥测数据。 该示例应用程序采用 Node.js 编写,包含在用于 Node.js 的 Azure IoT 设备 SDK 中。 解决方案构建者可以使用 Azure IoT 资源管理器工具来了解 IoT 即插即用设备的功能,而无需查看任何设备代码。

浏览代码

先决条件

请确保设置环境(包括 IoT 中心)后再继续。

可以在 Linux 或 Windows 上运行本教程。 本教程中的 shell 命令遵循适用于路径分隔符“/”的 Linux 约定,如果你是在 Windows 上操作,请务必将这些分隔符替换为“\”。

若要完成本教程,需要在开发计算机上使用 Node.js。 可以从 nodejs.org 下载适用于多个平台的最新推荐版本。

可以使用以下命令验证开发计算机上 Node.js 当前的版本:

node --version

下载代码

在本教程中,你需要准备一个用于克隆和生成用于 Node.js 的 Azure IoT 中心设备 SDK 的开发环境。

在所选目录中打开命令提示符。 执行以下命令,将用于 Node.js 的 Microsoft Azure IoT SDK GitHub 存储库克隆到此位置:

git clone https://github.com/Azure/azure-iot-sdk-node

安装所需的库

使用设备 SDK 生成包含的示例代码。 生成的应用程序将模拟连接到 IoT 中心的设备。 应用程序将发送遥测数据和属性,并接收命令。

  1. 在本地终端窗口中,前往克隆的存储库的文件夹,导航到 /azure-iot-sdk-node/device/samples/javascript 文件夹。 然后运行以下命令以安装所需的库:

    npm install
    

运行示例设备

此示例实现了一个简单的 IoT 即插即用恒温器设备。 此示例实现的模型不使用 IoT 即插即用组件调温器设备的 DTDL 模型文件定义了设备实现的遥测、属性和命令。

打开 pnp_simple_thermostat.js 文件。 在此文件中,可以了解如何:

  1. 导入所需的接口。
  2. 编写属性更新处理程序和命令处理程序。
  3. 处理所需的属性修补程序并发送遥测数据。
  4. 选择性地使用 Azure 设备预配服务 (DPS) 预配设备。

在 main 函数中,可以了解如何逐步执行以下步骤:

  1. 通过连接字符串创建设备,或使用 DPS 对其进行预配。
  2. 使用 modelID 选项指定 IoT 即插即用设备型号。
  3. 启用命令处理程序。
  4. 将遥测数据从设备发送到中心。
  5. 获取设备孪生,并更新已报告的属性。
  6. 启用所需的属性更新处理程序。

设置环境部分创建了四个环境变量来配置示例,以使用设备预配服务 (DPS) 连接到 IoT 中心:

  • 具有值 的 IOTHUB_DEVICE_SECURITY_TYPE
  • 包含 DPS ID 范围的 IOTHUB_DEVICE_DPS_ID_SCOPE。
  • 包含值 的 IOTHUB_DEVICE_DPS_DEVICE_ID。
  • 包含注册主密钥的 IOTHUB_DEVICE_DPS_DEVICE_KEY。
  • 包含值 的 IOTHUB_DEVICE_DPS_ENDPOINT。

若要详细了解示例配置,请参阅示例自述文件

运行示例应用程序,以模拟将遥测发送到 IoT 中心的 IoT 即插即用设备。 要运行示例应用程序,请使用以下命令:

node pnp_simple_thermostat.js

将显示以下输出,这表明设备已开始向中心发送遥测数据,现在可以接收命令和属性更新。

设备确认消息

在执行后续步骤时,保持示例处于运行状态。

使用 Azure IoT 资源管理器验证代码

设备客户端示例启动后,使用 Azure IoT 资源管理器工具验证它是否正常工作。

  1. 打开 Azure IoT 资源管理器。

  2. 在“IoT 中心”页上,如果尚未将连接添加到 IoT 中心,请选择“+ 添加连接”。 输入先前创建的 IoT 中心的连接字符串,然后选择“保存”。

  3. 在“IoT 即插即用设置”页上,选择“+ 添加”“本地文件夹”,然后选择在其中保存了模型文件的本地“模型”文件夹。

  4. 在“IoT 中心”页上,单击要使用的中心的名称。 你将看到已注册到 IoT 中心的设备的列表。

  5. 单击前面创建的设备的“设备 ID”。

  6. 左侧菜单显示了可用于设备的不同类型的信息。

  7. 选择“IoT 即插即用组件”以查看设备的模型信息。

  8. 可以查看设备的不同组件。 默认组件和任何其他组件。 选择要使用的组件。

  9. 选择“遥测”页,然后选择“开始”,查看设备正在为此组件发送的遥测数据。

  10. 选择“属性(只读)”页以查看为此组件报告的只读属性。

  11. 选择“属性(可写)”页以查看可以为此组件更新的可写属性。

  12. 按名称选择属性,为其输入新值,然后选择“更新所需值”。

  13. 若要查看显示的新值,请选择“刷新”按钮。

  14. 选择“命令”页以查看此组件的所有命令。

  15. 选择要测试参数的命令(如果有)。 选择“发送命令”以调用设备上的命令。 可以在正在运行示例代码的命令提示符窗口中看到你的设备响应命令。

清理资源

如果已完成快速入门和教程,请参阅清理资源

本教程介绍如何生成示例 IoT 即插即用设备应用程序,将其连接到 IoT 中心,并使用 Azure IoT 资源管理器工具来查看它发送的遥测数据。 该示例应用程序针对 Python 编写,包含在用于 Python 的 Azure IoT 中心设备 SDK 中。 解决方案构建者可以使用 Azure IoT 资源管理器工具来了解 IoT 即插即用设备的功能,而无需查看任何设备代码。

浏览代码

先决条件

请确保设置环境(包括 IoT 中心)后再继续。

若要完成本教程,需要在开发计算机上安装 Python。 查看 Azure IoT Python SDK 以了解当前的 Python 版本要求。 可以使用以下命令检查 Python 版本:

python --version

可以从 python.org 下载适用于多个平台的最新推荐版本。

在本地 Python 环境中安装该包,如下所示:

pip install azure-iot-device

克隆 Python SDK IoT 存储库:

git clone --branch v2 https://github.com/Azure/azure-iot-sdk-python

运行示例设备

azure-iot-sdk-python/samples/pnp 文件夹包含 IoT 即插即用设备的示例代码。 此教程使用 simple_thermostat.py 文件。 此示例代码实现 IoT 即插即用兼容设备,并使用 Azure IoT Python 设备客户端库。

在文本编辑器中打开 simple_thermostat.py 文件。 请注意操作方式:

  1. 定义唯一表示调温器的单一设备孪生模型标识符 (DTMI)。 DTMI 必须为用户所熟知,并且根据设备实现方案而异。 对于当前示例,该模型表示调温器,其具有与监视温度关联的遥测、属性和命令。

  2. 具有用于定义命令处理程序实现的函数。 你可编写这些处理程序以定义设备对命令请求的响应方式。

  3. 具有用于定义命令响应的函数。 你可创建命令响应函数以将响应发送回 IoT 中心。

  4. 定义输入键盘侦听器函数,以便退出应用程序。

  5. 具有 main 函数。 main 函数:

    1. 使用设备 SDK 创建设备客户端并连接到 IoT 中心。

    2. 更新属性。 恒温器模型将 targetTemperaturemaxTempSinceLastReboot 定义为恒温器的两个属性。 使用 device_client 上定义的 patch_twin_reported_properties 方法更新属性。

    3. 使用 execute_command_listener 函数开始侦听命令请求。 该函数设置侦听器以侦听来自服务的命令。 设置侦听器时,提供 method_nameuser_command_handlercreate_user_response_handler

      • user_command_handler 函数定义设备在收到命令时应执行的操作。
      • 命令成功执行时,create_user_response_handler 函数将创建要发送到 IoT 中心的响应。 可以在门户中查看此响应。
    4. 开始发送遥测。 pnp_methods.py 文件中定义了 pnp_send_telemetry。 示例代码使用循环每隔 8 秒调用此函数。

    5. 禁用所有侦听器和任务,并在按 Q 或 q 时退出循环 。

设置环境部分创建了四个环境变量来配置示例,以使用设备预配服务 (DPS) 连接到 IoT 中心:

  • 具有值 的 IOTHUB_DEVICE_SECURITY_TYPE
  • 包含 DPS ID 范围的 IOTHUB_DEVICE_DPS_ID_SCOPE。
  • 包含值 的 IOTHUB_DEVICE_DPS_DEVICE_ID。
  • 包含注册主密钥的 IOTHUB_DEVICE_DPS_DEVICE_KEY。
  • 包含值 的 IOTHUB_DEVICE_DPS_ENDPOINT。

若要详细了解示例配置,请参阅示例自述文件

看到代码后,请使用以下命令运行该示例:

python simple_thermostat.py

将显示以下输出,这表明设备正在向中心发送遥测数据,现在可以接收命令和属性更新:

Listening for command requests and property updates
Press Q to quit
Sending telemetry for temperature
Sent message

在执行后续步骤时,保持示例处于运行状态。

使用 Azure IoT 资源管理器验证代码

设备客户端示例启动后,使用 Azure IoT 资源管理器工具验证它是否正常工作。

  1. 打开 Azure IoT 资源管理器。

  2. 在“IoT 中心”页上,如果尚未将连接添加到 IoT 中心,请选择“+ 添加连接”。 输入先前创建的 IoT 中心的连接字符串,然后选择“保存”。

  3. 在“IoT 即插即用设置”页上,选择“+ 添加”“本地文件夹”,然后选择在其中保存了模型文件的本地“模型”文件夹。

  4. 在“IoT 中心”页上,单击要使用的中心的名称。 你将看到已注册到 IoT 中心的设备的列表。

  5. 单击前面创建的设备的“设备 ID”。

  6. 左侧菜单显示了可用于设备的不同类型的信息。

  7. 选择“IoT 即插即用组件”以查看设备的模型信息。

  8. 可以查看设备的不同组件。 默认组件和任何其他组件。 选择要使用的组件。

  9. 选择“遥测”页,然后选择“开始”,查看设备正在为此组件发送的遥测数据。

  10. 选择“属性(只读)”页以查看为此组件报告的只读属性。

  11. 选择“属性(可写)”页以查看可以为此组件更新的可写属性。

  12. 按名称选择属性,为其输入新值,然后选择“更新所需值”。

  13. 若要查看显示的新值,请选择“刷新”按钮。

  14. 选择“命令”页以查看此组件的所有命令。

  15. 选择要测试参数的命令(如果有)。 选择“发送命令”以调用设备上的命令。 可以在正在运行示例代码的命令提示符窗口中看到你的设备响应命令。

清理资源

如果已完成快速入门和教程,请参阅清理资源

如果要针对受限制设备进行开发,可以将 IoT 即插即用与以下内容一起使用:

本文包括这些受限制方案的链接和资源。

先决条件

下面的许多示例都需要特定的硬件设备,每个示例的先决条件各不相同。 有关详细的先决条件、配置和构建说明,请访问相关示例的链接。

使用 SDK for Embedded C

SDK for Embedded C 提供了一种将受限制设备连接到 Azure IoT 服务的轻量级解决方案,包括使用 IoT 即插即用约定。 以下链接包括基于 MCU 的设备的示例,用于教育和调试目的。

使用基于 MCU 的设备

有关在 MCU 上使用 SDK for Embedded C、设备预配服务和 IoT 即插即用的完整端到端教程,请参阅改造 PIC-IoT Wx 开发板以通过 IoT 中心设备预配服务连接到 Azure

介绍性示例

SDK for Embedded C 存储库包含几个示例,演示如何使用 IoT 即插即用:

注意

这些示例在 Windows 和 Linux 上演示运行,用于教育和调试目的。 在生产方案中,这些示例仅适用于受限制设备。

使用 Eclipse ThreadX

Eclipse ThreadX 包含一个轻量级层,其中添加了与 Azure IoT 云服务的本机连接。 该层提供了一种简单的机制,可将受限设备连接到 Azure IoT,同时使用 Eclipse ThreadX 的高级功能。 要了解详情,请参阅 Eclipse ThreadX 概述

工具链

Eclipse ThreadX 示例提供了不同类型的 IDE 和工具链组合,例如:

示例

下表列出了几个示例,它们展示了如何在不同设备上开始使用 Eclipse ThreadX 和 IoT 即插即用:

制造商 设备 示例
Microchip ATSAME54-XPRO GCC/CMakeIARMPLAB
MXCHIP AZ3166 GCC/CMake
NXP MIMXRT1060-EVK GCC/CMakeIARMCUXpresso
STMicroelectronics 32F746GDISCOVERY IARSTM32Cube
STMicroelectronics B-L475E-IOT01 GCC/CMakeIARSTM32Cube
STMicroelectronics B-L4S5I-IOT01 GCC/CMakeIARSTM32Cube

后续步骤

在本教程中,你了解了如何将 IoT 即插即用设备连接到 IoT 中心。 若要详细了解如何生成可与 IoT 即插即用设备交互的解决方案,请参阅: