简介
本文详细介绍了 2015 年 8 月 18-20 日在加利福尼亚州旧金山举办的 2015 年英特尔® 信息技术峰会 (IDF15) 上展示的动手实验室英特尔® 物联网 (IoT) 开发人员套件 SFTL005 的资料。 本文可帮助开发人员了解如何连接英特尔® Edison 平台,构建端到端物联网解决方案,并描述了可应用到其他项目中的相关概念。 其中包含一系列使用英特尔® Edison 平台的动手实践,可向开发人员展示如何设置并使用英特尔® Edison 软硬件环境,将平台连接至互联网,将接口与传感器相连以及与云服务传输数据。 本文还介绍了如何创建触摸监控应用,远程监控触摸传感器的状态。
英特尔物联网开发人员套件是一套完整的软硬件解决方案,可帮助开发人员探索物联网和实施创新项目。 英特尔® Edison 开发平台是一个尺寸小、功耗低且性能强大的计算平台,旨在创建原型,生产物联网和可穿戴计算产品。 该平台采用双核、双线程英特尔® 凌动™ 处理器系统芯片 (500 MHz) 以及 32 位英特尔® Quark™ 微控制器 (100 MHz)。 它采用集成 Wi-Fi* 和蓝牙* 连接。 有关英特尔® Edison 平台的更多信息,请参见:http://download.intel.com/support/edison/sb/edison_pb_331179001.pdf。
英特尔® Edison 平台基于 Yocto Project*。 Yocto* Project 是一个开源协作项目,可提供模板、工具和方法,帮助开发人员创建面向嵌入式产品定制的基于 Linux* 的系统。 英特尔® Edison 平台将 Arduino* 开发环境与基于 Linux* 的复杂计算机系统相整合,允许开发人员同时利用 Linux 系统调用和 Arduino sketch 中操作系统提供的服务。 英特尔® Edison 平台是一款强大的控制器,开发人员可以在使用英特尔® XDK (在 JavaScript* 中)、Eclipse*(在 C/C++ 中)、Arduino IDE、Wyliodrin*(编写视觉效果)、Python* 来开发项目,如果更愿意使用命令行环境也可以在终端上进行编程。 在本文中,我们将为大家介绍使用英特尔 XDK 在 JavaScript 中创建物联网解决方案的流程,以及如何在物联网设备上部署、运行和调试。
目录
1、物联网关键要素
2、硬件组件
3、入门
4、配置英特尔® Edison 平台
5、Seeed Studios Grove* Starter Kit Plus
6、创建新项目
7、云计算
8、使用模拟器创建触摸通知器监控应用
9、使用真实的移动设备创建触摸通知器监控应用
物联网关键要素
物联网包含四个关键要素:数据生成器、数据聚合器、基于云的服务和决策。 数据生成器包括传感器和制动器。 英特尔® 物联网开发人员套件可帮助您轻松地将传感器和制动器添加至物联网项目,并收集信息。 设备层感应到的信息将传输到基于云的服务,然后交付给最终用户。
硬件组件
本文中参考的硬件组件如下:
1、英特尔® Edison 计算模块
2、Arduino 扩展板
3、Grove* Starter Kit Plus
4、2 根将 Micro B 连接到 Type A 的 USB 线缆
5、一个直流 (DC) 电源
关于如何安装英特尔® Edison 开发板的具体说明,请参见:https://software.intel.com/zh-cn/assembling-intel-edison-board-with-ard…。

入门
如要下载最新英特尔® Edison 开发板的固件和英特尔® Phone Flash Tool Lite,请浏览英特尔® Edison 开发板软件下载: https://software.intel.com/zh-cn/iot/hardware/edison/downloads。 阅读https://software.intel.com/zh-cn/articles/flash-tool-lite-user-manual,安装英特尔 Phone Flash Tool Lite,然后将映像刷新为最新英特尔® Edison 开发板固件。 以下是基本的步骤:
1、安装 Microsoft Windows* 64 位集成安装程序驱动程序软件。 该驱动程序还可安装 Arduino IDE 软件。
2、下载最新的英特尔® Edison 开发板固件软件版本 2.1。
3、下载并安装英特尔 Phone Flash Tool Lite。
4、使用所下载的固件刷新英特尔® Edison 平台。
5、设置串行终端。
配置英特尔® Edison 平台
按照串行终端后,您可以配置英特尔® Edison 平台。
在英特尔® Edison 平台控制台上,输入:configure_edison --setup。
按照设置提示配置开发板名称和根密码。 需要这一步是因为连接至英特尔 XDK 需要设置用户名和密码。

确保指定一个唯一的名称。 请勿使用 “edison” 作为名称,这种操作方式经常会导致 mDNS 出现问题。

关于如何将英特尔® Edison 平台连接至本地的 Wi-Fi 网络的具体描述,请参见: https://software.intel.com/zh-cn/connecting-your-intel-edison-board-usi…。
连接到本地 Wi-Fi 后,请输入:wpa_cli status。
确保连接状态为“已完成 (COMPLETED)”,并且指派了 IP 地址。

Seeed Studios Grove* Starter Kit Plus
Grove Starter Kit Plus 是各种模块化传感器和制动器集,可帮助物联网开发人员在不焊接的情况下开发项目。 该套件包括各种基本输入和输出模块和传感器。 以下是如何安装 Grove 基座并连接 Grove 组件的说明: https://software.intel.com/zh-cn/node/562029。
英特尔® XDK IoT Edition 安装
如要下载、安装并将英特尔 XDK 连接至英特尔® Edison 平台,请访问:https://software.intel.com/zh-cn/getting-started-with-the-intel-xdk-iot…。 该工具免费提供。 英特尔 XDK IoT Edition 支持开发人员在英特尔物联网平台上创建、测试、调试和运行应用,并可提供代码模板,帮助开发人员与传感器和制动器交互。 它还可提供虚拟化移动设备,帮助开发人员测试其应用。
创建新项目
您可以使用模板或空白项目两种方式来启动新项目。 本部分内容可帮助您了解创建简单的光传感器英特尔 XDK 项目的步骤。

创建一个空白模板,并将其命名为 LightSensor。

光传感器的示例代码:https://software.intel.com/zh-cn/iot/hardware/sensors。 如要浏览光传感器的示例代码,
在左侧的“连接类型”下拉菜单中,选择 AIO。
在显示的列表中,选择 Grove 光传感器

将 Grove 光传感器 JavaScript* 示例代码复制到适才创建的光传感器项目的 main.js 中。
将英特尔® Edison 模块和电脑连接到相同的 Wi-Fi 网络中。
英特尔® Edison 模块 Wi-Fi 和密码在上述配置英特尔® Edison 平台的步骤应该已经设置。
如要更改 Wi-Fi,请在英特尔® Edison 平台控制台上,
如要检索 IP 地址,请在英特尔® Edison 平台控制台上输入:wpa_cli status

示例代码将光传感器当作模拟输入 AIO 针脚 0 来使用。 仅需将光传感器连接至模拟针脚 0 即可。

使用英特尔 XDK IoT Edition 构建并上传 LightSensor 项目。

运行 LightSensor 项目。

云计算
有许多面向物联网的云应用。 在本文中,我们将讨论 ThingSpeak*。 ThingSpeak 可提供许多在云中运行的应用,帮助我们构建互联应用并发布适用于物联网的互联产品。
ThingSpeak ThingSpeak 是提供服务,帮助构建物联网应用的平台。 ThingSpeak 的特性包括实时数据收集和数据处理、呈现为图表形式的数据可视化以及面向 ThingTweet*、ThingHTTP*、TweetControl*、TimeControl*、React* 等创建插件和应用的能力。
第一步是注册 ThingSpeak 账户:https://thingspeak.com/,然后创建一个新通道。

该通道是存储应用并检索 ThingSpeak API 内任何类型的数据的位置。 每个通道都有唯一的通道 ID。 当应用从通道读取数据时,将使用通道 ID 来识别该应用。 每个通道最多可提供 8 个数据字段。 创建通道后,ThingSpeak 可发布并处理数据,您的项目可检索数据。 如果您发布了通道,那么其他人便能够找到它并访问数据。 如果您将其设置为私有,那么则只有您可以访问该通道。
下一步是命名字段,这样您便能够知道在该字段中添加什么数据。
接下来,移动到 API 密钥选项卡,获取 API “writeKey” 和 “readKey”,以便向通道进行写入。

上传数据最简单的方式是使用未编码的 URL 手动更改字段值。 如果浏览器的窗口显示结果 ‘0’,那么尝试发送提交时便会出现错误。 其他情况下,您的提交便会成功。 更新申请的 “api_key” 是 ThingSpeak 通道的 “writeKey”,见图 14: ThingSpeak – writeKey 和 readKey。
1 http://api.thingspeak.com/update?api_key=KSX88EAFTV19S2CH&field1="110"
上传多个字段的值:
1 http://api.thingspeak.com/update?api_key=KSX88EAFTV19S2CH&field1="110"&field2="120"
ThingSpeak 是开源代码物联网应用。 如要在英特尔® Edison 平台上使用 ThingSpeak,请在串行终端上安装 thingspeakclient 模块:

现在,您可以使用 ThingSpeakClient 编写示例应用。 默认情况下,ThingSpeakClient() URL 是 https://api.thingspeak.com。
1 var ThingSpeakClient = require('thingspeakclient');
2 var client = new ThingSpeakClient();
处理每通道更新申请之间的默认超时值为真。 如要禁用客户端超时值:
1 var client = new ThingSpeakClient({useTimeoutMode:false});
每通道更新的默认超时值为 15 秒钟。 以下是将超时值更改为 20 秒钟的示例。
1 var client = new ThingSpeakClient({useTimeoutMode:2000});
如要执行 updateChannel(),先在通道中仅添加 ThingSpeak writeKey,或同时添加 ThingSpeak readKey 和 writeKey。 选项回调将返回错误和响应。
1 // Attached a channel with only a writeKey for update a channel:
2 client.attachChannel(50568, {writeKey:'KSX88EAFTV19S2CH'}, callBack);
3
4 // Attached a channel with both writeKey and readKey:
5 client.attachChannel(50568, {writeKey:'KSX88EAFTV19S2CH', readKey:'B2PPOW7HGOCL4KZ6'}, callBack);
1 // Create the light sensor object using AIO pin 0
2 var light = new groveSensor.GroveLight(0);
3 var lightValue = light.value();
4
5 // Update field 3 of a channel
6 client.updateChannel(50568, { field3: lightValue }, function(err, response) {
7 });
以下是用来读取数据的方法:
1 client.getLastEntryInFieldFeed(50568, 3, function(err, response) {
2 if (err == null) {
3 console.log('read successfully. value is: ' + response.field3);
4 }
5 });
ThingSpeak 示例概要
以下代码示例结合了图 10: 光传感器示例项目的光传感器示例与 ThingSpeak 示例代码。 它可读取光传感器的值,然后将其上传至 ThingSpeak。
01 var ThingSpeakClient = require('thingspeakclient');
02 var client = new ThingSpeakClient();
03
04 //var client = new ThingSpeakClient({useTimeoutMode:false});
05 var client = new ThingSpeakClient({updateTimeout:20000});
06
07 //var client = new ThingSpeakClient({useTimeoutMode:false});
08 // Set the timeout to 20 seconds (Default value is 15 secondes)
09 var client = new ThingSpeakClient({updateTimeout:20000});
10
11 var callBack = function(err) {
12 if(!err) {
13 console.log('error: ' + err);
14 }
15 }
16
17 // Attached a channel with only a writeKey for update a channel:
18 //client.attachChannel(50568, {writeKey:'KSX88EAFTV19S2CH'}, callBack); // ok
19
20 // Attached a channel with both writeKey and readKey:
21 client.attachChannel(50568, {writeKey:'KSX88EAFTV19S2CH', readKey:'B2PPOW7HGOCL4KZ6'}, callBack);
22
23 // Load Grove module
24 var groveSensor = require('jsupm_grove');
25
26 // Create the light sensor object using AIO pin 0
27 var light = new groveSensor.GroveLight(0);
28
29 // Read the input and print both the raw value and a rough lux value.
30 // Upload the light value to field 3 of the channel.
31 function uploadLightValueToThingSpeak() {
32 var lightValue = light.value();
33 console.log(light.name() + " raw value is " + light.raw_value() +
34 ", which is roughly " + light.value() + " lux");
35 client.updateChannel(50568, { field3: lightValue }, function(err, response) {
36 console.log('err = ' + err);
37 console.log('response = ' + response);
38 if (err == null && response > 0) {
39 console.log('Update successfully. Entry number was: ' + response);
40 }
41 });
42 }
43 setInterval(uploadLightValueToThingSpeak, 20000);
光传感器数据通过通道的字段 3 “光”向 ThingSpeak 实时发布:

ThingTweet
ThingTweet 应用将您的 Twitter* 账户链接至 ThingSpeak,并使用简单的 API 发送 Twitter 消息。
如要链接至 Twitter 账户,
请登录 https://thingspeak.com/
在“应用”选项卡下,点击 ThingTweet,然后点击链接 Twitter 账户,授权应用以确认正确的 Twitter 账户。

如果您没有 Twitter 账户,请登录: https://twitter.com,然后授权应用。

现在,通过输入 Twitter 用户名和 tweet 消息,您可以在 updateChannel() 发送 twitter 消息,如下所示。
1 client.updateChannel(50568, { field3: lightValue, twitter: ' IoTIntelEdison ', tweet: ‘Intel Edison platform is awesome’}, function(err, response) {
2 if (err == null && response > 0) {
3 console.log('Update successfully. Entry number was: ' + response);
4 }
5 });
如要查看 Tweet 消息,请登录 https://twitter.com。

ThingHTTP
ThingHTTP 应用支持您通过 HTTP 请求将事物连接到 web 服务中。 ThingHTTP 的方法是 GET、POST、PUT 和 DELETE。 Twilio 也是用于短信和电话呼叫的云通信平台。 它还支持 HTTPs 方法,并且能够与采用英特尔® Edison 平台的 ThingHTTP 应用进行交互。 以下是借助 Twilio 通过 ThingHTTP 应用发送短信的示例。
一开始,先注册 Twilio,然后点击 “显示 API 证书”,获取Twilio ACCOUNT_SID 和 AUTH_TOKEN。
URL: https://api.twilio.com/2010-04-01/Accounts/Twilio_ACCOUNT_SID/SMS/Messa… for SMS message and https://api.twilio.com/2010-04-01/Accounts/Twilio_ACCOUNT_SID/Calls for making API calls.
HTTP Auth Username: Twilio ACOUNT_SID
HTTP Auth Password: Twilio AUTH_TOKEN
Method: POST
Body: “From” is the Twilio phone number, “To” is the phone number that accepts SMS message, and “Body” is the text message.

TweetControl
TweetControl 负责侦听 Twitter 的命令,然后执行操作。 在以下示例中,TweetControl 可侦听 Twitter 的触发词 “cool”,然后执行 ThingHTTP “Twilio SMS” 操作。
Twitter 账户: Twitter 账户的用户名。 如果匿名 TweetControl 进行了验证,任何人都能够触发 TweetControl。
触发: Twitter 消息发出的需要被所触发的 TweetControl 处理的词语。
ThingHTTP 操作: 选择一个要执行的 ThingHTTP 申请。

现在您已经设置了 ThingHTTP 和 TweetControl,接下来您可以通过 Twitter 账户发送 tweet 消息。 Tweet 结构是触发的过滤器。 为了让 TweetControl 能够执行,需要在 Tweet 消息中添加一个过滤关键词。 Tweet 关键词是:
#thingspeak
thingspeak
#tweetcontrol
tweetcontrol
Tweet structure:
1 filter trigger

在您发送了 Tweet 消息 “#thingspeak IntelEdison is so cool!” 之后,TweetControl 控制由 “cool” 触发,然后调用 Twilio SMS ThingHTTP 向我们的移动设备发送短信 “Hello Intel Edison”。

TimeControl
TimeControl 还可执行 ThingHTTP 请求,但是它能够在预确定的时间和时间安排下自动执行。 创建一个新的 TimeControl,并按照如下方式填写表格:
名称: 为 TimeControl 命名
日期和时间: 选择 TweetControl 要执行的日期和时间
操作: 例如,选择 ThingHTTP 应用,然后选择要执行的 ThingHTTP Twilio SMS 申请

当 TimeControl 计时器触发时,Twilio SMS ThingHTTP 应用执行,并向我们的移动设备发送短信 “Hello Intel Edison”,如图 23 所示: 移动设备 – 接收 Twilio 的短信。
React
当 ThingSpeak 通道中的数据满足一定条件时,React 将执行 ThingHTTP 申请,或发送 ThingTweet 消息。 查看 http://community.thingspeak.com/documentation/apps/react/,当指示灯的值少于 6 时,使用 ThingTweet 创建 Light React 发送 tweet 消息 “Your light is dim”。

使用模拟器创建触摸通知器监控应用
英特尔 XDK IoT Edition 支持我们创建 Cordova 应用监控使用 HTML5、CSS 和 JavaScript 的 Grove 传感器。 应用可以使用模拟器或实际的设备进行测试。 我们将创建一个触摸通知器来监控无线接收数据的应用,并在触摸显示器被触摸后通知用户。 该应用使用 Grove 触摸传感器采集触摸读数,并可更改设备上的圆圈的颜色。
如要查看可用模板的列表,请访问左侧的 Start a New Project,在物联网嵌入式应用部分,点击Template。
选择 Touch Notifier,然后继续创建新项目。

将“触摸”传感器连接至 Grove Shield 上贴有 D2 的插座,将“蜂鸣”传感器连接至 Grove Shield 上贴有 D6 的插座。
将英特尔 XDK 连接至英特尔® Edison 平台,然后在物联网设备上构建并运行“触摸通知器”应用。

因为触摸通知器应用在 HTTP 服务器上添加了 socket.io 监听端口 1337,所以请确保在运行应用前安装 socket.io 模块。
请留意端口数字,您将会在图 30 中用到: Edison IP 地址和端口编号。

如要创建 Apache Cordova* 应用,请访问左侧的 HTML5 Companion Hybrid Mobile for Web App,然后点击 Samples and Demos,再点击 General。
如要显示一列模板,请访问 HTML5 + Cordova 选项卡。
如要创建应用,请点击 Touch Notifier Companion App。

您现在位于 Cordova 触摸通知器项目界面。
点击 Emulate 选项卡,然后从左上角的下拉列表中选择移动设备。 默认为 Motorola Droid 2。
输入英特尔® Edison 开发板 IP 地址,端口编号 1337,然后点击 Submit。 英特尔® Edison 开发板 IP 地址可通过在英特尔® Edison 平台控制台上的输入 “wpa_cli status” 进行检索。 如欲获取端口编号,请参考图 27: 创建物联网嵌入式应用触摸通知器。 注意,英特尔® Edison 平台应与电脑连接在相同的本地 Wi-Fi 网络中。

如果显示弹出消息 “Connection Error! Server Not Available”,请确保物联网嵌入式应用的触摸传感器应用仍然在运行。 接下来点触触摸显示器,查看圆圈的颜色是否更改为绿色,听一听蜂鸣传感器是否发出蜂鸣。

使用真实的移动设备创建触摸通知器监控应用
如要在真实的设备(手机、平板电脑或 Apple iPad*)上运行 Cordova 应用,
从 Google Play*、Window Store* 或 Apple AppStore* 上下载并安装英特尔® App Preview 应用。
切换至英特尔 XDK 中的 Test 选项卡,然后点击 I have installed app preview。

如果显示以下消息,则点击 Sync,与测试服务器保持同步。

移动设备、电脑和英特尔® Edison 平台连接到相同的本地 Wi-Fi 网络上才能够与彼此通信。
打开移动设备上的英特尔® App Preview,切换至 ServerApps,然后选择触摸通知器应用进行登录。
使用英特尔® Edison 平台 IP 地址和端口编号 1337 进行登录。 如果显示 “Connection Error! Server Not Available” 错误消息,请检查物联网嵌入式应用的触摸传感器应用是否运行。

成功登录後,触摸通知器应用如下所示。

总结
在本文中,我们介绍了如何设置英特尔® Edison 平台,开始与传感器交互,以及将数据传输至 ThingSpeak 云服务。 如欲尝试 Grove Starter Kit Plus 中的其他传感器和试验更多传感器,请访问:https://software.intel.com/zh-cn/iot/hardware/sensors。 本文还介绍了如何创建触摸监控应用,远程监控触摸传感器的状态。 思考一下,您想创建什么应用,然后试验并利用英特尔® Edison 平台的功能。
参考资料
硬件规格、操作系统/固件下载、用户论坛和支持: http://www.intel.com/edison
面向物联网的英特尔® XDK 环境: http://software.intel.com/zh-cn/html5/xdk-iot
英特尔® XDK IoT Edition 入门指南: https://software.intel.com/zh-cn/intel-xdk-iot-edition-guide
Eclipse* 开发套件示例代码: http://software.intel.com/zh-cn/iot
完整的英特尔® Edison 开发板项目和教程: http://www.instructables.com/id/Intel
目前有许多出色的 Arduino 项目创意,其中许多适用于英特尔® Edison 开发板: http://playground.Arduino.cc
文章来源:英特尔开发人员专区