英特尔® 物联网网关 - JavaScript 入门指南

本文内容面向 JavaScript*。 如欲了解 Python* 的入门信息,请查阅 英特尔® 物联网网关 - Python 入门指南

简介

物联网 (IoT) 市场正在迅猛发展。 Gartner 预测 到 2016 年,世界范围内相连接的设备将达到 64 亿台,总服务支出将达到 2350 亿美元。 到 2020 年,预计相连接的设备将达到 208 亿台。 国际数据公司 (IDC) 预计到2020 年物联网市场规模将达到 1.7 万亿美元。 现在是将新旧系统连接到互联网的最佳时机。

物联网 (IoT) 解决方案包含许多移动部件。 这些解决方案的核心是物联网网关,以便获得连接性、可扩展性、安全性和可管理性。 该入门指南将使您了解:

  • 什么是物联网网关。
  • 它如何成为商业和家庭物联网解决方案的中枢。
  • 如何选择适合自己的物联网网关。
  • 可以获取哪些软件开发工具。
  • 如何编写 “Hello World” 应用,并在网关上运行。

让我们开始吧!

什么是物联网网关?

网关是做什么的?

物联网网关是物联网解决方案的核心,它能够把不同的部件连接在一起。 物联网网关的一端是所有的设备,包括传感器、智能设备、汽车、工业设备等任何产生数据的智能设备。 另一端是网络和数据基础设施,负责存储、处理设备产生的所有数据。 网关将设备和网络、数据基础设施连接在一起,是一座连接两端的桥梁。

图 1: 物联网解决方案的高度概括

然而,网关不仅仅是桥梁,它还可以解决所有开发者都面临的连接问题。 连接问题有两个主要需求:

  • 互联网或广域网 (WAN) 访问的稳定性、安全性。
  • 支持访问多种设备的能力,许多设备不具备处理能力。

将单个传感器连接到互联网,不仅复杂而且成本高昂。 如果您有不同类型的传感器,每个传感器有不同的接口,您想要将数据整合到一个指示板,会发生什么情况呢?

网关通过以下特性帮您解决难题:

  • 通信和连接性
  • 可扩展性
  • 安全性
  • 可管理性

通信和连接性

有线连接和无线连接成为许多设备的标准。 现行的协议包含蜂窝 2G、3G 和 4G、蓝牙*、串行接口、USB、虚拟专用网络 (VPN)、Wi-Fi 接入点、MQ 遥测传输 (MQTT) 消息传送协议和 ZigBee*。 可以使用各种方法连接到传感器和系统。 有了如此多的协议,几乎可以连接任何传感器或设备。

可扩展性

和网络路由器相似,物联网网关可以相互连接,形成更大型的解决方案。 不管是通过单个网关创建家庭自动化系统,还是连接数英亩的工厂(新旧系统并存),您可以全部连接到一个系统上。

安全性

数据加密和软件锁定是物联网网关提供的众多安全特性中的两项。 此外,许多设备提供白名单、更改控制、安全存储和安全启动,还提供多种不同的协议、服务和恶意软件防护。 通过结合使用上述特性,您的系统和数据每时每刻都可获得可靠的保护(这点很重要,由于物联网呈指数级增长,成为吸引越来越多黑客和窃贼的目标)。

可管理性

可管理性是指解决方案的部署、维护和管理。 由于潜在的复杂性,解决方案的易管理性十分重要。 您需要找到能够安全访问的基于 web 的界面,以维护网关,管理连接的传感器,控制数据流的传输。 由于许多网关使用某种形式的嵌入式 Linux*,为您提供您熟悉、喜爱的管理工具(如 ssh 和 scp)。

使用场景

商用

在商业环境中,网关可以连接到一系列传感器(光传感器、环境传感器、烟雾传感器、能源传感器和 RFID)和系统(HVAC、售货系统、安全系统和交通系统),以控制、监控设备(如数据存储、服务器),这些设备可以通过笔记本电脑、平板电脑和智能手表检索。

图 2: 端到端的商业物联网部署 - 以英特尔为例

具体示例如下:

  • 商业货车运输公司收集车队的 GPS 和装载信息。 每一辆车都配有联网的网关,可以过滤、传送车辆系统的数据。
  • 建筑公司在建筑工地监控噪音级别,使噪音符合当地的噪音规定。 每个工地都安装了噪音和振动传感器,连接到一个或多个网关,将数据发送给现场主管。

家庭

家居自动化是最常见的物联网家庭应用。 在此场景下,网关可以智能地连接到安全系统、恒温器、照明控制、烟雾探测器等等,支持单点控制功能。 在家庭内部访问 web 接口,或者通过互联网安全地访问 web 接口,通常可以产生有关所有系统的统一视图。

智能电表是另一种常用的网关。它们检测能耗信息,将信息返回电力公司,1 小时返回 1 次,有时甚至间隔更短时间。 这些电表还支持与电力公司之间的双向通信。

哪款网关适合我?

现在市场上的网关种类繁多,哪一款最适合您呢? 最终的决定因素主要有两点:

  1. 现有的互联网连接类型(有线、无线及蜂窝)
  2. 您使用的传感器类型和传感器接口类型(USB、串行接口及蓝牙*)。

英特尔拥有庞大的制造业合作伙伴生态系统,能提供多种选择。 在英特尔® 开发人员专区的物联网区,您将获得两个实用工具:解决方案目录网关比较工具。 使用这两种工具,您将发现拥有如下特性的解决方案:

处理器

  • 单核英特尔® Quark™ SoC X1000 400 MHz 处理器
  • 单核、双核和四核英特尔® 凌动™ 处理器
  • 单核、双核和四核英特尔® 酷睿™ 处理器

网络与通信

  • Wi-Fi(单个无线和多个无线)
  • 双 LAN
  • 蓝牙*
  • CAN 总线
  • ZigBee*
  • 6LoWPAN
  • GPRS
  • 2G/3G/LTE
  • 模拟和数字 I/O
  • RS-232

操作系统

  • Wind River* Linux* 7
  • Snappy Ubuntu* Core
  • Microsoft Windows® 10 物联网

本指南采用的是配备有 OMEGA* RH USB 传感器的研华科技* UTX-3115 网关,该设备可以测量温度和相对湿度。

物联网技术在垂直行业的应用

在商业和家庭领域中,利用物联网网关技术开发了许多应用,但是,这项技术具体应用在什么地方?

应用物联网技术的行业和垂直领域的部分分类如下所示:

行业垂直领域使用案例
公共部门城市城市 Wi-Fi、停车与交通
公共安全学校、边境与执法部门
制造业工厂能源管理、安全与自动化
能源与矿产公用事业移动工作人员、变电站与配电自动化
石油与天然气管道监控、精炼厂系统与安全操作
采矿资产可视性与监控、预见性维护
交通运输交通运输道路、火车与车站
B2C零售远程专家 / 移动顾问、数字媒体存储体验
体育与娱乐体育馆、体育馆 Wi-Fi 与体育馆视野
SP 与机器对机器 (M2M)远程塔管理、设备与资产管理
医疗行业虚拟患者观察、患者路线查找
金融服务业分支客户体验、能源管理

软件概述

Python*环境中的 Wind River* Linux*

英特尔® 物联网网关的操作系统是 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 文档

如欲在您的网关安装 MPAA,请使用 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

开发人员可以设置一些 IDE 选项,如英特尔® XDK IoT Edition、Node-RED*、Wind River* Helix* 应用云和 Eclipse*。 此外,您可以使用 ssh 命令直接进入网关,使用 vi 编写应用,或使用 scp 将项目安全地传输至网关。 如果您是新手,推荐您使用 Node-RED 或 Wind River Helix 应用云。

英特尔® XDK IoT Edition

图 3: 英特尔® XDK IoT Edition

利用配备 Node.js* 的 英特尔®XDK IoT Edition 来创建 web 接口,将传感器添加至项目,启动云。 除了使用网关,您还可以为英特尔® Edison 和 Galileo 开发板编程。

Node-RED*

图 4: Node-RED 流程图

根据 Node-RED 的官方介绍,它是一种工具,旨在 “以新颖有趣的方式将硬件设备、API 和在线服务编写到一起” ,它提供了构建于 Node.js* 基础上的基于浏览器的流程编辑。

Wind River*Helix* 应用云

图 5: Wind River*Helix* 应用云

您在 Wind River*Helix* 应用云注册网关之后,便可获得 Cloud9*(基于 web 的IDE)。 Helix 应用云能让您在任何地方开发应用,开发完成后,可以立刻在设备上运行。

开发环境

基于英特尔® 物联网网关构建了丰富的开发环境。 包括台式机和基于 web 的工具。 本章节介绍了如何闪存网关的操作系统,利用英特尔® XDK IoT Edition(台式机)和 Wind River*Helix* 应用云(基于 web)编写并调试 ‘Hello World’ 应用。

这些指令可以在 Windows 和 Mac 上运行。

开发所需的组件

开发网关之前,您需要准备:

  • 一个物联网网关(本指南使用的是研华科技 UTX-3115)。
  • 测量温度和相对湿度的 USB 传感器(本指南使用的是 OMEGA 温度和湿度 USB 传感器)。
  • 电源
  • 一根插入路由器的以太网线缆(将网关连接到互联网)。

需要网络连接,以连接网关。 本指南假设网关与开发设备共享同一个网络。 如果某些原因导致网络连接不可用,可以通过串行终端连接到网关。

图 6 显示本指南使用的设置:

图 6: 物联网解决方案示意图

开始创建 Hello World

闪存操作系统

闪存操作系统,将系统升级至最新的版本。 请采取以下步骤升级系统:

  1. 准备一个至少 4GB 大小的 U 盘。
  2. 下载最新版网关操作系统映像。
  3. 将映像解压至 Linux 主机系统中的选定地址。
  4. 打开一个终端窗口
  5. 执行 df 命令,对安装 U 盘的设备进行验证。 df 命令显示用于文件系统的可用磁盘空间。
  6. 执行以下命令,将操作系统映像复制到 U 盘:
    sudo dd if= <path to recovery image file> of=/dev/sdb bs=4M; sync
  7. 将 USB 硬盘从主机拔出,通过 U 盘启动网关。
  8. 登录网关 (root/root),并执行以下命令:
    # /sbin/deploytool –d /dev/sda --reset-media -F
  9. 关闭网关之后重启。

网关重启后,登录网关,查看指示板上的系统版本号,验证操作系统是否为最新版本。

首次安装

成功登录网关之后,通过以下步骤进行安装:

XXXX 是网关无线网络适配器 (br-lan) 的 MAC 地址的后四位数。 您可以启动网关来获取 MAC 地址。启动后,以根身份登录并键入 ‘ifconfig’。 从 br-lan 适配器获取后四位数。

  1. 取出网关。
  2. 将以太网线缆从路由器插入要求的以太网端口。 Advantech 需要接入右侧 (eth0) 的以太网端口。
  3. 连接 VGA 或 HDMI 显示器。
  4. 可选:连接鼠标和键盘。 (本指南使用 usb 集线器将其插入 Advantech。 鼠标是完全可选的,建议您连接键盘。)
  5. 将 USB 传感器连接至网关。
  6. 将网关连接至电源,并按下开机按钮。
  7. 网关启动后,通过开发设备的无线网络适配器,利用 SSID 和密码连接到网关内置 Wi-Fi。
    • SSID: IDPDK-XXXX
    • 密码:windriveridp
  8. 打开 PC 的浏览器 – 建议使用 Google Chrome – 转到 http://192.168.1.1。 这是一个英特尔® 物联网网关开发中心(基于 web 的界面,利用可视编程工具管理传感器和原型)的登录页面。
  9. 通过以下证书登录:
    • 用户名:gwuser
    • 密码:gwuser

就这么简单! 您可以开始开发了。

利用 XDK 编写 Hello World

本章节将利用英特尔® XDK IoT Edition 创建 JavaScript* “Hello World” 应用。

安装并登录 XDK 之后,单击位于 IDE 左下角的 Start a New Project 按钮。 在 物联网嵌入式应用 部分,单击 Templates 链接,然后选择 Blank Template

图 7: 利用 XDK 编写 “Hello World” – 选择空白模板

然后,单击右下角的 Continue 按钮。 在弹出窗口中添加项目名称,然后单击 Create 按钮,创建项目。

图 8: 利用 XDK 编写 “Hello World” – 新的项目名称和位置

打开项目后,从物联网设备下拉列表中(在 XDK 左下角的)选择网关。 本示例中,网关的 IP 地址为 192.168.1.9。

图 9: 利用 XDK 编写 “Hello World” – 选择网关

注: 为了使 XDK 自动找到您的网关,您的开发设备必须在同一个子网。 如果您已经使用内置无线路由器连接到网关(如上述所示),您和网关在同一个子网。 如果您的电脑不在同一个子网,但是您可以对网关的 IP 地址进行 ping 测试,例如,如果您的网关通过网线插入网络,您可以从下拉框列表中选择 Add Manual Connection 选项,手动连接到您的设备。

然后,在编辑器第 5 行键入如下代码:
console.log(“Hello World! This is the Intel XDK”); 您的编辑器窗口应该如下所示:

图 10: 利用 XDK 编写 “Hello World” – 编辑器窗口

选择 File Save,保存更改。

创建应用之后,需要将项目上载至网关。 请点击上载按钮(一个向下的箭头)。

图 11: 利用 XDK 编写 “Hello World” – 将项目上载至网关

您的应用位于网关之上并且可以运行。 需要单击 Run 按钮。 运行按钮是一个绿色的圈,里面有白色的箭头。 将运行您的应用。

图 12: 利用 XDK 编写 “Hello World” – 运行应用

应用运行后,您将在控制台看到输出。

图 13: 利用 XDK 编写 “Hello World” – 控制台输出

利用 Wind River® Helix* 应用云编写 Hello World。

本章节将利用 Wind River Helix 应用云创建 JavaScript “Hello World” 应用。

首先,需要创建应用云的帐户,并注册设备。 需要登录网关,单击指示板下的 Administration 图标,在 Quick Tools 部分中,单击应用云图标下的 Launch 按钮。 按照说明注册网关。

: 网关创建的唯一 ID 将在 20 分钟后失效。请在 20 分钟内验证电子邮件地址,并重新登录。 如果您错过了窗口,可以生成新的代码,随后注册。

登录应用云之后,单击 Application Projects 部分中的 Create new project 按钮。 在弹出窗口中输入项目名称,选择 JavaScript Hello World 模板。

图 14: 利用 Wind River Helix 编写 “Hello World” – 创建新项目

点击 OK 按钮创建您的项目。 创建成功后,单击 Open 按钮,在 Cloud9 编辑器中打开项目。 打开编辑器后,在工作区选项卡中单击 hello.js 文件。

您可以改变控制台上的文本。 我将文本更新为:“Hello World. This is the Cloud9 IDE!” 单击 File > Save 保存更改。 您的项目可以运行了! 首先点击绿色 Run 按钮。 应用下载到您的网关,被 Node.js 运行。 在编辑器底部的控制台可以看到,项目确实在网关运行。

图 15: 利用 Wind River Helix 编写 “Hello World” – 运行 “Hello World”

将应用部署到网关:

  • 在 Cloud9 编辑器中选择 File(文件)-> Download Project(下载项目),并下载项目。
  • 使用 Scp 命令将压缩文件传输到网关。 本示例使用的命令如下所示:
    scp ~/Downloads/HelloWorldTestOne.tar.gz root@192.168.1.4:/users/robertonrails
  • 使用 tar 命令对项目解压。
    tar -zxvf HelloWorldTestOne.tar
  • 使用节点运行 hello.js,不运行调试器。
    node --nodead_code_elimination --nolazy --nocrankshaft ./HelloWorldTestOne/hello.js

代码要点

英特尔开发人员专区 的物联网部分,英特尔提供了大量关于物联网网关的操作方法文章及视频。 以下视频和文章将帮助您起步:

此外,以下指南包含有用的信息和指令:

利用 XDK 调试 Hello World

如欲利用 XDK 来调试应用,首先打开之前步骤创建的 Hello World 应用。 将应用重新上传至网关,运行应用并保证一切运转良好。

点击 Debug 按钮来调试应用。 Debug 按钮是一个带有绿色箭头的故障图标。

图 16: 利用 XDK 调试 “Hello World”

单击按钮之后,打开调试窗口。

图 17: 利用 XDK 调试 “Hello World” – 应用状态

您可以使用这个窗口查看应用的当前状态,包括所有的局部变量和调用堆栈。

选择所需的行,以创建断点。 您将在调试器窗口左侧的断点部分看到您所创建的断点。

图 18: 利用 XDK 调试 “Hello World” – 创建断点

当您运行调试器时,应用将立刻停止,您可以调试您的应用。

利用 Wind River Helix 应用云调试 Hello World

下面来调试 Hello World 应用

首先需要打开 Hello World 应用。 然后,打开 hello.js。 单击单行代码左侧的空白区域。 在 25 行旁边添加一个红点。 单击绿色 Run 按钮,调试应用。 应用将自动停止,编辑器右侧会出现调试面板。

图 19: 利用 Wind River Helix 调试 “Hello World”

如上图所示,调试器区域被展开,能看到更多的信息。 在此处,可以浏览指定断点处的应用当前状态,包含所有的局部变量和调用堆栈。 还可以输入监看表达式。

如欲重新运行应用,单击调试窗口顶部的绿色箭头,或按下键盘的 F8 键。 程序将重新运行,我们会在控制台上看到熟悉的消息。

我们的未来目标

通过本指南,您收获了很多:

  • 学会了如何选择适合您应用的网关。
  • 发现了许多可用的 IDE 和文本编辑器。
  • 学会了如何闪存网关,将网关升级到最新版的系统。
  • 安装了针对开发的网关。
  • 利用 JavaScript 编写了简单的 Hello World 应用,并在网关上部署、运行和调试。

下一步,阅读并运用 代码要点部分 的文章中的知识。 这些文章介绍了如何将传感器输出连接到云数据库,以及保存网关操作系统的副本,并将其部署到其他的网关。

有关编译器优化的更完整信息,请参阅优化通知