2016 年 9 月

第 31 卷,第 9 期

此文章由机器翻译。

新型应用 - 利用 UWP 和 Azure 构建城市范围的 Wi-Fi 扫描仪

通过 Frank La La

在我年 7 月的专栏 (msdn.com/magazine/mt736460),我介绍了如何编写通用 Windows 平台 (UWP) 应用程序来扫描的 Wi-fi 网络。在项目结束时,我提供了解决方案以创建 CSV 文本字符串。我再简要提到过什么可以使用 Power BI 实现,根据数据可视化。然而,复制和粘贴文本数据从用户界面的手动流程阻止解决方案,扩展到单个用户。此外,设计目标是在没有显示任何类型的 IoT 设备上运行应用程序。这意味着 UWP 应用程序必须将数据发送到云中,无任何用户界面。这也称为是"无头"的解决方案。该计划,需要安装中的各个城市扫描的 Wi-fi 网络的许多设备。

首先,必须设置云服务,从而能够在所有这些数据。其次,您必须修改现有 UWP 应用程序代码以将数据发送到该云服务。最后,您想要实现此 Power BI 中的数据可视化效果。

云和物联网

云是伟大的创新。它提供了有效地无限的存储和计算甚至低功率设备。具有所需的就是连接到 Internet。云服务通常物联网 (IoT) 所述,已经成为会话,而不是实际的设备。为什么会这样? 嗯,简单地说,许多设备连接到 Internet 需要一个中心位置,从其用于将数据传输和接收通知。Crunched 并在云中进行分析,很多世界上更改,改变范例的结果是的数据的结果。此外,放置到云计算和存储的负担意味着,实际的终结点设备可以是较弱。较少的电量将转换为更便宜、 更高效电源的设备。

正如所示术语,IoT 是有关 Internet 和操作连接到 Internet。因此,这意味着具有设备和云中的服务上运行的代码。此项目的最终目标是让多个设备使用 Wi-fi 适配器连续扫描的无线网络。这些设备将报告其发现实时的情况。对于本文的目的,我们将假定您的设备有权访问 Internet。

解决方案是使用 Microsoft Azure IoT 中心和 Azure 流分析。Azure IoT 中心是高度可伸缩的服务,可以引入数百万的每秒事件数。IoT 中心是类似于 Azure 事件中心,只不过它具有设备管理的额外功能。必须要连接到 IoT 中心注册设备。注册后,设备将传输到 IoT 中心,则将收集实时数据的一条消息。可以将该数据发送到 Azure 流分析。

Azure 流分析是完全托管的服务,提供低延迟、 高可用性、 可缩放、 复杂事件处理通过从各种源中流式处理的数据。流分析将收集从 Wi-fi 扫描仪设备运行的 Wi-fi 扫描仪 UWP 应用程序的每个流中的数据。

简单地说,Azure IoT 中心从已注册的设备中收集的数据,Azure 流分析可以方便地查询数据。若要执行此操作,将需要设置相应的服务在 Azure 中并对 UWP 应用程序进行修改。

设置云服务

第一件事是创建 Azure IoT 中心。若要执行此操作,浏览到 Azure 门户、 单击新建,然后单击物联网以展开该类别中的选项,如中所示 图 1。单击 IoT 中心以查看对话框中所示 图 2

在 Azure 门户中创建 IoT 中心
图 1 在 Azure 门户中创建 IoT 中心

创建 IoT 中心对话框
图 2 创建 IoT 中心对话框

在此窗体中,将输入 IoT 中心的唯一名称。我选择 CityWifiScannerHub。现在,我选择免费层的服务,因为它是足够用来开发。我还选择创建新的资源组并将其命名为 CityWifiScannerRG。最好从选择的命名约定,请坚持使用它。至于区域中,它并不重要您选择的区域。只需确保您选择要保存在数据传出费用的所有服务的同一区域。对于我而言,非常适合做美国东部。检查固定到仪表板用户更容易访问此服务的选项。现在,单击创建,则服务将启动并运行在一段时间。

在等待服务开始时,请立即下载从设备资源管理器的好时机 bit.ly/25lXGY9

设备资源管理器

设备资源管理器是一种实用工具,可帮助您使用构建解决方案 IoT 中心通过允许您注册和删除设备到 IoT 中心,以及设备和中心之间发送的监视数据。若要到中心使用该工具,您将需要从 IoT 中心获取的连接字符串。在 Azure 门户中,浏览到 IoT 中心,然后单击键图标。由于您希望添加和删除设备的管理权限,则选择 iothubowner 策略。在以下对话框中,单击连接字符串旁边的复制图标-为主键,如中所示 图 3。这会将连接字符串复制到剪贴板。

对设备资源管理器获取连接字符串
图 3 设备资源管理器获取连接字符串

使用剪贴板中的连接字符串中,转到设备资源管理器并将连接字符串粘贴到 IoT 中心连接字符串文本框。单击更新,您应该看到消息框,指出,"设置更新成功。" 单击确定以关闭消息框。

现在,单击管理选项卡上。若要与此 IoT 中心注册设备,你将需要单击创建。在下列对话框中,输入设备 ID,正如您看到在 图 4。单击创建按钮来与此服务中注册设备。将出现一个消息框,以确认该操作已成功。单击接近消除它。

设备注册到设备资源管理器
图 4 使用设备资源管理器中注册设备

您会注意到中已有一个条目现在的设备列表。右键单击 WiFiScanner1 条目。在出现的上下文菜单,选择复制所选设备的连接字符串中所示 图 5。将在 UWP 应用程序中使用此连接字符串以将其连接到 IoT 中心。

获取设备的连接字符串
图 5 获取设备的连接字符串

修改 UWP 代码

这不是有关 UWP 开发,而无需一些 UWP 代码列。现在就可以修改在以前的专栏来将其连接到 IoT 事件中心中创建应用程序。幸运的是,Microsoft 已创建存储库可简化这和在 NuGet 上发布它。从以前的专栏中应用程序加载到 Visual Studio。右键单击引用,然后单击管理 NuGet 包。在搜索框中,键入 Microsoft.Azure.Devices.Client,然后选择第一个选项。就像任何其他 NuGet 程序包,请安装此包。

一旦安装包时,将以下代码添加到 MainPage.xaml.cs 文件 using 语句︰

using Microsoft.Azure.Devices.Client;

然后将以下成员添加到类中,替换上一节中创建的连接字符串为"[连接字符串]":

private DeviceClient deviceClient =
  DeviceClient.CreateFromConnectionString(
  [Connection String]);

发送到 Azure IoT 中心数据所需的代码是普通归功于 Microsoft.Azure.Devices.Client 的命名空间内的代码。下面的方法来做到这一点︰

private async void SendScanData(string message)
{
  var content = new Message(
    Encoding.UTF8.GetBytes(message));
  await deviceClient.SendEventAsync(content);
}

使用此代码放在 MainPage 类中,现在可以添加朝着 RunWifiScan 方法在 MainPage.xaml.cs 文件的末尾的以下行。下面的代码中的第一行将 WiFiPointData 对象转换为传输,一个 JSON 字符串,而第二行调用的方法的方式传输到事件中心数据︰ 

string NetworkInfoJson = CreateJson(wifiPoint);
SendScanData(NetworkInfoJson);

现在就可以运行该应用程序并发送到 IoT 中心的数据。但首先,转到设备资源管理器中,单击数据选项卡上,单击监视器按钮。这样您就可以观看获取发送到 Iot 中心的数据。

使用流分析

使用此完成所有工作,您可以在云中和将数据发送到它的 UWP 应用 IoT 中心。现在要做什么? 下一步是获取数据并执行与其有用。对于此任务,您将使用流分析。在 Azure 门户中,单击新建,然后搜索流分析。单击创建和对话框出现的新的流分析作业。您喜欢的任何命名作业 — 我选择 CityWifiScannerJob。我还选择了使用以前创建的资源组。再次重申,我选择在一个数据中心中保留我对此的所有服务的美国东部。您应看到类似于 图 6。单击创建创建作业。

配置新的流分析作业
图 6 配置新的流分析作业

通过从处理通过查询,然后将其发送到输出的输入源获取数据的工作流分析作业。创建一个新的作业时,您具有零个输入和输出,以及默认查询。

创建输入

首先,通过单击输入磁贴,然后在添加按钮添加一个输入。在新的输入对话框,为输入一个名称,如中所示 图 7 (我选择 CitiWifiScannerInput)。将源更改为 IoT 中心。然后从下拉列表中选择 CityWifiScannerHub。由于 UWP 应用 UTF 8 编码 json 格式发送数据,因此没有必要修改的默认选项。单击创建创建输入。

创建输入
图 7 创建输入

现在,创建输入后,就可以创建输出。在按下时,新的 Azure 门户不支持创建 Power BI 输出。为此,您需要加载从经典门户 bit.ly/1V3IFPU。从此处,请转到流分析部分、 选择 CityWifiScannerJob 和单击输出。在选项列表中,选择 Power BI。CitiWifiPowerBI、 数据集名称 CityWifiScans 和平板电脑名称 CityWifiTable 别名命名输出。单击下一步箭头。下面的屏幕将要求您授予对 Power BI 访问权限。您将需要登录到组织帐户。如果您没有,请遵循在博客文章中的指导 bit.ly/29m89ZV 创建 Office 365 试用帐户。 

输入和输出到位后,现在就可以编辑查询。什么是可能在流分析中用查询的完整范围超出了本文的讨论范围。因此,我将创建非常简单的查询将发送所有数据从输入到不含任何转换或子句的输出︰

SELECT
INTO
  CityWifiPowerBI
FROM
  CitiWifiScannerInput

此语法应非常熟悉的 T-SQL 内都使用。请注意,输入的输入和输出名称以前用于在查询中指示 job 类从何处获取数据并将它发送到何处。现在,就可以保存查询并运行该作业。单击底部的页后,可以启动作业开始按钮。可能需要等待一段时间要启动的作业。它执行一次,在您的浏览器中打开 Power BI。您现在应看到 CitiWifiScans 作为数据集在您的工作区中。

通过单击在其上打开该数据集。将 Lat 字段从字段列表拖放到空的空白区域。将显示地图控件。现在,将长的字段拖放到地图控件。您应该看到与您的数据的纬度和经度坐标的点绘制地图。我的示例数据集,我有看起来像 图 8

在 Power BI 与 UWP 应用程序中的数据中创建映射
图 8 使用 UWP 应用程序中的数据的 Power BI 中创建映射

总结

实际功率和承诺的 IoT 革命存在于云中。云代表靠近无限的存储和处理能力。这要归功于 Internet 的低成本、 节能的设备可利用能力和存储。在这里,数据可以进行排队,处理和使用 Power BI 之类的工具甚至可视化。能够轻松地修改 UWP 应用程序以将数据发送到 Azure IoT 中心并将其部署到 IoT 设备使会将我们的世界无敌组合。


Frank La Vigne 是 Microsoft 技术和市政参与团队的技术推广人员,他可以帮助用户利用技术以便创建更好的社区。 他定期在 FranksWorld.com 上发布博客,且拥有一个称为“Frank’s World TV”(youtube.com/FranksWorldTV) 的 YouTube 频道。

衷心感谢以下技术专家对本文的审阅: Olivier bloch 发布和 Rob Tiffany