快速入门:将遥测数据从设备发送到 IoT 中心并使用后端应用程序从中心读取遥测数据 (C)

IoT 中心是一项 Azure 服务,用于将大量遥测数据从 IoT 设备引入云中进行存储或处理。 本快速入门会将模拟设备应用程序的遥测数据通过 IoT 中心发送到后端应用程序进行处理。

本快速入门使用适用于 C 的 Azure IoT 设备 SDK 中的 C 示例应用程序向 IoT 中心发送遥测数据。 Azure IoT 设备 SDK 以 ANSI C (C99) 编写,具有可移植性和广泛的平台兼容性。 在运行示例代码之前,需要创建一个 IoT 中心并将模拟设备注册到该中心。

本文针对 Windows 编写,但也可以在 Linux 上完成本快速入门。

如果没有 Azure 订阅,请在开始前创建一个试用帐户

先决条件

准备开发环境

本快速入门使用适用于 C 的 Azure IoT 设备 SDK

可以通过安装适用于以下环境的包和库来使用该 SDK:

但是,在本快速入门中,我们将准备一个用于从 GitHub 克隆和生成 Azure IoT C SDK 的开发环境。 GitHub 上的 SDK 包含本快速入门中使用的示例代码。

  1. 下载 CMake 生成系统版本 3.11.4。 使用相应的加密哈希值验证下载的二进制文件。 以下示例使用了 Windows PowerShell 来验证 x64 MSI 分发版本 3.11.4 的加密哈希:

    PS C:\Downloads> $hash = get-filehash .\cmake-3.11.4-win64-x64.msi
    PS C:\Downloads> $hash.Hash -eq "56e3605b8e49cd446f3487da88fcc38cb9c3e9e99a20f5d4bd63e54b7a35f869"
    True
    

    在编写本文时,CMake 站点上列出了版本 3.11.4 的以下哈希值:

    6dab016a6b82082b8bcd0f4d1e53418d6372015dd983d29367b9153f1a376435  cmake-3.11.4-Linux-x86_64.tar.gz
    72b3b82b6d2c2f3a375c0d2799c01819df8669dc55694c8b8daaf6232e873725  cmake-3.11.4-win32-x86.msi
    56e3605b8e49cd446f3487da88fcc38cb9c3e9e99a20f5d4bd63e54b7a35f869  cmake-3.11.4-win64-x64.msi
    

    在进行 CMake 安装之前,必须在计算机上安装 Visual Studio 必备组件(Visual Studio 和“使用 C++ 的桌面开发”工作负荷)。 满足先决条件并验证下载内容后,安装 CMake 生成系统。

  2. 打开命令提示符或 Git Bash shell。 执行以下命令克隆 Azure IoT C SDK GitHub 存储库:

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

    此存储库的大小目前大约为 220 MB。 应该预料到此操作需要几分钟才能完成。

  3. 在 git 存储库的根目录中创建 cmake 子目录,并导航到该文件夹。

    cd azure-iot-sdk-c
    mkdir cmake
    cd cmake
    
  4. 运行以下命令,生成特定于你的开发客户端平台的 SDK 版本。 将在 cmake 目录中生成模拟设备的 Visual Studio 解决方案。

    cmake ..
    

    如果 cmake 找不到 C++ 编译器,则可能会在运行以上命令时出现生成错误。 如果出现这种情况,请尝试在 Visual Studio 命令提示符窗口中运行该命令。

    生成成功后,最后的几个输出行如下所示:

    $ cmake ..
    -- Building for: Visual Studio 15 2017
    -- Selecting Windows SDK version 10.0.16299.0 to target Windows 10.0.17134.
    -- The C compiler identification is MSVC 19.12.25835.0
    -- The CXX compiler identification is MSVC 19.12.25835.0
    
    ...
    
    -- Configuring done
    -- Generating done
    -- Build files have been written to: E:/IoT Testing/azure-iot-sdk-c/cmake
    

创建 IoT 中心

第一步是使用 Azure 门户在订阅中创建 IoT 中心。 IoT 中心用于将大量遥测数据从许多设备引入到云中。 然后,该中心会允许一个或多个在云中运行的后端服务读取和处理该遥测数据。

  1. 登录到 Azure 门户

  2. 选择“创建资源” > “物联网” > “IoT 中心”。

    选择安装 IoT 中心

  3. 在“IoT 中心”窗格中,输入 IoT 中心的以下信息:

    • 订阅:选择需要将其用于创建此 IoT 中心的订阅。
    • 资源组:创建用来存放 IoT 中心的资源组,或使用现有的资源组。 通过将所有相关资源都放在一个组(例如 TestResources)中,可以一起管理它们。 例如,删除资源组会删除包含在该组中的所有资源。 有关详细信息,请参阅使用资源组管理 Azure 资源
    • 区域:选择离你的设备最近的位置。
    • 名称:为你的 IoT 中心创建一个唯一名称。 如果输入的名称可用,会显示一个绿色复选标记。

    Important

    IoT 中心将公开为 DNS 终结点,因此,命名时请务必避免包含任何敏感信息。

    IoT 中心基本信息窗口

  4. 选择“下一步: 大小和规模”,以便继续创建 IoT 中心。

  5. 选择“定价和缩放层”。 就本文来说,请选择“F1 - 免费”层(前提是此层在订阅上仍然可用)。 有关详细信息,请参阅定价和缩放层

    IoT 中心大小和规模窗口

  6. 选择“查看 + 创建”。

  7. 查看 IoT 中心信息,然后单击“创建”。 创建 IoT 中心可能需要数分钟的时间。 可在“通知”窗格中监视进度。

注册设备

必须先将设备注册到 IoT 中心,然后该设备才能进行连接。

  1. 添加 IoT 中心 CLI 扩展并创建设备标识。 将 {YourIoTHubName} 替换为 IoT 中心选择的名称:

    az extension add --name azure-cli-iot-ext
    az iot hub device-identity create --hub-name {YourIoTHubName} --device-id MyCDevice
    

    如果为设备选择不同名称,则在运行示例应用程序之前,请在其中更新设备名称。

  2. 运行以下命令,获取刚注册设备的设备连接字符串:

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

    记下看起来类似于 Hostname=...= 的设备连接字符串。 稍后会在快速入门中用到此值。

发送模拟遥测数据

模拟设备应用程序将连接到 IoT 中心上特定于设备的终结点,并发送模拟遥测数据形式的字符串。

  1. 使用文本编辑器打开 iothub_convenience_sample.c 源文件,并查看用于发送遥测数据的示例代码。 该文件位于以下位置:

    \azure-iot-sdk-c\iothub_client\samples\iothub_convenience_sample\iothub_convenience_sample.c
    
  2. 找到 connectionString 常量的声明:

    /* Paste in your device connection string  */
    static const char* connectionString = "[device connection string]";
    

    connectionString 常量的值替换为之前记下的设备连接字符串。 然后保存对 iothub_convenience_sample.c 所做的更改。

  3. 在终端窗口中,导航到在 Azure IoT C SDK 中创建的 CMake 目录内的 iothub_convenience_sample 项目目录。

    cd /azure-iot-sdk-c/cmake/iothub_client/samples/iothub_convenience_sample
    
  4. 使用以下命令行运行 CMake,以使用更新的 connectionString 值生成示例:

    cmake --build . --target iothub_convenience_sample --config Debug
    
  5. 在命令提示符下运行以下命令,以运行模拟设备应用程序:

    Debug\iothub_convenience_sample.exe
    

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

    运行模拟设备

从中心读取遥测数据

在本部分,我们将结合 IoT 扩展使用 Azure CLI 来监视模拟设备发送的设备消息。

  1. 使用 Azure CLI 运行以下命令,以建立连接并读取 IoT 中心发送的消息:

    az iot hub monitor-events --hub-name {YourIoTHubName} --output table
    

    使用 Azure CLI 读取设备消息

清理资源

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

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

Important

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

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

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

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

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

    Delete

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

后续步骤

在本快速入门中,我们设置了 IoT 中心、注册了设备、使用 C 应用程序将模拟遥测数据发送到了中心,然后使用 Azure CLI 读取了中心发送的遥测数据。

若要详细了解如何使用 Azure IoT 中心 C SDK 进行开发,请继续学习以下操作方法指南: