使用 Intel® XDK 动手实践 Intel® IoT Developer Kit。
本文涵盖并扩展了在 2015 年 Intel® Developer Forum 上发布的 Hands-on Lab Intel® Internet of Things (IoT) Developer Kit SFTL005 的材料。
获取全新的 Intel® 物联网开发者套件,这是一款完整的软硬件解决方案,使开发人员能够利用 Intel® Galileo 和 Intel® Edison 板卡创建令人兴奋的新解决方案。请访问 Intel® Developer Zone for IoT。
本文涵盖并扩展了在 2015 年 8 月 18-20 日于加利福尼亚州旧金山举行的 Intel® Developer Forum 2015 (IDF15) 上发布的“动手实践 Intel® 物联网 (IoT) 开发者套件” SFTL005 的材料。本文档帮助开发人员学习如何连接 Intel® Edison 平台以构建端到端的物联网解决方案,并描述了可应用于其他项目的相关概念。其中包括一系列使用 Intel® Edison 平台的动手实践练习,展示了开发人员如何设置和使用 Intel® Edison 硬件和软件环境、将平台连接到互联网、与传感器接口以及将数据通信到云服务。本文档还展示了如何创建触摸监控应用程序,以远程监控触摸传感器的状态。
Intel 物联网开发者套件是一个完整的软硬件解决方案,可帮助开发人员探索物联网并实施创新项目。Intel® Edison 开发平台是一款小型、低功耗且功能强大的计算平台,专为物联网和可穿戴计算产品的原型制作和生产而设计。该平台由 500 MHz 的双核、双线程 Intel® Atom™ 处理器系统芯片和 100 MHz 的 32 位 Intel® Quark 微控制器提供动力。它集成了 Wi-Fi* 和蓝牙* 连接。有关 Intel® Edison 平台的更多信息,请访问 http://download.intel.com/support/edison/sb/edison_pb_331179001.pdf.
Intel® Edison 平台基于 Yocto Project*。Yocto* Project 是一个开源协作项目,它提供模板、工具和方法,帮助开发人员为嵌入式产品创建定制的基于 Linux* 的系统。Intel® Edison 平台将 Arduino* 开发环境与完整的基于 Linux* 的计算机系统相结合,使开发人员能够在 Arduino 草图中包含 Linux 系统调用和操作系统提供的服务。Intel® Edison 平台是一款强大的控制器,开发人员可以使用 Intel® XDK 进行 JavaScript* 开发、使用 Eclipse* 进行 C/C++ 开发、使用 Arduino IDE、使用 Wyliodrin* 进行可视化编程、使用 Python*,或者如果您更喜欢使用命令行环境,则可以在终端上进行开发。在本文中,我们将指导您完成使用 Intel XDK 和 JavaScript 创建物联网解决方案的过程,以及如何在物联网设备上进行部署、运行和调试。
目录
- 物联网的关键要素
- 硬件组件
- 入门
- 配置 Intel® Edison 平台
- Seeed Studios Grove* 入门套件增强版
- Intel® XDK 物联网版安装
- 创建新项目
- 云
- 使用模拟器创建触摸通知监控应用程序
- 使用真实移动设备创建触摸通知监控应用程序
物联网的关键要素
物联网有四个关键要素:数据生成器、数据聚合器、云服务和决策。数据生成器包括传感器和执行器。Intel 物联网开发者套件可以轻松地为物联网项目添加传感器和执行器并收集信息。在设备级别传感到的信息被传输到云服务,然后传递给最终用户。
硬件组件
本文档中引用的硬件组件如下所列
- Intel® Edison 计算模块
- Arduino 扩展板
- Grove* 入门套件增强版
- 两个 Micro B 转 Type A USB 线
- 直流 (DC) 电源
有关如何组装 Intel® Edison 板卡的详细说明,请参阅 https://software.intel.com/en-us/assembling-intel-edison-board-with-arduino-expansion-board。
入门
要下载 Intel® Edison 板卡的最新固件和 Intel® Phone Flash Tool Lite,请访问 Intel® Edison 板卡软件下载: https://software.intel.com/en-us/iot/hardware/edison/downloads。请阅读 https://software.intel.com/en-us/articles/flash-tool-lite-user-manual 来安装 Intel Phone Flash Tool Lite,然后将映像刷入 Intel® Edison 板卡的最新固件。这些是基本步骤
- 安装 Microsoft Windows* 64 位集成安装程序驱动程序软件。此驱动程序还会安装 Arduino IDE 软件。
- 下载最新的 Intel® Edison 板卡固件软件版本 2.1。
- 下载并安装 Intel Phone Flash Tool Lite。
- 使用下载的固件刷写 Intel® Edison 平台。
- 设置串行终端。
配置 Intel® Edison 平台
设置好串行终端后,即可配置 Intel® Edison 平台。
- 在 Intel® Edison 平台控制台,键入: configure_edison --setup。
- 按照设置提示配置板卡名称和 root 密码。此步骤是必需的,因为连接 Intel XDK 需要设置用户名和密码。
请确保分配唯一的名称。请勿使用“edison”作为名称,这是一个常见的做法,会给 mDNS 带来问题。
有关如何将 Intel® Edison 平台连接到本地 Wi-Fi 网络的详细说明,请参阅 https://software.intel.com/en-us/connecting-your-intel-edison-board-using-wifi。
- 连接到本地 Wi-Fi 后,键入: wpa_cli status。
- 验证连接状态是否为 COMPLETED 并且已分配 IP 地址。
Seeed Studios Grove* 入门套件增强版
Grove Starter Kit Plus 是各种模块化传感器和执行器的集合,物联网开发者可以使用它们来开发项目而无需焊接。该套件包含各种基本输入和输出模块及传感器。此处提供了有关如何安装 Grove 底板并连接 Grove 组件的说明: https://software.intel.com/en-us/node/562029。
Intel® XDK 物联网版安装
要下载、安装 Intel XDK 并将其连接到 Intel® Edison 平台,请访问 https://software.intel.com/en-us/getting-started-with-the-intel-xdk-iot-edition。该工具免费提供。Intel XDK 物联网版允许开发人员在 Intel 的物联网平台上创建、测试、调试和运行应用程序,并提供与传感器和执行器交互的代码模板。它还提供了一个虚拟移动设备列表,开发人员可以使用这些设备来测试他们的应用程序。
创建新项目
您可以使用模板或空白项目启动一个新项目。本节将引导您完成创建简单光传感器 Intel XDK 项目的步骤。
创建一个空白模板并命名为 LightSensor。
光传感器示例代码可在 https://software.intel.com/en-us/iot/hardware/sensors 获取。要浏览光传感器示例代码,
- 在左侧的“连接类型”下拉列表中,选择 **AIO**。
- 在显示的列表中,选择 **Grove 光传感器**
- 将 Grove 光传感器 JavaScript* 示例代码复制到您刚创建的光传感器项目的 main.js 文件中。
- 将 Intel® Edison 模块和计算机连接到同一个 Wi-Fi 网络。
Intel® Edison 模块的 Wi-Fi 和密码应已从上述“配置 Intel® Edison 平台”步骤中设置好。
- 要更改 Wi-Fi,在 Intel® Edison 平台控制台,
- 要检索 IP 地址,在 Intel® Edison 平台控制台,键入: wpa_cli status
示例代码将光传感器用作模拟输入 AIO 引脚 0。只需将光传感器连接到模拟引脚 0 即可。
使用 Intel XDK 物联网版构建并上传 LightSensor 项目。
运行 LightSensor 项目。
云
物联网有许多云应用程序。本文将介绍 ThingSpeak*。ThingSpeak 提供了许多在云中运行的应用程序,可以帮助我们构建连接应用程序并为物联网发布连接产品。
ThingSpeak
ThingSpeak 是一个提供物联网应用程序构建服务的平台。ThingSpeak 的功能包括实时数据收集和数据处理、以图表和图形形式的数据可视化、创建 ThingTweet*、ThingHTTP*、TweetControl*、TimeControl*、React* 等插件和应用程序的能力。
第一步是在 https://thingspeak.com/ 注册一个 ThingSpeak 帐户,然后创建一个新频道。
频道是您的应用程序在 ThingSpeak API 中存储和检索任何类型数据的场所。每个频道都有一个唯一的频道 ID。当应用程序从频道读取数据时,频道 ID 用于标识它。每个频道提供多达八个数据字段。创建频道后,ThingSpeak 会发布和处理数据,您的项目会检索数据。如果使您的频道可发布,其他人可以找到并访问数据。如果将其设为私有,则只有您可以访问该频道。
下一步是为字段命名,以便您知道将什么数据放入该字段。
接下来,转到 API 密钥选项卡,获取用于写入频道的 API "writeKey" 和 "readKey"。
上传数据的最简单方法是手动使用编码 URL 更改字段的值。如果浏览器窗口显示结果“0”,则表示在尝试发送提交时发生错误。否则,您的提交成功。“api_key”的更新请求是 图 14:ThingSpeak – writeKey 和 readKey 中显示的 ThingSpeak 频道的“writeKey”。
http://api.thingspeak.com/update?api_key=KSX88EAFTV19S2CH&field1="110"
上传多个字段的值
http://api.thingspeak.com/update?api_key=KSX88EAFTV19S2CH&field1="110"&field2="120"
ThingSpeak 是一个开源代码的物联网应用程序。要开始在 Intel® Edison 平台上使用 ThingSpeak,请在串行终端上安装 thingspeakclient 模块
现在您可以使用 ThingSpeakClient 编写示例应用程序了。ThingSpeakClient()
URL 的默认值是 https://api.thingspeak.com。
var ThingSpeakClient = require('thingspeakclient');
var client = new ThingSpeakClient();
处理每个通道的更新请求之间的默认超时值为 true。要禁用客户端超时
var client = new ThingSpeakClient({useTimeoutMode:false});
每个通道的更新的默认超时值为 15 秒。以下是如何将超时值更改为 20 秒的示例。
var client = new ThingSpeakClient({useTimeoutMode:2000});
要执行 updateChannel(),首先使用仅包含 ThingSpeak writeKey
的通道,或者使用包含通道的 ThingSpeak readKey
和 writeKey
的通道进行附加。可选的回调将返回错误和响应。
// Attached a channel with only a writeKey for update a channel:
client.attachChannel(50568, {writeKey:'KSX88EAFTV19S2CH'}, callBack);
// Attached a channel with both writeKey and readKey:
client.attachChannel(50568, {writeKey:'KSX88EAFTV19S2CH', readKey:'B2PPOW7HGOCL4KZ6'}, callBack);
代码示例 1:ThingSpeak* – 附加到通道
// Create the light sensor object using AIO pin 0
var light = new groveSensor.GroveLight(0);
var lightValue = light.value();
// Update field 3 of a channel
client.updateChannel(50568, { field3: lightValue }, function(err, response) {
});
代码示例 2:ThingSpeak* – 更新通道
读取数据的方法之一是
client.getLastEntryInFieldFeed(50568, 3, function(err, response) {
if (err == null) {
console.log('read successfully. value is: ' + response.field3);
}
});
代码示例 3:ThingSpeak* – getLastEntryInFieldFeed()
ThingSpeak 示例草图
以下代码示例将 图 10:光传感器示例项目 中的光传感器示例与 ThingSpeak 示例代码相结合。它读取光传感器的值,然后上传到 ThingSpeak。
var ThingSpeakClient = require('thingspeakclient');
var client = new ThingSpeakClient();
//var client = new ThingSpeakClient({useTimeoutMode:false});
var client = new ThingSpeakClient({updateTimeout:20000});
//var client = new ThingSpeakClient({useTimeoutMode:false});
// Set the timeout to 20 seconds (Default value is 15 secondes)
var client = new ThingSpeakClient({updateTimeout:20000});
var callBack = function(err) {
if(!err) {
console.log('error: ' + err);
}
}
// Attached a channel with only a writeKey for update a channel:
//client.attachChannel(50568, {writeKey:'KSX88EAFTV19S2CH'}, callBack); // ok
// Attached a channel with both writeKey and readKey:
client.attachChannel(50568, {writeKey:'KSX88EAFTV19S2CH', readKey:'B2PPOW7HGOCL4KZ6'}, callBack);
// Load Grove module
var groveSensor = require('jsupm_grove');
// Create the light sensor object using AIO pin 0
var light = new groveSensor.GroveLight(0);
// Read the input and print both the raw value and a rough lux value.
// Upload the light value to field 3 of the channel.
function uploadLightValueToThingSpeak() {
var lightValue = light.value();
console.log(light.name() + " raw value is " + light.raw_value() +
", which is roughly " + light.value() + " lux");
client.updateChannel(50568, { field3: lightValue }, function(err, response) {
console.log('err = ' + err);
console.log('response = ' + response);
if (err == null && response > 0) {
console.log('Update successfully. Entry number was: ' + response);
}
});
}
setInterval(uploadLightValueToThingSpeak, 20000);
代码示例 4:发送短信使用 Twilio* 示例
光传感器数据已通过频道字段 3“Light”实时发布到 ThingSpeak。
ThingTweet
ThingTweet 应用将您的 Twitter* 帐户链接到 ThingSpeak,并使用简单的 API 发送 Twitter 消息。
要链接到 Twitter 帐户,
- 登录 https://thingspeak.com/
- 在“应用”选项卡上,点击 **ThingTweet**,然后点击 **链接 Twitter 帐户** 以授权该应用,确认正确的 Twitter 帐户。
如果您没有 Twitter 帐户,请在 https://twitter.com 注册,然后授权该应用。
现在,您可以通过在 updateChannel()
中传递 Twitter 用户名和推文消息来发送推文,如下所示。
client.updateChannel(50568, { field3: lightValue, twitter: ' IoTIntelEdison ', tweet: ‘Intel Edison platform is awesome’}, function(err, response) {
if (err == null && response > 0) {
console.log('Update successfully. Entry number was: ' + response);
}
});
代码示例 5:ThingSpeak* – getLastEntryInFieldFeed()
- 要查看您的推文消息,请登录 https://twitter.com。
ThingHTTP
ThingHTTP 应用允许您通过 HTTP 请求将事物连接到 Web 服务。ThingHTTP 的方法有 GET、POST、PUT 和 DELETE。Twilio 也是一个用于 SMS 消息和电话的云通信平台。它还支持 HTTPs 方法,并能够与 ThingHTTP 应用在 Intel® Edison 平台上进行接口。以下是使用 ThingHTTP 应用发送 SMS 消息的示例。
要开始,请注册 Twilio,然后点击 **显示 API 凭据** 以获取 Twilio ACCOUNT_SID 和 AUTH_TOKEN。
- URL:对于 SMS 消息,https://api.twilio.com/2010-04-01/Accounts/Twilio_ACCOUNT_SID/SMS/Messages;对于拨打 API 电话,https://api.twilio.com/2010-04-01/Accounts/Twilio_ACCOUNT_SID/Calls。
- HTTP 身份验证用户名:Twilio ACOUNT_SID
- HTTP 身份验证密码:Twilio AUTH_TOKEN
- 方法:POST
- 正文:“From”是 Twilio 电话号码,“To”是接收 SMS 消息的电话号码,“Body”是文本消息。
TweetControl
TweetControl 监听来自 Twitter 的命令,然后执行操作。在下面的示例中,TweetControl 监听 Twitter 的触发词“cool”,然后执行 ThingHTTP“Twilio SMS”操作。
- Twitter 帐户:Twitter 帐户的用户名。如果勾选了“匿名 TweetControl”,则任何人都可以触发您的 TweetControl。
- 触发器:来自触发 TweetControl 需要处理的消息的单词。
- ThingHTTP 操作:选择一个 ThingHTTP 请求执行。
现在您已经设置了 ThingHTTP 和 TweetControl,可以从您的 Twitter 帐户发送推文消息。推文结构是筛选触发的。为了让 TweetControl 执行,请在您的推文消息中包含一个筛选关键字。推文关键字是
- #thingspeak
- thingspeak
- #tweetcontrol
- tweetcontrol
推文结构
filter trigger
发送推文消息“#thingspeak IntelEdison is so cool!”后,TweetControl 由触发器“cool”触发,然后调用 Twilio SMS ThingHTTP 将 SMS 消息“Hello Intel Edison”发送到我们的移动设备。
TimeControl
TimeControl 也执行 ThingHTTP 请求,但它会在预定的时间和计划自动执行。创建一个新的 TimeControl 并按以下方式填写表单
- 名称:为 TimeControl 命名
- 日期和时间:选择要处理 TweetControl 的日期和时间
- 操作:在此示例中,选择 ThingHTTP 应用,然后选择要执行的 ThingHTTP Twilio SMS 请求
当 TimeControl 定时器触发时,Twilio SMS ThingHTTP 应用将被执行,并将文本消息“Hello Intel Edison”发送到我们的移动设备,如 图 23:移动设备 – 收到来自 Twilio* 的 SMS 所示。
React
React 在我们 ThingSpeak 频道中的数据满足特定条件时执行 ThingHTTP 请求或发送 ThingTweet 消息。请查看 http://community.thingspeak.com/documentation/apps/react/,创建一个 Light React,当光值小于 6 时,使用 ThingTweet 发送消息“Your light is dim”。
使用模拟器创建触摸通知监控应用程序
Intel XDK 物联网版允许我们使用 HTML5、CSS 和 JavaScript 创建 Cordova 应用来监控 Grove 传感器。该应用可以使用模拟器或真实设备进行测试。我们将创建一个触摸通知监控应用程序,该应用程序可以无线接收数据,并在触摸传感器被触摸时通知用户。此应用程序使用 Grove 触摸传感器获取触摸读数,并更改设备上圆的颜色。
- 要查看可用模板列表,请在左侧转到 **启动新项目**,然后在“物联网嵌入式应用程序”部分下,点击 **模板**。
- 选择 **触摸通知器**,然后继续创建新项目。
- 将触摸传感器连接到标记为 D2 的 Grove Shield 插孔,并将蜂鸣器传感器连接到标记为 D6 的 Grove Shield 插孔。
- 将 Intel XDK 连接到 Intel® Edison 平台,然后在物联网设备上构建并运行触摸通知器应用程序。
- 由于触摸通知器应用程序附加了 socket.io 到监听端口 1337 的 HTTP 服务器,请确保在运行应用程序之前安装 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。
- 输入 Intel® Edison 板卡的 IP 地址、端口号 1337,然后点击 **Submit**。Intel® Edison 板卡的 IP 地址可以通过在 Intel® Edison 平台控制台键入“wpa_cli status”来获取。端口号请参考 图 27:创建物联网嵌入式应用程序触摸通知器。请注意,Intel® Edison 平台应与计算机连接到同一个本地 Wi-Fi 网络。
如果弹出“Connection Error! Server Not Available”消息,请确保来自物联网嵌入式应用程序的触摸传感器应用程序仍在运行。然后触摸触摸传感器,您将看到圆的颜色变为绿色,并听到来自蜂鸣器传感器的蜂鸣声。
使用真实移动设备创建触摸通知监控应用程序
要在真实移动设备(如手机、平板电脑或 Apple iPad*)上运行 Cordova 应用,
- 从 Google Play*、Window Store* 或 Apple AppStore* 下载并安装 Intel® App Preview 应用。
- 在 Intel XDK 中切换到“Test”选项卡,然后点击 **I have installed app preview**。
如果显示以下消息,请点击 **Sync** 以与测试服务器同步。
移动设备、计算机和 Intel® Edison 平台必须连接到同一个本地 Wi-Fi 网络才能相互通信。
- 在移动设备上打开 Intel® App Preview,切换到 ServerApps,然后选择触摸通知器应用以启动它。
- 使用 Intel® Edison 平台 IP 地址和端口号 1337 登录。如果显示“Connection Error! Server Not Available”消息,请检查来自物联网嵌入式应用程序的触摸传感器应用程序是否仍在运行。
成功登录后,触摸通知器应用程序将如下所示启动。
摘要
在本文中,我们介绍了如何设置 Intel® Edison 平台,以开始与传感器进行接口并与 ThingSpeak 云服务通信数据。要尝试 Grove Starter Kit Plus 中的不同传感器并尝试更多传感器,请访问 https://software.intel.com/en-us/iot/hardware/sensors。本文还展示了如何创建触摸监控应用程序以远程监控触摸传感器的状态。思考您想要创建的内容,然后进行实验并享受 Intel® Edison 平台的强大功能。
参考文献
- 硬件规格、操作系统/固件下载、用户论坛和支持: http://www.intel.com/edison
- Intel® XDK 物联网环境: http://software.intel.com/en-us/html5/xdk-iot
- Intel® XDK 物联网版入门指南: https://software.intel.com/en-us/intel-xdk-iot-edition-guide
- Eclipse* 开发套件、示例代码: http://software.intel.com/iot
- 已完成的 Intel® Edison 板卡项目和教程: http://www.instructables.com/id/Intel
- 大量关于 Arduino 项目的精彩创意,其中许多适用于 Intel® Edison 板卡: http://playground.Arduino.cc
关于作者
Nancy Le 和 Whitney Foster 是 Intel Corporation 软件和服务部门的软件工程师,致力于 Intel® Atom™ 处理器规模赋能项目。
注意事项
本文档不授予任何知识产权的许可(明示或暗示,禁止反言或以其他方式)。
Intel 放弃所有明示和暗示的保证,包括但不限于适销性、特定用途的适用性和非侵权性的暗示保证,以及因履约过程、交易过程或贸易用途而产生的任何保证。
本文档包含正在开发的产品、服务和/或流程的信息。此处提供的所有信息如有更改,恕不另行通知。请联系您的 Intel 代表以获取最新的预测、计划、规格和路线图。
所描述的产品和服务可能包含称为勘误的缺陷或错误,这可能导致与公布的规格不符。当前的已特性化勘误可应要求提供。
可以通过致电 1-800-548-4725 或访问 www.intel.com/design/literature.htm 获取包含订单号且本文档中引用的文件的副本。
此示例源代码根据 Intel 示例源代码许可协议发布
Intel、Intel 徽标和 Intel Atom 是 Intel Corporation 在美国和/或其他国家/地区的商标。
*其他名称和品牌可能被声明为他方财产
© 2015 Intel Corporation。