Intel® IoT 网关入门 - JavaScript
本文是为 JavaScript 编写的。要开始使用 Python,请参阅《英特尔® 物联网网关入门 - Python》。
获取新的英特尔® 物联网开发者套件,这是一个完整的软硬件解决方案,使开发者能够使用英特尔® Galileo 和英特尔® Edison 板卡创建令人兴奋的新解决方案。请访问英特尔® 物联网开发者专区。
本文是为 JavaScript* 编写的。要开始使用 Python*,请参阅《英特尔® 物联网网关入门 - Python》。
引言
物联网 (IoT) 市场正在蓬勃发展。Gartner 预测,2016 年全球将有 64 亿台联网设备投入使用,支持总计 2350 亿美元的服务支出。他们进一步预测,到 2020 年,联网设备的数量将达到 208 亿台。国际数据公司 (IDC) 估计,到 2020 年,物联网市场将达到 1.7 万亿美元。现在是将新旧系统连接到互联网的绝佳时机。
物联网 (IoT) 解决方案涉及许多活动部件。所有这些解决方案的核心是物联网网关,它提供连接性、可扩展性、安全性和管理功能。本入门指南将帮助您了解
- 什么是物联网网关。
- 它如何用作商业和住宅物联网解决方案的中心。
- 如何选择适合您的网关。
- 有哪些软件开发工具可用。
- 如何编写一个将在您的网关上运行的“Hello World”应用程序。
让我们开始吧!
什么是物联网网关?
网关有什么用?
物联网网关是物联网解决方案的核心,它将所有部件连接在一起。一方面是我们所有的“事物”,包括传感器、智能设备、车辆、工业设备,或者任何可以变得“智能”并产生数据的设备。另一方面是网络和数据基础架构,它存储和处理事物产生的所有数据。网关是事物与网络和数据基础架构之间的连接;它们是将一切粘合在一起的胶水。
然而,网关不仅仅是粘合剂;它们是所有开发者面临的连接挑战的解决方案。连接挑战有两个主要需求:
- 强大而安全的互联网或广域网 (WAN) 访问。
- 能够支持访问大量设备,其中许多设备的处理能力有限或没有处理能力。
将单个传感器连接到互联网可能变得复杂且昂贵。当您有不同类型的传感器,每种传感器都有不同的接口,并且想要将数据聚合到一个仪表板中时,会发生什么?
网关通过提供以下功能来帮助克服这些挑战:
- 通信和连接
- 可扩展性
- 安全
- 可管理性
通信和连接
许多设备都标配有线和无线连接。您会发现使用的协议包括蜂窝 2G/3G/4G、蓝牙*、串行、USB、虚拟专用网络 (VPN)、Wi-Fi 接入点、MQ 遥测传输 (MQTT) 消息传递协议和 ZigBee*。这些允许您通过多种方法连接到传感器和系统。有了如此广泛的可用协议,您将很难找到无法连接的传感器或设备。
可扩展性
与网络路由器类似,物联网网关可以连接在一起形成更大的解决方案。无论您是创建一个只有一个网关的家庭自动化系统,还是拥有一个需要连接新旧系统的多英亩工业设施,您都可以将所有内容连接到一个系统中。
安全
数据加密和软件锁定是您在物联网网关上找到的一些安全功能。此外,许多设备还提供白名单、变更控制、安全存储和安全启动,以及广泛的协议、服务和恶意软件防护。所有这些功能共同确保您的系统和数据始终保持安全(这是一个关键方面,因为物联网继续以指数级速度扩展,成为黑客和盗贼更大的目标)。
可管理性
可管理性是指解决方案的部署、维护和管理。鉴于其潜在的复杂性,管理简便性至关重要。为了帮助您,您会找到基于 Web 的界面,您可以安全地访问这些界面来维护网关本身、管理连接的传感器以及控制数据流经它的方式。许多网关使用某种形式的嵌入式 Linux*,因此您熟悉的管理工具,如 ssh 和 scp,都可以使用。
使用场景
商业
在商业环境中,网关可以连接一系列传感器(灯光、温度、烟雾、能源、RFID)和系统(HVAC、自动售货机、安防、交通),以控制和监控数据存储和服务器等设备,供笔记本电脑、平板电脑和智能手表检索。
具体示例包括
- 商用卡车公司收集其车队的 GPS 和装载信息。每辆卡车都配有一个连接到互联网的网关,该网关会过滤并中继来自卡车系统的数据。
- 建筑公司监控其工地的噪音水平,以遵守当地的噪音法规。每个工地都安装了连接到一个或多个网关的噪音和振动传感器,这些传感器将数据发送给现场主管。
住宅
物联网最常见的住宅应用是家庭自动化。在这种情况下,网关通过智能连接您的安防系统、恒温器、灯光控制、烟雾探测器等,提供一个统一的控制点。通常,通过家中或安全连接到互联网访问的 Web 界面,可以提供这些系统的统一视图。
智能电表是如今另一个常见应用;它们会检测能源消耗信息,并将其发送回电力公司,频率可能高达每小时一次,有时甚至更短。这些电表还允许电表与电力公司之间进行双向通信。
哪款网关适合我?
市场上有很多选择,哪款适合您?最终这主要取决于两个因素:
- 可用的互联网连接类型(有线、无线、蜂窝)。
- 您将使用的传感器类型及其接口类型(USB、串行、蓝牙*)。
英特尔拥有庞大的制造商合作伙伴生态系统,提供各种选择。在英特尔® 开发者专区 IoT 部分,您会找到两个有用的工具:解决方案目录和网关比较工具。使用这两个工具,您将找到具有以下功能的解决方案:
处理器
- 单核 Intel® Quark™ SoC X1000 400 MHz 处理器
- 单核、双核和四核 Intel® Atom™ 处理器
- 单核、双核和四核 Intel® Core™ 处理器
网络和通信
- Wi-Fi(单射频和多射频)
- 双 LAN
- 蓝牙*
- CAN 总线
- ZigBee*
- 6LoWPAN
- GPRS
- 2G/3G/LTE
- 模拟和数字 I/O
- RS-232
操作系统
- Wind River* Linux* 7
- Snappy Ubuntu* Core
- Microsoft Windows® 10 IoT
本指南是使用 Advantech* UTX-3115 网关和 OMEGA* RH USB 传感器(用于测量温度和相对湿度)编写的。
应用物联网技术的行业垂直领域
我们在商业和住宅领域都看到了许多物联网网关技术的应用,但这项技术具体可以应用于哪些方面呢?
以下是行业和应用物联网技术的垂直领域的分类
行业 | 垂直领域 | 示例用例 |
---|---|---|
公共部门 | Cities | 城市 Wi-Fi、停车、交通 |
公共安全 | 学校、边境、执法 | |
制造业 | 工厂 | 能源管理、安全、自动化 |
能源与矿产 | 实用程序 | 移动工作者、变电站和配电自动化 |
石油和天然气 | 管道监控、炼油厂系统、安全运营 | |
采矿业 | 资产可见性和监控、预测性维护 | |
交通运输 | 交通运输 | 道路、火车、车站 |
企业对消费者 (B2C) | 零售业 | 远程专家/移动顾问、数字媒体商店体验 |
体育和娱乐 | 体育场、体育场 Wi-Fi、体育场视野 | |
SP 和机器对机器 (M2M) | 基站远程管理、车队/资产管理 | |
医疗保健 | 虚拟患者观察、患者导引 | |
金融服务业 | 分行客户体验、能源管理 |
软件概述
Wind River* Linux* 与 Python* 的结合
英特尔® 物联网网关的操作系统是 Wind River* Linux*,这是一个商业嵌入式 Linux 发行版。由于它是 Linux,您几乎可以在其上运行任何东西,包括 Python*。事实上,最新版本的英特尔® 物联网网关预装了 Python 2.7.3。此外,您还可以从英特尔开源技术中心下载更新的 Python 版本包和其他应用程序,或者使用网关上运行的内置物联网网关开发者中心。
MRAA / UPM
MRAA(发音为 em-rah)是一个用 C 编写的底层库。MRAA 的目的是将访问和操作平台基本 I/O 功能的细节抽象成一个单一、简洁的 API。MRAA 作为 Linux 通用输入/输出 (GPIO) 设施之上的翻译层。虽然 Linux 提供了相当丰富的 GPIO 操作基础架构,并且其处理 GPIO 的通用指令相当标准,但使用起来可能很困难。话虽如此,您可以使用 MRAA 与模拟和数字设备进行通信。请务必查看MRAA API 文档。
要在您的网关上安装 MRAA,请使用 curl 从英特尔开源技术中心下载最新版本,然后使用 rpm 命令进行安装。例如,如果您正在运行当前系统版本 7.0.0.13,则命令如下:
>> curl -O https://download.01.org/iotgateway/rcpl13/x86_64/libmraa0-0.8.0-r0.0.corei7_64.rpm >> rpm -ivh libmraa0-0.8.0-r0.0.corei7_64.rpm
IDE(s)
开发者有许多 IDE 可供选择——英特尔® XDK 物联网版、Node-RED*、Wind River* Helix* App Cloud 和 Eclipse*。此外,您还可以直接 ssh 到您的网关并使用 vi 编写应用程序,或者使用 scp 将您的项目安全地传输到网关。如果您刚开始,我建议使用 Node-RED 或 Wind River Helix App Cloud。
英特尔® XDK 物联网版
将英特尔® XDK 物联网版与 Node.js* 结合使用,创建 Web 界面、在项目中添加传感器以及与云协同工作。除了与您的网关协同工作外,您还可以编程您的英特尔® Edison 和 Galileo 板卡。
Node-RED*
Node-RED* 的官方宣传是它是一个用于“以新颖有趣的方式连接硬件设备、API 和在线服务”的工具。它提供基于浏览器的流程编辑器,构建在 Node.js* 之上。
Wind River* Helix* App Cloud
在 Wind River* Helix* App Cloud 上注册您的网关后,Cloud9*——一个基于 Web 的 IDE——将可用。Helix App Cloud 的优点是您可以从任何地方开发应用程序,一旦准备好,就可以立即在您的设备上运行它。
开发环境
围绕英特尔® 物联网网关构建了非常丰富的开发环境,包括桌面和基于 Web 的工具。在本指南的这一部分,您将学习如何刷写网关的操作系统,然后使用英特尔® XDK 物联网版(桌面)和 Wind River Helix App Cloud(基于 Web)编程和调试一个“Hello World”应用程序。
这些说明适用于 Windows 和 Mac。
开始所需
为了开始在您的网关上进行开发,您需要:
- 一个物联网网关(本指南中使用的是 Advantech UTX-3115)。
- 一个测量温度和相对湿度的 USB 传感器(本指南中使用的是 OMEGA 温度和湿度 USB 传感器)。
- 幂
- 一根以太网线,用于连接到您的路由器(网关将通过此连接到互联网)。
为了连接到网关本身,您需要网络连接。本指南假设网关与您的开发计算机位于同一网络上。如果由于某种原因无法进行网络连接,您可以通过串行终端连接到网关。
图 6 显示了编写本指南时使用的设置。
入门 / Hello World
刷写操作系统
为了升级到最新的系统版本,您需要刷写操作系统。为此,请按照以下步骤操作:
- 准备一个至少 4GB 的 USB 驱动器。
- 下载最新的网关操作系统映像。
- 将映像解压缩到 Linux 主机系统上您选择的位置。
- 打开一个终端窗口。
- 使用 df 命令验证 USB 驱动器挂载的设备。df 命令显示文件系统正在使用的可用磁盘空间量。
- 使用以下命令将操作系统映像复制到 USB 驱动器:
sudo dd if= <recovery image file path> of=/dev/sdb bs=4M; sync
- 将 USB 驱动器从主机设备拔出,然后从 USB 驱动器启动网关。
- 以 root 用户登录网关(root/root),然后执行以下命令:
# /sbin/deploytool –d /dev/sda --reset-media -F
- 关闭网关电源,然后重新开启。
网关启动后,登录并检查系统版本号(在仪表板上),以验证您当前运行的是最新版本的操作系统。
首次设置
现在您可以登录网关了,请按照以下步骤进行设置:
XXXX 是网关无线网络适配器 (br-lan) MAC 地址的最后四位数字。您可以通过启动网关找到此 MAC 地址,一旦启动,以 root 用户登录并键入“ifconfig”。从 br-lan 适配器中获取最后 4 位数字。
- 解压网关。
- 将路由器上的以太网线插入相应的以太网端口。对于 Advantech,请使用右侧(eth0)以太网端口。
- 连接 VGA 或 HDMI 显示器。
- 可选 - 连接鼠标和键盘。(本指南中的示例使用 USB 集线器将两者都连接到 Advantech。鼠标是完全可选的,但建议使用键盘)。
- 将 USB 传感器连接到网关。
- 将网关连接到电源并按下电源按钮。
- 网关启动后,使用您的开发计算机的无线网络适配器连接到网关内置的 Wi-Fi,使用 SSID 和密码。
- SSID: IDPDK-XXXX
- 密码: windriveridp
- 在 PC 上打开浏览器——推荐使用 Google Chrome——然后转到http://192.168.1.1。这将打开英特尔® 物联网网关开发者中心 (Intel® IoT Gateway Developer Hub) 的登录页面,这是一个用于管理传感器和使用可视化编程工具进行原型设计的基于 Web 的界面。
- 使用以下凭据登录:
- 用户名: gwuser
- 密码: gwuser
完成!您已准备好进行开发。
使用 XDK 编程 Hello World
在本节中,我们将使用英特尔® XDK 物联网版创建一个 JavaScript*“Hello World”应用程序。
安装并登录 XDK 后,点击 IDE 左下角的“**开始新项目**”按钮。在“**物联网嵌入式应用程序**”部分下,点击“**模板**”链接,然后选择“**空白模板**”。
然后,点击右下角的“**继续**”按钮。在弹出的窗口中输入项目名称,然后点击“**创建**”按钮来创建您的项目。
打开项目后,在 XDK 左下角的“IoT Device”下拉菜单中选择您的网关。在此示例中,网关已获得 IP 地址 192.168.1.9。
**注意:** 为了让 XDK 自动找到您的网关,您的开发计算机必须在同一子网中。如果您通过其内置的无线路由器连接到网关(如我们上面所做的),那么您就与网关在同一子网中。如果您的计算机不在同一子网中,但您可以 ping 网关的 IP 地址——例如,如果您的网关通过网线连接到您的网络——您可以使用下拉菜单中的“**添加手动连接**”选项手动连接到您的设备。
接下来,在编辑器中,在第 5 行输入以下代码:
console.log("Hello World! This is the Intel XDK");
您的编辑器窗口应如下所示:
通过选择“**文件 > 保存**”来保存您的更改。
创建应用程序后,您需要将项目上传到网关。为此,请点击“上传”按钮,这是一个向下的箭头。
现在您的应用程序已在网关上,您可以运行它。为此,请点击“运行”按钮。运行按钮是一个带有白色箭头的绿色圆圈。这将运行您的应用程序。
应用程序运行时,您将在控制台中看到输出。
使用 Wind River® Helix™ App Cloud 编程 Hello World
在本节中,我们将使用 Wind River Helix App Cloud 创建一个 JavaScript“Hello World”应用程序。
您需要做的第一件事是在 App Cloud 上创建一个帐户并注册您的设备。为此,请登录您的网关,点击仪表板下方的“**管理**”图像,然后在“**快速工具**”部分下,点击 App Cloud 图像下的“**启动**”按钮。按照那里的说明注册您的网关。
**注意**:网关创建的唯一 ID 会在 20 分钟后过期,因此您需要验证您的电子邮件地址并在该时间段内重新登录。如果您错过了时间窗口,您可以生成一个新代码并在该时间点进行注册。
登录 App Cloud 后,在“**应用程序项目**”部分下点击“**创建新项目**”按钮。在弹出的窗口中,输入项目名称并选择 JavaScript Hello World 模板。
点击“**确定**”按钮创建您的项目。创建后,点击“**打开**”按钮在 Cloud9 编辑器中打开它。编辑器打开后,点击工作区选项卡中的“**hello.js**”文件。
如果您愿意,可以更改将显示在控制台上的文本。我已将文本更新为“Hello World. This is the Cloud9 IDE!”。通过单击“**文件 > 保存**”来保存您的更改。您的项目现在可以运行了!为此,请点击绿色的“**运行**”按钮。应用程序将被下载到您的网关并通过 Node.js 运行。我们可以在编辑器底部的控制台中看到我们的项目确实在网关上运行。
要将此应用程序部署到您的网关:
- 在 Cloud9 编辑器中,通过选择“文件 -> 下载项目”来下载项目。
- 使用 scp 命令将压缩文件传输到您的网关。在本例中,命令如下:
scp ~/Downloads/HelloWorldTestOne.tar.gz root@192.168.1.4:/users/robertonrails
- 使用 tar 命令解压项目。
tar -zxvf HelloWorldTestOne.tar
- 使用 node 运行 hello.js,不带调试器。
node --nodead_code_elimination --nolazy --nocrankshaft ./HelloWorldTestOne/hello.js
编码基础
英特尔在英特尔开发者专区的物联网部分提供了许多关于使用物联网网关的教程文章和视频。以下视频和文章将帮助您入门:
- 英特尔® 物联网网关开发者中心:在 Node-RED 中设置传感器——了解如何使用 Node-RED 可视化编程工具将传感器连接到物联网网关。连接后,网关可以收集和处理来自传感器的数据。
- 英特尔® 物联网网关开发者中心:在 Node-RED 中将传感器输出连接到云——了解如何使用 Node-RED 可视化编程工具获取物联网网关的本地传感器数据并将其发送到云数据库。
- 英特尔® 物联网网关开发者中心:保存和部署操作系统映像——物联网网关软件开发完成后,了解如何保存网关操作系统和软件的副本并将其部署到其他网关。
此外,以下指南包含有用的信息和说明:
- 英特尔® 物联网网关技术:安全最佳实践——了解如何访问和管理网关上的安全功能。
- 英特尔® 物联网网关技术:网关安装指南——了解如何连接网关硬件,将其连接到网络,更新评估操作系统,并访问英特尔® 物联网网关开发者中心。
使用 XDK 调试 Hello World
要使用 XDK 调试您的应用程序,请首先打开您在上一节中创建的“Hello World”应用程序。重新将应用程序上传到网关并运行它,以确保一切正常。
要调试应用程序,请点击“**调试**”按钮。调试按钮是一个带有绿色箭头的虫子图像。
单击按钮后,调试器窗口将打开。
您可以使用此窗口查看应用程序的当前状态,包括所有局部变量和调用堆栈。
要创建断点,请选择所需的行。然后您将在调试器窗口左侧的“断点”部分看到您创建的断点。
当您运行调试器时,应用程序将在该点停止,您可以调试您的应用程序。
使用 Wind River Helix App Cloud 调试 Hello World
让我们调试一下我们的 Hello World 应用程序。
为此,我们需要做的第一件事是打开我们的 Hello World 应用程序。然后,打开 hello.js。之后,点击我们一行代码旁边的空格。这应该会在第 25 行旁边添加一个红点。要调试应用程序,请点击绿色的“**运行**”按钮。应用程序将自动停止,调试面板将打开在编辑器的右侧。
在上图中,调试区域已展开,以便我们可以看到更多信息。从这里,我们可以查看我们指定的断点处应用程序的当前状态,包括所有局部变量和调用堆栈。如果需要,我们还可以输入监视表达式。
要继续运行我们的应用程序,请点击调试窗口顶部的绿色箭头,或者按键盘上的 **F8** 键。然后程序将继续运行,我们将在控制台中看到熟悉的输出消息。
下一步
在本指南中,您已经完成了许多工作:
- 学习了如何选择适合您应用程序的网关。
- 了解了许多 IDE 和文本编辑器选项。
- 学习了如何刷写网关并将其升级到最新的系统版本。
- 设置了您的网关以进行开发。
- 用 JavaScript 编写了一个简单的 hello world 应用程序,将其部署到网关,运行并进行了调试。
作为下一步,请阅读并实施编码基础部分列出的论文中的课程。这些论文将向您展示如何将传感器输出连接到云数据库,以及如何保存网关操作系统副本并将其部署到其他网关。