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

IoT 中心是一项 Azure 服务,可将大量遥测数据从 IoT 设备引入云,并从云管理设备。 在本快速入门中,会使用直接方法来控制连接到 IoT 中心的模拟设备。 可使用直接方法远程更改连接到 IoT 中心的设备的行为。

本快速入门使用两个预先编写的 Java 应用程序:

  • 从后端应用程序调用的可响应直接方法的模拟设备应用程序。 为了接收直接方法调用,此应用程序会连接到 IoT 中心上特定于设备的终结点。
  • 后端应用程序,可在模拟设备上调用直接方法。 为了在设备上调用直接方法,此应用程序会连接到 IoT 中心上的服务端终结点。

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

先决条件

本快速入门中运行的两个示例应用程序是使用 Java 编写的。 开发计算机上需要有 Java SE 8 或更高版本。

可从 Oracle 为多个平台下载 Java。

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

java --version

若要生成示例,需安装 Maven 3。 可从 Apache Maven 为多个平台下载 Maven。

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

mvn --version

如果尚未进行此操作,请从 https://github.com/Azure-Samples/azure-iot-samples-java/archive/master.zip 下载示例 Java 项目并提取 ZIP 存档。

创建 IoT 中心

如果已完成上一快速入门:将遥测数据从设备发送到 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 中心,则可跳过此步骤。

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

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

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

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

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

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

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

检索服务连接字符串

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

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

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

侦听直接方法调用

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

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

  2. 在所选文本编辑器中打开 src/main/java/com/microsoft/docs/iothub/samples/SimulatedDevice.java 文件。

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

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

    mvn clean package
    
  4. 在终端窗口中,运行以下命令,运行模拟设备应用程序:

    java -jar target/simulated-device-2-1.0.0-with-deps.jar
    

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

    运行模拟设备

调用直接方法

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

  1. 在另一个终端窗口中,导航到示例 Java 项目的根文件夹。 然后导航到 iot-hub\Quickstarts\back-end-application 文件夹。

  2. 在所选文本编辑器中打开 src/main/java/com/microsoft/docs/iothub/samples/BackEndApplication.java 文件。

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

  3. 在终端窗口中,运行以下命令,安装所需的库,并生成后端应用程序:

    mvn clean package
    
  4. 在终端窗口中,运行以下命令,运行终端应用程序:

    java -jar target/back-end-application-1.0.0-with-deps.jar
    

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

    运行后端应用程序

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

    模拟客户端的变化

清理资源

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

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

Important

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

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

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

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

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

    Delete

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

后续步骤

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

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