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

使用 Intel® NUC 和 Microsoft Azure IoT Edge 构建云连接传感器应用程序

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2017年10月24日

CPOL

8分钟阅读

viewsIcon

9364

本文将展示如何使用 Intel® NUC 网关和 Microsoft Azure IoT Edge 将传感器连接到运行在 Azure 云中的 Microsoft Azure IoT Hub。

引言

本文将展示如何使用 Intel® NUC 网关和 Microsoft Azure* IoT Edge 将传感器连接到运行在 Azure 云中的 Microsoft Azure* IoT Hub。您将看到如何在网关上创建一个模块化的传感器应用程序,该应用程序读取实时传感器数据,在本地处理数据,并将数据发送到 Microsoft Azure IoT Hub,在那里可以在云中存储、可视化和处理数据。在网关上处理数据允许您使用边缘计算将功能放置在更靠近传感器的地方,并允许您集成无法直接连接到云的传感器。我们将使用 Node.js* 和 Microsoft Azure IoT Edge SDK 在应用程序中执行输入、处理和输出功能。

设置和先决条件

  • 运行 Ubuntu* Server 16.04 LTS 操作系统的 Intel® NUC 网关。
  • 在网关上安装了 Node.js v6.x 和 NPM。
  • 网关已连接到具有 Internet 连接的 LAN 网络。
  • RH-USB 温度和湿度传感器。
  • 一台开发工作站或笔记本电脑。
  • 一个活跃的 Microsoft Azure 云账户。

连接 RH-USB 传感器

RH-USB 传感器是一款通过 USB 连接的工业级温度和湿度传感器,带有一个串行接口。将 RH-USB 连接器插入 NUC 前面的 USB 插孔。完成后,Ubuntu 将创建一个名为 /dev/ttyUSB0 的串行 tty 设备。通过以 Ubuntu 用户身份登录到网关并运行以下命令并检查输出(连字符选项是小写字母 L),确认设备已创建。

$ ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 May 10 12:37 /dev/ttyUSB0

通过在网关上运行以下命令,为 ubuntu 用户提供对传感器串行设备的读/写访问权限。

$ sudo usermod -a -G dialout ubuntu

您必须注销并以 ubuntu 用户身份重新登录才能生效权限更改。使用 screen 程序验证传感器是否正常工作。screen 是一个终端程序,允许您键入字符并查看响应。使用以下命令在网关上安装并运行 screen

$ sudo apt install -y screen
$ screen /dev/ttyUSB0 9600

启动 screen 后,按 Enter 键,您应该会看到 > 字符出现。这是 RH-USB 命令提示符。键入字母 PA 并按 Enter 键。您不会看到 PA 字母,但应该会看到一组数字,如下所示。

>50.4,72.8
>

这些数字是 RH-USB 的湿度(%)和温度(华氏度)读数,由逗号分隔。键入 Control-A,然后键入 反斜杠,然后键入 y 确认退出 screen 程序,从而退出 screen 程序。

为 RH-USB 传感器数据设置本地服务器

在网关上运行这些命令以下载并运行 rhusb-server 应用程序,该应用程序提供了一个本地服务器,通过 REST 接口将 RH-USB 传感器数据暴露给其他应用程序。

$ cd ~
$ sudo apt install -y git
$ git clone https://github.com/gregtoth/rhusb-server.git
$ cd rhusb-server
$ npm install
$ npm start

GitHub 上的 RH-USB 服务器项目.

您应该看到类似如下的状态消息,显示应用程序正在启动并且正在接收来自 RH-USB 传感器的读数。

> rhusb-server@1.0.0 start /home/ubuntu/rhusb-server
> node rhusb-server.js
Server running at http://127.0.0.1:4000
serial.open: Serial port opened
Serial port /dev/ttyUSB0 opened
{"time":"2017-06-13T13:24:25.906Z","temp":"72.9","humid":"57.5","valid":true}
{"time":"2017-06-13T13:24:26.910Z","temp":"72.9","humid":"57.5","valid":true}
{"time":"2017-06-13T13:24:28.141Z","temp":"72.9","humid":"57.5","valid":true}

将应用程序保留在 Intel® NUC 上的单独终端会话中运行,以便在接下来的步骤中使用。

安装 Microsoft Azure* IoT Edge 运行时

在 Intel 网关上运行这些命令以安装 Azure IoT Edge 运行时。

$ sudo apt install -y libcurl4-openssl-dev
$ sudo npm install -g azure-iot-gateway

创建 Node.js* Microsoft Azure* IoT Edge 应用程序

Microsoft Azure IoT Edge 应用程序包含可以用 Java*、C、C# 或 Node.js 编写的计算模块。模块被链接在一起形成一个处理管道,该管道实现了应用程序的整体功能。处理管道由一个 JSON 元数据文件描述,可以修改该文件以添加、删除或重新配置应用程序。

使用这些命令下载并准备此应用程序的源代码。

$ cd ~
$ git clone https://github.com/gregtoth/intel-gateway-azure-iot-edge.git
$ cd intel-gateway-azure-iot-edge
$ npm install

GitHub 上的 Microsoft Azure IoT Edge 源代码

应用程序中的主要文件是:

  • gateway_config_rest.json — JSON 元数据文件,描述了在运行时如何配置处理管道。它还包含运行时配置数据,例如身份验证密钥。
  • rhusb-rest.js — Node.js 模块,定期从网关上的 rhusb-rest 应用程序读取数据,以获取温度和湿度传感器读数。会过滤掉不完整或错误的读数,并将有效读数写入管道,以便其他模块可以使用。
  • rhusb-sim.js — 一个备用的 Node.js 模块,在没有实际传感器可用时生成模拟的温度和湿度数据进行测试。
  • printer.js — Node.js 模块,从管道读取传感器数据并将其打印到控制台以供检查。
  • iothub.js — Node.js 模块,连接到 Azure IoT Hub 并将传感器数据从管道传输到 Azure IoT Hub,以便在云中进一步处理。
  • gateway_config_sim.json — 一个备用的管道配置文件,它使用 rhusb-sim.js 模块(模拟数据)而不是 rhusb-rest.js 模块(实际数据)。

每个 Node.js 文件都实现了标准的 Azure IoT Edge 管道回调 create()start()receive()destroy()

创建 Microsoft Azure* IoT Hub

在我们向 Microsoft Azure IoT Hub 发送传感器数据之前,我们需要在您的 Microsoft Azure* 云账户中创建一个 Microsoft Azure IoT Hub。登录 Azure 并导航到仪表板,然后按照以下步骤创建一个 Microsoft Azure IoT Hub。

单击 新建 > 物联网 > IoT Hub 并设置以下参数:

名称

iothub-3982

您的 IoT Hub 名称在 Azure 中必须是唯一的。尝试不同的名称,直到找到一个可用的。

定价和规模层

F1 - 免费

我们将为本应用程序使用免费层。

资源组

MyIOT

创建一个新组。

订阅

即用即付

 

Location

东 US

选择您所在地理区域的一个位置。

勾选 固定到仪表板,然后单击 创建。IoT Hub 将部署到您的 Azure 账户,并在几分钟后显示在您的仪表板上。

部署后,找到 iothubowner 连接字符串--primary 键,这是一个您稍后将需要的文本字符串。单击 仪表板 > iothub-3982 > 设置 > 共享访问策略 > iothubowner,然后在共享访问密钥下查找 连接字符串--primary 键。该字符串很复杂,因此请将其复制并粘贴以在下一步中使用。

在 Azure IoT Hub 中创建设备标识

在设备可以与 Azure IoT Hub 通信之前,它需要在 Azure IoT Hub 设备 标识注册表 中拥有一个设备标识。该注册表是授权与您的 Azure IoT Hub 实例进行交互的设备列表。

设备标识通过 Azure IoT Hub 提供的 REST API 创建和管理。有不同的方法可以使用 REST API,我们将使用一个名为 iothub-explorer 的 Azure 开源命令行工具,该工具在 GitHub 和 NPM 上可用。iothub-explorer 是一个 Node.js 应用程序,您需要在工作站或笔记本电脑上安装 Node.js 6.x 或更高版本才能使用它。

在您的工作站上,使用这些 shell 命令安装 iothub-explorer

$ npm install -g iothub-explorer
$ iothub-explorer help

接下来,我们将使用之前从 Azure IoT Hub 云控制台复制的 iothubowner 连接字符串--primary 键,创建一个名为 intelnuc 的新设备并进行注册。在您的工作站上运行此 shell 命令,并在引号内使用您自己的 iothubowner 连接字符串--primary 键字符串。

$ iothub-explorer create intelnuc --login "HostName=iothub-3982.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=Be0w9Zew08x9LVAKeiseXsdf/adfe274EODo9Iwek9w=" --connection-string

创建设备后,您将看到“Created device intelnuc”消息以及新创建设备的参数列表。找到 connectionString 参数,它旁边会有一个长文本字符串值,以 HostName= 开头。您需要在下一步中复制并粘贴此设备 connectionString 值。设备连接字符串也可以在 Azure IoT Hub 云控制台中查看。

将连接字符串添加到应用程序配置

在网关上,编辑 gateway_config_rest.json 文件并找到 iothub 部分。在 args 部分,将 connection_string 值更新为您粘贴设备 connectionString 值,替换 YOUR_CONNECTION_STRING_HERE。更新后的部分应如下所示:

{
      "name": "iothub",
      "loader": {
        "name": "node",
        "entrypoint": {
          "main.path": "iothub.js"
        }
      },
      "args": {
        "connection_string": "HostName=iothub-3982.azure-devices.net;DeviceId=intelnuc;SharedAccessKey=KIBi9e389f87ew7hv78ew9+/s9IIOjLKIJIedil9Qda="
      }
    }

保存更新后的文件。

运行应用程序

使用此命令在网关上启动应用程序。

$ azure-iot-gateway gateway_config_rest.json

您应该会在控制台上看到应用程序启动时打印的消息,然后是包含发送到 Azure IoT Hub 的新传感器数据的周期性消息。

rhusb-rest.create
printer.create
iothub.create
Gateway is running. Press return to quit.
rhusb-rest.start
printer.start
iothub.start
iothub.connect: Connected to Azure IoT Hub
rhusb-rest query sensor: {"time":"2017-06-14T01:31:21.104Z","temp":"72.9","humid":"57.2","source":"rhusb"}
printer.receive: {"time":"2017-06-14T01:31:21.104Z","temp":"72.9","humid":"57.2","source":"rhusb"}
iothub.receive: {"time":"2017-06-14T01:31:21.104Z","temp":"72.9","humid":"57.2","source":"rhusb"}
iothub.receive: Message sent to Azure IoT Hub

在开发工作站上,您可以通过运行此命令并使用您自己的 iothubowner 连接字符串来监视 Azure IoT Hub 收到的消息。

$ iothub-explorer monitor-events intelnuc --login "HostName=iothub-3982.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=Be0w9Zew0909LmAKeiseXsdfBadfe239EODo9iwee9w="

每条新消息应如下所示:

==== From: intelnuc ====
{
  "time": "2017-06-14T01:31:21.104Z",
  "temp": "72.9",
  "humid": "57.2",
  "source": "rhusb"
}
====================
==== From: intelnuc ====
{
  "time": "2017-06-14T01:31:23.103Z",
  "temp": "72.9",
  "humid": "57.3",
  "source": "rhusb"
}
====================

Control-C 停止开发工作站上的 iothub-explorer。

要停止在网关上运行的网关应用程序,请按 Enter 键。您应该会看到消息,因为每个模块都运行了它们的 destroy() 函数。当您完成在网关上运行 rhusb-server 时,按 Control-C 终止它。

模拟传感器模块 rhusb-sim.js 的工作方式类似,只是它使用模拟传感器数据,并且不需要 rhusb-server 应用程序。您可以通过将设备连接字符串添加到 gateway_config_sim.json 并运行命令 azure-iot-gateway gateway_config_sim.json 来使用模拟器运行。

下一步

此应用程序为模块化解决方案提供了基本基础,该解决方案可以读取连接到 Intel® IoT 网关的传感器,在网关上本地处理传感器数据,并将结果发送到 Microsoft Azure 云。从这里,您可以连接其他类型的传感器,向网关应用程序添加更多处理模块和算法,集成边缘分析、机器学习或人工智能功能,配置应用程序在系统启动时自动运行,以及/或在 Azure 云中创建更复杂的应用程序来处理从网关接收到的数据和事件。

© . All rights reserved.