英特尔®物联网网关、工业油气压力传感器和 AWS IoT
在这个用例教程中,我们将使用英特尔®NUC 和英特尔®物联网网关开发中心来连接工业流体/气体压力传感器到亚马逊网络服务云中运行的 AWS IoT。
获取新的英特尔®物联网开发套件,一个完整的硬件和软件解决方案,让开发人员使用英特尔®伽利略和英特尔®爱迪生板创建激动人心的新解决方案。访问英特尔®开发人员专区,了解物联网。
在此用例教程中,我们将使用英特尔®NUC 和英特尔®物联网网关开发中心将工业流体/气体压力传感器连接到亚马逊网络服务*云中运行的 AWS* IoT。我们将开发的应用程序软件将控制压力传感器,并持续将压力测量值传输到 AWS IoT,数据将在云中存储、处理和评估。
压力传感器是 Omega* PX409-USBH,它是一种带 USB 接口的高速工业压力传感器。该传感器有多种不同的传感配置和压力范围,从真空到 5,000 PSI。本教程中我们将使用型号 PX409-150GUSBH,它是一款量程为 0 到 150 PSI 的表压传感器。它设计用于通过 ¼-18 NPT 螺纹管接头连接到管道。
我们将传感器连接到加压水管,并配有辅助仪表,用于目视检查压力。图 1 显示了传感器配置和配件。(1)是压力传感器;(2)是连接到英特尔®NUC 的传感器 USB 电缆;(3)是用于比较的辅助仪表;(4)和(5)是入口和出口连接以及用于改变压力的控制阀。
设置前提
- 英特尔®NUC 已通电并连接到具有互联网接入的局域网,以及用于登录英特尔®NUC 的开发笔记本电脑或工作站。
- 英特尔®物联网网关开发中心在英特尔®NUC 上运行并应用了软件更新。
- 在英特尔®NUC 上安装了软件包“packagegroup-cloud-aws”。
- 拥有亚马逊网络服务的活动账户,并熟悉 AWS 控制台、AWS IoT 和 AWS Elasticsearch 服务。
将压力传感器连接到英特尔®NUC
- 将压力传感器 USB 电缆插入英特尔®NUC 正面的 USB 端口。连接传感器后,英特尔®NUC 将自动分配一个 TTY 设备,例如 /dev/ttyUSB0 或 /dev/ttyUSB1。具体名称会因您是否已将其他 USB 设备连接到英特尔®NUC 而异。
- 通过使用 ssh 登录到局域网上的英特尔®NUC,查找传感器的设备名称。您需要知道英特尔®NUC 在局域网上分配的 IP 地址。在本例中,IP 地址是 192.168.22.100,登录名是 gwuser,密码是 gwuser。
ssh gwuser@192.168.22.100 gwuser@WR-IDP-9C99:~$ ls /dev/ttyUSB** /dev/ttyUSB0
在这里我们只看到一个 USB 设备,名为 /dev/ttyUSB0 - 那就是压力传感器。接下来我们将运行一些验证测试以确认传感器正在与英特尔®NUC 通信。
- 使用 screen 实用程序直接连接到 USB 端口并手动发出命令。您键入的命令将不可见——只会显示命令的结果。
gwuser@WR-IDP-9C99:~$ sudo screen /dev/ttyUSB0 115200
- 输入 ENQ 并按 Enter 键。您应该会收到如下响应:
USBPX2 1.0.13.0826 0.0 to 150.0 PSI G
当您看到此响应时,表示压力传感器正在通过 USB 端口与英特尔®NUC 进行通信。通过键入以下命令退出 screen:Control-A
、Control-\, y
。
配置 AWS* IoT 和 Node-RED*
Node-RED* 是一个用于构建物联网应用程序的可视化工具。它作为英特尔®物联网网关开发中心的一部分预装在英特尔®NUC 上。
- 登录您的 AWS 账户并导航到 AWS IoT 控制台。
- 创建一个名为 Intel_NUC 的新设备(事物)和一个名为 PubSubToAnyTopic 的策略,该策略允许发布和订阅任何 MQTT 主题。
- 创建并激活新证书,并将私钥文件、证书文件和根 CA 文件(可在此处获取)下载到您的计算机。
- 将 Intel_NUC 设备和 PubSubToAnyTopic 策略附加到新证书。
- 在以 gwuser 身份通过 ssh 登录到英特尔®NUC 时,创建目录 /home/gwuser/awsiot,然后使用 SFTP 或 SCP 将您之前下载的私钥文件、证书文件和根 CA 文件从您的工作站复制到英特尔®NUC 上的 /home/gwuser/awsiot 目录。
创建 Node-RED* 传感器流
在英特尔®物联网网关开发中心,点击“传感器”图标,然后点击“编程传感器”按钮。这将打开 Node-RED 画布。如果出现另一个登录提示,请使用您登录英特尔®物联网网关开发中心时使用的相同 gwuser / gwuser 登录凭据。
您将看到一个用于 RH-USB 传感器的默认 Node-RED 流。我们此处不使用该类型的传感器,因此您可以删除该流,或者通过双击“间隔”节点并将“重复”设置为“无”,然后点击“完成”来禁用它。如果您不删除该流,请使用鼠标选择流的所有元素并将它们拖到屏幕下方,以便在顶部腾出更多空间。点击“部署”按钮保存并激活更改。
首先,我们将构建一个流,该流持续读取压力传感器并在英特尔®物联网网关开发中心显示压力读数。请按照以下步骤操作:
- 从左侧列表中将以下类型的节点拖到画布上,并像图 2 中所示进行排列:(1)注入(输入),(2)函数(函数),(3)串行(输出),(4)串行(输入),(5)函数(函数),(6)图表标签(函数),(7)mqtt(输出)。
- 当您将它们拖放到画布上时,其中几个名称会自动更改:inject 将更改为 timestamp,function 将更改为空白。使用鼠标在节点之间绘制线条,使其看起来像图 2。
- 接下来,双击与编号标注对应的每个节点,并按照图 3 所示设置节点参数。您可能需要移动节点以保持整洁的布局。
- 对于串行节点,请使用与您的压力传感器对应的 /dev/ttyUSBn 设备名称(我们使用的是 /dev/ttyUSB0)。
- 串行端口名称和参数通过单击“添加新串行端口...”旁边的铅笔图标,并按照图 3 项目 3A 所示设置值,然后单击“添加”来设置。
- 节点配置完成后,流应如图 4 所示。
- 点击“部署”按钮部署并激活流程,然后点击浏览器刷新按钮刷新整个网页。您现在应该会在英特尔®物联网网关中心的上半部分看到一个实时压力表,如图 4 所示。您可以对传感器组件施加水压,您会看到压力读数随着压力的变化而增加和减少。
将英特尔®NUC 连接到 AWS IoT
- 将一个 mqtt 输出节点拖到 Node-RED 画布上,然后双击它。
- 在“服务器”下拉列表中选择“添加新 mqtt-代理...”,然后点击右侧的铅笔图标。在“连接”选项卡中,将“服务器”字段设置为您的 AWS IoT 端点地址,该地址类似于 aaabbbcccddd.iot.us-east-1.amazonaws.com。您可以使用工作站上的 AWS CLI 命令 aws iot describe-endpoint 查找端点地址。
- 将“端口”设置为“8883”,并勾选“启用安全(SSL/TLS)连接”,然后点击“添加新 tls-config...”右侧的铅笔图标。
- 在“证书”字段中输入您之前复制到 /home/gwuser/awsiot 目录中的证书文件、私钥文件和根 CA 文件的完整路径和文件名。例如,证书路径可能看起来像 /home/gwuser/awsiot/1112223333-certificate.pem.crt,私钥路径可能看起来像 /home/user/awsiot/1112223333-private.pem.key。CA 证书可能看起来像 /home/gwuser/awsiot/VeriSign-Class-3-Public-Primary-Certification-Authority-G5.pem。
- 勾选“验证服务器证书”,并将“名称”留空。
- 点击“添加”按钮,然后点击第二个“添加”按钮返回主 MQTT 输出节点面板。
- 将“主题”设置为“nuc/pressure”,将“QoS”设置为“1”,并将“保留”设置为“false”。
- 将“名称”字段设置为“发布到 AWS IoT”,然后点击“完成”。
将另一个 function 节点拖到 Node-RED 画布上。双击编辑该节点,并将“名称”设置为“格式化 JSON”。编辑函数代码,使其看起来像这样:
msg.payload = { pressure: Number(msg.payload), timestamp: Date.now() }; return msg;
- 点击“完成”以保存函数更改。
- 从“提取数据”节点的输出端连接一根线到“格式化 JSON”的输入端,再从“格式化 JSON”的输出端连接另一根线到“发布到 AWS IoT”的输入端。这些更改会将压力读数转换为 JSON 对象并将其发送到 AWS IoT。
- 点击“部署”按钮以部署并激活更改。完成的流应该如图 5 所示。
回到 AWS IoT 控制台,启动 MQTT 客户端并订阅主题 nuc/pressure。您应该会看到每秒收到一条消息,其中包含实时压力读数。改变传感器上的压力并观察数值的增加和减少。
在 AWS* IoT 中记录和可视化压力历史
现在实时压力数据已抵达 AWS IoT,可以在 AWS 云中执行各种额外的数据处理。在这里,我们将数据发送到 Elasticsearch,在那里可以在仪表板上搜索和可视化数据。
- 在 AWS 控制台中,导航到 Elasticsearch 服务,并预置一个域名为 nucdata 的 Elasticsearch 集群。您最初可以将其配置为只有一个实例的小型集群。
- 将安全访问策略设置为您的互联网访问偏好,并添加一个策略,允许主体 "AWS": ""* 访问 "Action": "ESHttpPut"。等待集群预置完成,并且域名状态变为“活动”。
- 使用 curl 或 REST 工具创建名为 nucs 的 Elasticsearch 索引,使用 AWS Elasticsearch 集群控制台中列出的 Endpoint URI。创建索引时,包含一个名为 nuc 的类型,该类型具有两个属性:类型为 float 的 pressure 和类型为 date 的 timestamp。
- 在 AWS IoT 控制台中,创建一个名为 Record_Pressure 的规则。
- 将“描述”设置为“将压力读数记录到 Elasticsearch”,将“属性”设置为“pressure,timestamp”,并将“主题过滤器”设置为“nuc/pressure”。将“条件”留空。
- 在操作部分,选择“将消息发送到搜索索引集群(Amazon Elasticsearch Service)”作为操作,并为“域名”选择“nucdata”。端点将自动填充。
- 将“ID”设置为“${newuuid()}”,将“索引”设置为“nucs”,并将“类型”设置为“nuc”。
- 对于“角色名称”,点击“创建”一个新角色,并将角色名称设置为 aws_iot_elasticsearch。
- 点击“添加操作”,然后点击“创建”以创建规则。此规则将从 nuc/pressure MQTT 主题获取数据并将其发送到 Elasticsearch,在那里可以搜索和查看数据。
搜索和查看数据
- 导航到您的 Elasticsearch 集群 Kibana URI,并使用 timestamp 作为时间字段名称创建名为 nucs 的索引模式。您应该会在字段列表中看到 pressure 和 timestamp。
- 导航到 Kibana 的“发现”选项卡,并启用每 5 秒自动刷新。您应该会看到大约每 5 秒出现 5 条新数据记录——这些是来自 NUC 的压力读数。
- 导航到“可视化”选项卡,并使用图 6 所示的 X 和 Y 参数创建“折线图”时间序列可视化。
- 现在改变传感器上的实际压力,并观察 Kibana 中的时间序列图。图 6 显示了一个实时压力循环,从 0 PSI 开始,跳到 82 PSI,逐步降至 20 PSI,上升到 76 PSI,然后到 82 PSI,突然降至 0 PSI,短时间上升到 55 PSI,然后上升到 82 PSI。