将 Intel® NUC 连接到 Google Cloud Platform 服务
本文将向您展示如何使用 Intel® NUC 将 Arduino 101(美国以外地区品牌为 Genuino 101)上的传感器连接到 Google Cloud Platform。
获取新的 Intel® IoT Developer Kit,这是一套完整的软硬件解决方案,让开发者能够使用 Intel® Galileo 和 Intel® Edison 主板创建令人兴奋的新解决方案。访问 Intel® 物联网开发者专区。
引言
本文将向您展示如何使用 Intel® NUC 将 Arduino 101*(美国以外地区品牌为 Genuino 101*)上的传感器连接到 Google Cloud Platform*。您将了解如何读取 Arduino 101 的实时传感器数据,在 Intel® NUC 上本地查看,并将其发送到 Google Cloud Platform,以便在云端存储、处理和可视化这些数据。我们将在 Intel® NUC 上使用 Node-RED* 来创建处理流程,以执行驱动我们应用程序的输入、处理和输出功能。
设置和先决条件
- 连接到互联网的 Intel® NUC
- 通过 USB 连接到 Intel® NUC 的 Arduino 101
- 附加到 Arduino 101 并切换到 3V3 VCC 的 Grove* Base Shield
- 连接到 Base Shield 的 Grove 传感器:A1 上的灯,A2 上的旋转编码器,D4 上的按钮,D5 上的绿色 LED,D6 上的蜂鸣器,D7 上的继电器
- 在 Intel® NUC 上安装了 packagegroup-cloud-google 包
- 一个有效的 Google Cloud Platform 账户
- 您的开发者工作站上安装了 Python 2.7.x 和 pip
在 Intel® IoT Gateway Developer Hub 上读取传感器并显示数据
通过 Web 浏览器访问 Intel® NUC 的 IP 地址并使用 gwuser 作为默认用户名和密码来登录 Intel® IoT Gateway Developer Hub。您将看到有关 Intel® NUC 的基本信息,包括型号、版本、以太网地址和网络连接状态。
点击 Sensors 图标,然后点击 Program Sensors 按钮。这将打开 Node-RED 画布,您将在其中看到 Sheet 1,其中包含一个用于 RH-USB 传感器的默认流程。我们不会使用 RH-USB 传感器,因此您可以使用鼠标框选整个流程,然后按键盘上的 Delete 键将其删除。您将得到一个空白画布。
在 Node-RED 屏幕的左侧,您将看到一系列节点。这些是用于在 Intel® NUC 上创建 Node-RED 应用程序的构建块。我们将在本应用程序中使用几个节点。
| 读取按钮按下 |
|
开/关 LED 指示灯 |
| 测量光照强度 |
|
在 Intel® NUC 上格式化图表显示 |
| 测量旋转位置 |
|
将数据发送到 Intel® NUC MQTT 图表监听器 |
| 继电器打开/关闭 |
|
处理函数 |
| 将数据发送到 Google Cloud Platform |
将节点拖放到画布上,并按以下方式排列。对于其中一些节点,我们需要多个副本。使用鼠标在节点之间连接导线,如下图所示。我们稍后将使用 function 和 pubsub 节点,所以暂时不要包含它们。
当节点首次放置在画布上时,它们处于默认状态,在工作之前需要进行配置。通过双击节点并设置其配置面板中的参数来配置节点。
双击画布上的每个节点,并按以下表格所示设置其参数。在某些情况下,Name 字段留空以使用节点的默认名称。Pin 号对应于传感器或执行器连接的 Grove Base Shield 插槽。
节点 |
参数 |
Grove按键 |
Platform: Firmata, Pin: D4, Interval (ms): 1000 |
Grove Light |
Platform: Firmata, Pin: A1, Unit: Raw Value, Interval (ms): 1000 |
Grove Rotary |
Platform: Firmata, Pin: A2, Unit: Absolute Raw, Interval (ms): 1000 |
Grove LED |
Platform: Firmata, Pin: D5, Mode: Output |
Grove Relay (upper) |
Platform: Firmata, Pin: D7, Interval (ms): 1000 |
Grove Relay (lower) |
Name: Grove Buzzer, Platform: Firmata, Pin: D6 (我们将使用此节点控制蜂鸣器), Interval (ms): 1000 |
连接到 Grove Button 的 chart tag |
Title: Button, Type: Status Text |
连接到 Grove Light 的 chart tag |
Title: Light, Type: Gauge, Units: RAW |
连接到 Grove Rotary 的 chart tag |
Title: Rotary, Type: Gauge, Units: RAW |
mqtt |
Server: localhost:1883, Topic: /sensors, Name: Charts |
验证您的设置和接线连接,然后点击 Deploy 按钮来部署您的更改并使其在 Intel® NUC 上生效。部署流程后,您应该会在 Intel® IoT Gateway Developer Hub 屏幕的顶部看到数据显示,其中包含 Rotary、Light 和 Button 的实时值。转动旋钮和遮挡光线传感器应该会使数字发生变化,按下按钮应该会打开 LED、发出蜂鸣器声音并激活继电器。
创建 Google Cloud Platform* Pub/Sub API 实例
在我们可以将传感器数据发送到 Google Cloud Platform 之前,我们需要在您的 Google Cloud Platform 账户中创建一个 Google Cloud Platform Pub/Sub API 实例。登录 Google Cloud Platform 并创建一个名为 IoT Pub Sub 的新项目,并启用结算。系统将自动生成一个全局唯一的项目 ID。它将由字母和/或数字组成,每个项目都不同。我们的唯一项目 ID 是 small-dynamo-392814。为 IoT Pub Sub 项目启用 Pub/Sub API,然后导航到 Topics 屏幕。创建一个名为 intelnuc(小写)的新 pub/sub 主题。系统将根据项目名称自动生成完整的主题名称,最终的主题字符串应类似于 projects/small-dynamo-392814/topics/intelnuc。
接下来,导航到 API Manager > Credentials,并创建一个新的凭证类型为 Service account key。选择 Compute Engine default service account,选择 JSON 密钥类型,然后点击 Create。一个 service account key JSON 文件将自动下载到您的开发者工作站,您将在后续步骤中用到它的内容。
将传感器数据发布到 Google Cloud Platform* Pub/Sub
将一个 pubsub output node 拖放到画布上,然后双击编辑其参数。点击 Add new google-cloud-credentials… 右侧的铅笔图标,这将打开一个设置框。将 Name 设置为 Pub/Sub Credential,并在 Key 字段中,复制并粘贴您在上一步从 Google Cloud Platform 下载的服务帐户密钥 JSON 文件的全部内容。点击 Add 保存凭证信息并返回 pubsub 节点配置框。将 Topic 设置为 intelnuc,并将 Name 设置为 Google Cloud Publish。点击 Done 保存您的更改。
现在,将 四份 function node 拖放到画布上,并按如下方式设置它们的属性:
Function 1, Name = Format Button |
Function 2, Name = Format Light |
Function 3, Name = Format Rotary
|
Function 4, Name = Generate Payload |
现在,在新的节点之间绘制导线,使完成的流程如下所示:
点击 Deploy 将更新后的流程部署到 Intel® NUC。此时,Arduino 101 传感器的数据每秒读取一次并发布到 Google Cloud Pub/Sub。Generate Payload 中的逻辑会等待所有三个传感器都有新的数据值可用后,生成一个合并的载荷消息,然后发送到 Google Cloud Pub/Sub。
为了确认 Google Cloud Pub/Sub 正在接收数据消息,请在 Google Cloud Platform 控制台中导航到 API Manager > Google Cloud Pub/Sub API 并查看 Traffic 图表,它看起来应该类似这样:
查看实时传感器数据
现在数据正在流向 Google Cloud Pub/Sub,我们可以通过订阅 intelnuc 主题来实时查看它。有几种方法可以做到这一点,在这里我们将使用 Google 的一个开源 Python* 程序,它可以订阅 intelnuc 主题并打印接收到的消息。源代码在您的开发者工作站上使用 Python 2.7 运行,并使用 pip 安装 Python 支持包。
将源代码 .zip 文件从 https://github.com/GoogleCloudPlatform/cloud-pubsub-samples-python/archive/master.zip 下载到您的开发者工作站。
解压缩归档文件,这将创建一个名为 cloud-pubsub-samples-python-master 的目录。
在您的开发者工作站上,发出以下 shell 命令(这些是适用于 MacOS* 或 Linux* 的;Windows* 命令类似),以配置和运行 Python 程序。您需要知道您之前从 Google Cloud Pub/Sub 下载的 service account key JSON文件 的完整路径,我们的完整路径和文件名是“/Users/nuc/key-53716c71ceb6.json”。
运行这些命令来安装程序使用的 Python 支持包,并为密钥文件设置环境变量。
$ cd cloud-pubsub-samples-python-master/cmdline-pull $ pip install -r requirements.txt $ export GOOGLE_APPLICATION_CREDENTIALS=/Users/nuc/key-53716c71ceb6.json
运行此命令为 intelnuc 主题创建一个名为 mysub 的新 Google Pub/Sub 订阅。这将用于从主题检索消息。请使用您实际的 Google Pub/Sub 项目名称替换 small-dynamo-392814。
$ python pubsub_sample.py small-dynamo-392814 create_subscription mysub intelnuc
运行此命令使用 mysub 订阅来读取和显示消息。
$ python pubsub_sample.py small-dynamo-392814 pull_messages mysub
您应该每秒看到一条新消息打印出来。这些是 Intel® NUC 发布的消息,包含按钮、旋转和光线传感器的读数以及时间戳。
{"button":0,"rotary":344,"light":566,"time":1490368653518} {"button":0,"rotary":344,"light":563,"time":1490368654540} {"button":0,"rotary":344,"light":561,"time":1490368655551} {"button":0,"rotary":344,"light":565,"time":1490368656558} {"button":0,"rotary":344,"light":568,"time":1490368657566}
按 Control-C 停止程序。
当您完成检索消息后,运行此命令删除 mysub 订阅。
$ python pubsub_sample.py small-dynamo-392814 delete_subscription mysub
当您完成此应用程序的测试后,请务必停止您的 Node-RED 流程(例如,通过关闭 Intel® NUC 或移除 Generate Payload 和 Google Cloud Publish 之间的导线并重新部署流程),以保留您免费配额中的 Google Cloud Pub/Sub 消息。否则,它们将被持续运行的 Node-RED 应用消耗掉。
下一步
此应用程序为将您的 Arduino 101 和 Intel® NUC 连接到 Google Cloud Platform 提供了基本的基础。从这里,您可以连接其他传感器并将它们的数据发送到 Google Cloud Pub/Sub,然后构建更复杂的应用程序来订阅 pub/sub 主题并存储、处理和/或可视化传入的传感器数据。