65.9K
CodeProject 正在变化。 阅读更多。
Home

Azure IoT Central 测试器

starIconstarIconstarIconstarIconstarIcon

5.00/5 (5投票s)

2022年1月17日

CPOL

26分钟阅读

viewsIcon

12585

downloadIcon

201

Azure IoT Central 小工具、测试器的设计与实现

目录

特点

  • 适用于 Azure IoT Hub 和 Azure IoT Central 的 Android IoT 设备模拟器
  • 即插即用设备模型 DTDL 版本 2
  • 发送模拟遥测数据
  • 使用原始时间戳重新发送设备遥测数据
  • 使用二维码进行 IoT 连接
  • 能够预配和连接新设备并分配其 PnP 模型
  • MQTT v3.1.1 协议,端口 8883
  • 直接使用 MQTT 协议,基于 MSDN 文档
  • 无设备 SDK
  • 使用适用于 .NET 的 M2Mqtt - MQTT 客户端库

引言

五年前,我发布了一个名为 Azure IoT Hub Tester 的桌面小工具,用于模拟连接到 Azure IoT Hub 和后来的 Azure IoT Central 的 IoT 设备。基于此,并随着即插即用设备模型(Azure IoT Central 应用程序的概念核心)的普及,我可以认为本文及其实现是适用于 Android 设备的 Azure IoT Hub Tester 工具的自然延伸。

正如文章名称所示,此实现侧重于 Azure IoT Central 平台,但它也可以与 Azure IoT Hub 一起使用,和/或不使用设备模板模型。

以下屏幕截图显示了 IoTPnP 设备在 Azure IoT Central 中的位置,例如本文的 Android 实现。基本上,IoTPnP 应用程序是一个 MQTT 设备,可以预配和/或连接到 Azure IoT Central 应用程序,包括其设备模板作为位于知名 IoT 模型存储库中的共享资源。

IoTPnP 设备表示一个完全透明的设备,通过与真实设备相同的设备模型连接到 Azure IoT Central,可以发送手动遥测数据、设备孪生(例如只读和可写属性)、处理直接方法(命令)和读取云到设备消息。换句话说,IoTPnP 设备已经实现了模拟即插即用设备模型所需的所有功能。

除此之外,IoTPnP 设备可以获取任何已连接设备的特定时间批次遥测数据,并以原始时间戳重新发送。请注意,IoTPnP 设备发布的任何有效负载都可以根据需要手动编辑或随机更新。

IoTPnP 设备可以通过包含创建设备连接字符串所需属性的二维码或直接使用标准设备连接字符串文本连接到 Azure IoT Hub/Central。请注意,IoTPnP 应用程序的所有重要配置属性、状态等都已缓存,因此应用程序可以关闭、最小化等,然后再次打开并使用缓存的配置属性。

好的,让我们描述一下概念和设计。我假设您对 Azure IoT 基础设施、Azure IoT Central 以及我的 Azure IoT Hub Tester 工具的使用经验有所了解。

概念与设计

Azure IoT Central Tester 及其 Android 实现的概念和设计由设备模板模型驱动,就像在 Azure IoT Central 中一样。设备模型定义了设备和应用程序之间的交互。设备功能被分组为由 属性 (只读和可写)、遥测(D2C 消息)和命令(同步和排队/C2D 消息)集合描述的接口。接口可以打包成组件并在其他设备模型中重复使用,和/或在同一设备模型中多次使用,参见设备模型 dtmi:com:example:TemperatureController;2,其中设备模型包含两个具有相同功能的恒温器。

基于上述概念,Azure IoT Central Tester 的设计由组件驱动,因此 IoTPnP 设备仅通过所选组件的功能与 Azure IoT Central 交互。特殊情况是,如果设备模型在根模型中有一个接口,这被称为默认组件。

因此,如上所述,设备的功能由以下内容描述:遥测、属性和命令。它们之间的导航非常简单,如下面的屏幕截图所示。

如您所见,上面是 IoTPnP 应用的主页面,顶部是应用程序栏,用于显示设备名称、所选设备模型及其组件,以及 IoT 连接状态图标(绿色/红色)。此工具栏下方是接口功能的导航栏。每个选定的导航菜单都可以通过单击应用程序栏右侧的可选菜单进行扩展。导航栏的前四个项目与所选模型组件相关,最右侧的最后一个项目名为“Model/Log”,用于管理和记录 IoTPnP 应用程序。选择此项目及其设置选项菜单,我们可以处理 IoT 连接、设备模板等。有关此内容的更多详细信息将在文章后面描述。

导航栏下方的布局可水平滚动(Model/Log 项除外),如下面的屏幕截图所示。

基本上,第二个水平页面用于在订阅者和发布者之间切换,或者说是模型(请求)和响应。请注意,订阅者代表一个只读页面,其中显示接收到的消息有效负载(来自 Azure IoT Hub/Central)。另一个,例如发布者页面,表示用于在所示主题上发布消息的有效负载。此页面可以编辑。此外,您可以在右下角看到一个平面按钮,用于发布页面内容。

以下屏幕截图显示了选择“设置”选项菜单的模型项。

好的,表演时间到了。让我们描述一下这个小工具能为您做些什么。我假设您对 Azure IoT Hub/Central 有一定的了解。

用法

在您开始使用 Azure IoT Central Tester 之前,我假设您已经拥有 Azure IoT Central 应用程序。请注意,该工具仍然适用于不需要设备连接到 Azure IoT Central 应用程序的功能,例如访问 PnP 模型存储库等。

请注意,本文是使用为期7天的免费试用版 IoT Central 应用程序 rk2021iotcfree 编写的,因此所有二维码均已过期。

以下屏幕截图显示了在点击启动器图标后,Android 手机上 IoTPnP 应用程序的主页面。

该工具的主要部分,代表虚拟 MQTT 设备,是其与 Azure IoT Central 或 Azure IoT Hub 的连接。基本上,IoT 设备是根据设备连接字符串连接的。在 Azure IoT Hub 的情况下,我们有可用的设备连接字符串,或者我们可以非常简单地从 Azure IoT Hub 共享访问策略中创建一个。另一方面,例如 Azure IoT Central 应用程序,我们无法直接访问其底层的 Azure IoT Hub。我们必须使用设备预配服务(DPS),更多详细信息请参阅其 REST API 此处

Azure IoT Central Tester 仅支持使用以下方式进行设备 IoT 连接的 SAS 令牌:

  • 设备预配服务
  • 设备连接字符串

以下步骤详细展示了我们的虚拟 MQTT 设备(例如 Android 应用 IoTPnP)如何连接到 Azure IoT 提供程序。

您还需要注意一件事,设备模型代表设备实现及其功能,因此在设备预配和连接时,此模型 ID 会传递给 IoT 提供程序。换句话说,基于此设备 modelId,Azure IoT Central 应用程序将分配重新分配应用程序中已连接设备(或多个设备)的设备模板。

因此,如果我们不知道特定设备分配的设备模板,该工具应在设备预配期间使用 none 设备模型,然后连接后,我们可以根据需要选择一个。

1. 连接到 Azure IoT Central - 已预配设备

这是设备连接到 Azure IoT Central 最常见的方式,应用程序已经注册了设备并分配了其设备模型以进行消息数据交换。

以下屏幕截图显示了我的 rk2021iotcfree 应用程序及其所有设备。

如您所见,device1 已预配并根据 IoT 即插即用移动模型进行交互。

让我们将我们的工具作为代表 device1 的设备连接到此应用程序,因此选择此设备并单击“连接”,然后选择“QR 码”。

设备连接二维码代表一个具有以下模式的 JSON 对象

{
 "scopeId":"0ne00461860", 
 "deviceId":"device1",     
 "deviceKey":"..."
}

我曾尝试与 Azure IoT Central 团队讨论是否添加一个额外的可选属性,例如已分配设备模板的 modelId,请参阅此讨论 此处

请注意,此工具可以接受此可选的 modelId 属性,并基于此,IoTPnP 应用程序可以重新选择,因此两个 IoT 端点在消息数据交换交互中是同步的。您可以使用一些第三方免费工具生成此可选的设备连接二维码,例如由 Snake Chia Labs 制作的适用于 Windows 10 的 QR Code Generator。

好的,让我们继续我们的步骤,将我们的工具与 Azure IoT Central 连接为已预配的 device1。此端点已准备好扫描设备连接二维码。

以下屏幕截图显示了 IoTPnP 应用程序如何连接。选择导航栏中的 Model(Log) 项,然后选择选项菜单 Settings。

在上述菜单中,选择 IoT 连接,您应该会看到手机扫描仪。使用扫描仪扫描 Azure IoT Central 应用程序屏幕上的设备连接二维码。短暂振动后,您将在对话框中看到二维码中的 JSON 对象,请参见下面的屏幕截图。

按下“确定”按钮后,IoTPnP 应用程序将开始使用由 scopeId 定义的 IoT 应用程序处理设备预配服务。请注意,此过程需要一些时间,其成功结果将显示在日志和应用程序栏中,请参阅下面的屏幕截图。

此刻,我们的工具已连接到 Azure IoT Central 应用程序,但我们对消息数据交换一无所知,两个 IoT 端点将如何交互。换句话说,发送一些遥测数据将显示为 _unmodeleddata,因此我们必须获取已预配设备的已分配 modelId,以在设备端进行分配。

Azure IoT Central 没有内置直接支持来获取为特定设备分配的 modelId,我们必须使用多个 REST API 调用并查询设备模板才能获取它。看来 Azure IoT Central 团队不尊重设备模型驱动的架构,他们正在使用自己的具有不同唯一 ID 的内部设备模板架构。

这个事实使得查询多个设备模板实例之间的共享接口变得困难。

无论如何,以下是如何从 Azure IoT Central 应用程序获取 modelId 的步骤。首先,我们必须生成一个 API 令牌并通过我们的工具扫描它,用于 REST API 的授权标头。

以下屏幕截图显示了由 Azure IoT Central 应用程序生成的 API 令牌的二维码。

现在,在设备端,选择 Model(Log)/Show device template 以获取工具扫描器。

扫描和振动后,对话框将显示一个 ApiToken,请参见以下屏幕截图中的示例。

按下“确定”按钮,将启动对 Azure IoT Central 应用程序的多个 REST 调用,以找出用于 device1 的设备 modelId

此过程的结果是日志消息,其中我们可以看到 Azure IoT Central 应用程序为特定 device1 分配的设备模型。请注意,此 modelId 已添加到我们的工具使用的设备模型的缓存列表中。

1a. 从存储库获取设备模型

此步骤演示了我们如何从 存储库 中选择设备模型。我们工具的入口点是 Model(Log)/Settings/Device Template,请参见下面的屏幕截图。

您将获得工具已使用的模型列表对话框。您可以在对话框中执行以下操作:单击特定项目、通过按住特定项目从列表中删除、按“添加”按钮添加新项目或仅取消对话框。

请注意,列表中有一个特殊的 none 项,它将模型从设备中取消分配,换句话说,没有设备模型分配给该设备。

以下屏幕截图显示了选择 dtmi:azureiot:PhoneAsADevice;2 后的结果。

现在,具有 device1 功能的 IoTPnP 虚拟设备已准备好与连接的 Azure IoT Central 应用程序交互。

以下步骤演示了 IoTPnP 虚拟设备连接到 IoT 提供程序的其他方式。

2. 创建具有设备模型分配的新设备

此步骤演示如何预配新设备,包括其分配的模型。Azure IoT Central 没有(针对此类设备连接)内置二维码,因此我们必须创建一个。基本上,二维码包含应用程序 scopeId 和共享访问签名的主/辅助密钥。此信息可在 Azure IoT Central 中找到,请参见以下屏幕截图。

为了生成此 JSON 模式的二维码,我们可以使用任何免费的第三方程序,如下面的屏幕截图所示。

{
 "scopeId":"0ne00461860",      
 "deviceKey":"..."
}

现在,我们需要启动 IoT 连接扫描器,因此选择此菜单,如下面的屏幕截图所示。请注意,如果之前的连接已缓存,您必须按下“取消”按钮以清除它并重新开始以调出手机扫描器。

提示对话框显示了包含 DPS 过程所需属性的 JSON 对象,按“确定”按钮后,系统会要求您输入设备 ID。请注意,ID 必须是小写字符。我建议在此 DPS 过程之前选择设备模型,这样它就可以传递给 Azure IoT Central,以便在消费者端分配给设备。

以下屏幕截图显示了设备1000在已连接设备集合中的结果。

现在,IoTPnP 设备已准备好与连接的 Azure IoT Central 应用程序交互。

3. 使用设备连接字符串

此步骤演示了如何使用设备连接字符串建立与 Azure IoT Hub/Central 的连接。

以下屏幕显示了一个用于此文本的第三方二维码生成器。

最近,我的 Azure IoT Hub 测试器已经更新,因此当选择 Copy ConnectionString 时,我们可以在日志内容中获取设备连接的 QR 码。

通过扫描设备连接字符串,QR 码将弹出以下对话框,然后按下“确定”按钮将建立与 Azure IoT Hub/Central 的连接。

现在,IoTPnP 设备已准备好与连接的 Azure IoT Central 应用程序交互。

4. 设备断开/重新连接

此步骤演示了如何断开或重新连接设备。长按应用程序栏将弹出这些功能的菜单。

5. IoT 设备模型模拟

此步骤演示了设备模型在 IoT 端点(例如此工具作为虚拟设备和由 Azure IoT Central 应用程序表示的连接应用程序)之间进行交互和消息交换模式中的用法。

遵循设备模型架构,其中设备功能(例如遥测、属性和命令)在设备接口中描述。接口集合可以分组为可重用组件。设备模型的特殊情况是具有“托管”在模型本身的简单接口的模型,称为根组件或默认组件。

使用设备模型与连接的 IoT 应用程序交互的设备被称为 即插即用 (PnP) 设备,这是我们的 Android 虚拟应用程序 IoTPnP 的即将到来的名称。

设备模型(由 DTDL v2 规范编写)代表 IoT 生产者和其消费者之间的消息交换模式。这是一份存储在模型共享存储库中的通用契约文档。

PnP 设备模型使我们能够使用“模型优先”策略构建 IoT 解决方案,就像我们拥有“契约优先”一样。

本文及其 PnP 设备 Android 实现试图演示“模型优先”策略,其中设备端可以在没有实际实现的情况下以完全透明的方式与 IoT 应用程序交互。

还有一件事,IoTPnP 设备允许根据类型值模拟随机数值。基本上,发布者的有效负载基于设备模型模式,值由带有前缀“$”字符的 string 表示,例如:

{
  "battery":"$integer",
  "accelerometer":{
    "x":"$double",
    "y":"$double",
    "z":"$double"
  }
}

在发布有效负载之前,这些值别名会根据类型替换为随机值。请注意,只有 string 类型不会随机化,其值始终为 abcd

以下步骤详细描述了 IoTPnP 设备如何根据选定的设备模型与连接的 IoT 应用程序交互。

5a. 遥测数据 (D2C 消息)

此步骤演示了如何根据设备模型向 IoT 应用程序发送所选组件的遥测数据。

我们工具的应用程序栏显示了三个 ID,例如:

  • 设备ID:mobile1
  • 设备显示模型名称:IoT 即插即用移动设备
  • 组件名称:传感器

点击导航栏中的“遥测”项,我们进入了发布有效负载到主题的位置,请参阅下面的屏幕截图。

如您所见,模型组件 sensors 具有发布遥测数据的能力,向左滚动页面将显示主题的末尾,其中有一个属性 $.sub=sensors 指示组件名称。

有效负载可以编辑,或者其值可以随机更新,请参阅在上下文菜单中选择“编辑”后的以下屏幕截图。

并选择“随机更新

请注意,如果您想返回原始有效负载,只需选择导航栏上的菜单项“遥测”。

所以,现在我们已准备好将有效负载作为遥测数据发布。在我的演示示例中,我点击了“发布者”按钮三次,如下面的屏幕截图所示。

让我们看看另一端,例如 Azure IoT Central 应用程序。以下屏幕截图显示了接收到的原始数据。

太棒了。我们可以看到遥测数据已根据通用设备模型被 Azure IoT Central 应用程序接受。

5aa. 从 Azure IoT Central 获取原始遥测数据

IoTPnP 设备具有获取特定设备的遥测数据流(包括原始时间戳)的功能。以下步骤展示了我们如何在设备 mobil1 上获取我们发布的遥测数据。此功能需要有效的 ApiToken,否则我们必须扫描其二维码。我假设我们有一个有效的 ApiToken,因此我们可以按下“确定”按钮。

我们需要选择设备 mobil1,然后选择 TimeWindow

以下屏幕截图显示了此操作的结果。请注意,此过程将花费相同的时间,因为它需要处理多个 REST 调用。

此外,我们可以在“模型/日志”页面中查看此过程的一些详细信息。

这就是遥测数据发布演示的全部内容。

还有一件事。请记住此步骤 5aa,以便稍后讨论,届时我将演示遥测数据批处理,即重新发送真实设备遥测数据的功能。

5b. 只读/可写属性(报告/所需属性)

此步骤演示了设备如何与 Azure IoT Central 交互,以实现属性等接口功能。我假设您了解 Azure IoT Central、Azure IoT Hub 设备孪生和设备 PnP 模型。

设备模型基本上包含两种与 IoT 应用程序端 (Azure IoT Central App) 相关的属性,即 writablereadonly 属性。IoT 应用程序只能更改可写属性。从设备端来看,这些属性具有相反的功能,因此设备可以只读一个可写属性,依此类推。

此特性源自 Azure IoT Hub 设备孪生,由报告属性和所需属性表示。

通过使用设备孪生(即报告(只读)和所需(可写)属性),可以实现两个 IoT 端点之间的同步。属性是事件驱动的,因此如果它们的值发生变化,IoT 端点(设备和 IoT 应用程序)可以接收这些变化。这是通过同步两个端点之间的状态来简化操作的非常重要的行为。

基于上述简要描述,IoTPnP 设备实现了孪生功能,请参见以下入口点。

如您所见,上面有两个硬编码的文件夹,例如:

  • /PATCH/properties/desired/#
  • /res/#

这两个文件夹代表两个用于订阅(接收)来自 IoT 应用程序的 MQTT 消息的主题。第一个专门用于接收所需(可写)属性的更改,第二个用于接收发布请求的结果,例如:从后端(IoT 应用程序)获取完整的设备孪生。

从设备模型的角度来看,第一个文件夹与可写属性相关,第二个文件夹与只读属性相关。

请注意,如果设备模型的组件包含只读和/或可写属性,则文件夹的名称将加粗。

如您所见,上面的组件传感器没有任何只读或可写属性。

还有一件事,每次点击导航栏上的“孪生”项时,IoTPnP 设备都会发布请求以从 IoT 应用程序获取设备孪生,因此当我们选择“订阅者”选项卡时,页面将显示所需属性和报告属性的当前状态。

以下屏幕截图显示了用于发布的空有效负载。我们可以向 IoT 应用程序发布一些属性,但此属性将作为 _unmodeleddata 处理。

因此,让我们切换到有属性的模拟组件。点击“模型/设置”并选择“组件模板”。设备模型提供了另外两个组件,即 device_infodefault(根组件)。让我们选择 device_info 组件。

点击 Twin 导航项,我们可以在 Publisher 选项卡中看到以下差异。

点击“订阅者”选项卡,我们可以看到设备孪生的当前值(报告属性和所需属性)。

顺便说一下,上述 device_info 状态是从真实的移动设备完成的。

以下屏幕截图显示了在两个 IoT 端点(设备和 IoT Central)上模拟(发布)任何未建模属性。

回到我们的 device_info 只读属性,我们将向 IoT 应用程序发布随机值。

点击“Twin”,我们可以刷新“订阅者”选项卡页面。

在 Azure IoT Central 上,我们可以看到此更新。

让我们选择最后一个组件,例如 default 组件。我们可以看到,只有一个简单的属性 readOnlyProp。按下 Publish 按钮,随机更新的属性被发送到 Azure IoT Central。

您可以在以下屏幕截图中看到 readOnlyProp 的值。

太棒了,它在这些 IoT 端点之间基于设备模型运行良好。

5ba. 可写属性的消息交换

我们的设备模型有一个可写属性,如下图所示。让我们将其值更新为 XYZ。点击“保存”按钮,事件将生成并发送到设备。

以下屏幕截图显示了此可写属性收到的 PATCH,而发布者选项卡显示了此补丁的响应有效负载格式。请注意,IoT Central 继续等待设备端对此状态的确认。

我们可以点击“发布者”页面进入编辑模式,确认属性值及其版本。正确的值显示在“订阅者”页面上。

当“发布者”被点击时,有效负载被发送到 Azure IoT Central,我们可以在屏幕上看到确认状态。

所以,现在我们知道两个 IoT 端点已经同步了可写属性。

点击“Twin”导航项,我们可以看到设备孪生的最新状态。

这就是设备模型属性模拟的全部内容。

5c. 命令(直接方法)

设备模型使用命令类型来调用设备行为。IoT 应用程序和设备之间的命令消息交换模式基本上使用请求/响应模式,遵循 Azure IoT Hub 设备直接方法,例如同步调用。

命令始终需要设备方法的响应。调用者会告知设备等待响应消息的时间 (responseTimeoutInSeconds),如果遇到 长时间运行的命令,设备可以立即响应状态 202 accepted,否则如果时间到期,命令将失败。

以下步骤演示了传感器组件中命令的交互。请注意,命令的调用者不是设备,而是 IoT 应用程序。

以下屏幕截图显示了在两个 IoT 端点(Azure IoT Central 和设备上的下一张图片)调用命令之前的情况。

如您所见,通过点击“方法”,我们可以看到特定组件中定义的所有方法,即文件夹的粗体名称,在那里我们可以看到接收到的请求/响应消息。选择命令名称后,请求和响应模型将显示在水平可滚动页面上。

让我们创建一个命令。以下屏幕截图显示了 Azure IoT Central 上选定的命令。

按下上面的“运行”按钮,请求消息被发送到设备。

此时,我正忙于制作此请求的片段,因此 responseTimeoutInSeconds (30秒) 已过期,调用者以“失败”状态完成此命令,请参见命令历史记录。

因此,我制作了另一个命令,重点关注即时响应,例如发布空有效负载。

如您所见,以下命令历史记录显示,我们在此交互中是成功的。

这就是所有关于此同步(在线)命令的内容,它始终需要设备的响应,但还有一个由 IoT 应用程序明确处理的命令,换句话说,它不是由设备模型定义的。此命令是离线处理的,对于可断开连接的设备很有用。

对于这些同步命令,还有一点。以下屏幕截图显示了我们如何启动一个长时间运行的命令。点击“已接受 (202)”项,我们接受此命令,最终响应将通过发送一个名为该方法的报告属性来使用。

5d. 排队/离线命令(C2D 消息)

此命令称为云到设备消息传递(C2D 消息传递)。有关离线命令的更多详细信息,请参阅此处

我们演示的模型没有离线命令,请参见以下屏幕截图,当我们点击“消息”项时。

让我们将在线(标准)命令更改为离线(排队)命令。以下屏幕截图显示了如何在 Azure IoT Central 中完成此操作。请不要忘记按下 Save 按钮,然后点击 Publish 以刷新应用程序中的此更改。

现在,我们有一个离线命令,让我们调用它。

点击上面“运行”按钮,C2D 消息被发送到设备。我们可以看到此命令的非粗体文件夹及其收到的消息。

请注意,上图显示了消息有效负载,但通过水平滚动此页面,我们可以看到主题上的所有属性,包括方法名称。

离线命令将消息发送到 IoT Central 应用程序底层 IoT Hub 的队列,因此响应是即时的,并且以成功状态完成。

6. 高级功能

目前,IoTPnP 应用程序只内置了一个高级功能,即批处理遥测数据,它允许重放设备已发布的遥测数据。批处理遥测数据包括使用众所周知的属性(_eventcreationtime)的原始时间戳。

6a. 批处理遥测数据

此步骤演示了真实设备 mobil1 的遥测数据批处理,并由设备 device1 发布。首先,我们必须将 IoTPnP 设备连接为 device1,然后选择 Download Sample1 选项。

接下来,我们需要选择一个设备和 TimeWindow 用于批处理遥测数据。

来自选定设备和 TimeWindow 的遥测数据将显示在 device1Publisher 页面中。按下“发布者”按钮,批处理过程开始。

请注意,Azure IoT Central 目前不支持批量发布遥测数据,其中每个事件都可以有自己的时间戳(_eventcreationtime),我们必须一个接一个地在批量循环中完成。

以下屏幕截图显示了批处理过程完成后,“模型/日志”页面。

批处理遥测数据的原始数据显示在以下 IoT Central 屏幕截图上。

如您所见,上述设备模型接受了属性 _eventcreationtime

这就是批处理过程的全部内容。

实现

首先,以下是先决条件:

  • Visual Studio 2019/2022
  • M2Mqtt - 适用于 .NET 的 MQTT 客户端库 4.3.0 版
  • Microsoft Azure IoT Central 应用程序(任何层,包括免费版)
  • 互联网连接
  • 下载本文的软件包(源代码)(创建 .apk 的选项)
  • 理解文档 Windows 上的 Android 开发概述

Android 应用程序项目是从 Simple View App 模板作为起点创建的。程序集名称和命名空间很简单,为 App6,应用程序名称为 IoTPnP,包名称为 com.pathcom.rkiss.IoTPnP。代码的许多部分已从我已验证的文章 Azure IoT Hub Tester 中使用,例如:PnP 模型库、sasToken 库等,当然,还要感谢第三方,例如 MQTT 通信客户端库 M2MqttZXing.Mobile 用于 QR 扫描器。

Android 应用程序是一个 MainActivity 驱动的应用程序,其处理程序、事件和对话框由导航栏、选项菜单或页面上的上下文菜单中的菜单项触发。多线程编码基于 ThreadPool.QueueUserWorkItem 方法和 async/await 模式。

以下屏幕截图(无代码片段)显示了在对话框的后台任务中使用多线程实现的一个示例,其中需要 HTTPS 通信并且工作流过程取决于对话框的选择。

以上是来自 MainActivity.cs 实现文件的一小段代码片段。如果您对这个 Android 应用程序是如何实现的感兴趣,请查看它。

本文到此结束,希望您喜欢。

结论

本文为您提供了一个用于 Azure IoT Central 应用程序或 Azure IoT Hub 的小型移动测试器。在评估和探索 Azure IoT Central 应用程序、开发 MQTT 设备、排除 IoT 数据故障或模拟真实设备的遥测数据时,它将是您的得力助手。还有一点,这个小型移动测试器以即插即用设备的形式与 IoT Central 交互,它允许模拟设备的遥测、属性和命令功能。希望您会觉得它有用。

参考文献

历史

  • 2022年1月17日:初始版本
© . All rights reserved.