Intel® IoT 技术代码示例:C++ 中的闹钟
这款智能闹钟应用程序是一系列如何使用英特尔® 物联网开发套件、英特尔® Edison 开发板、云平台、API 和其他技术的英特尔® 物联网技术代码示例练习的一部分。
获取新的英特尔® 物联网开发套件,这是一个完整的软硬件解决方案,允许开发人员使用英特尔® Galileo 和英特尔® Edison 开发板创建激动人心的新解决方案。访问英特尔® 物联网开发者专区。
引言
这款智能闹钟应用程序是一系列如何使用英特尔® 物联网开发套件、英特尔® Edison 开发板、云平台、API 和其他技术的英特尔® 物联网技术代码示例练习的一部分。
通过此练习,开发人员将学习如何:
- 连接英特尔® Edison 开发板,这是一个专为物联网和可穿戴计算产品原型设计和生产而设计的计算平台。
- 使用英特尔® 物联网开发套件中的 MRAA 和 UPM 接口英特尔® Edison 开发板的 IO 和传感器库,这是一个完整的软硬件解决方案,可帮助开发人员探索物联网并实施创新项目。
- 在英特尔® System Studio 物联网版(用于 C/C++ 和 Java* 开发的 Eclipse* IDE)中运行这些代码示例,以创建与传感器和执行器交互的应用程序,从而快速启动英特尔® Edison 或英特尔® Galileo 开发板的软件开发。
- 设置一个 Web 应用程序服务器来设置闹钟时间,并使用 Microsoft* Azure* 的 Azure Redis Cache*、IBM* Bluemix* 的 Redis Store* 或 Amazon Web Services* 的 ElastiCache*(使用 Redis*)存储此闹钟数据,这些是连接物联网解决方案的不同云服务,包括数据分析、机器学习和各种生产力工具,以简化将传感器连接到云并快速启动物联网项目的过程。
- 调用 Weather Underground* API 的服务以访问天气数据。
它是什么
使用英特尔® Edison 开发板,此项目可让您创建一个智能闹钟,该闹钟具有以下功能:
- 可以通过内置的 Web 界面使用手机访问,以设置闹钟时间;
- 在 LCD 上显示实时天气数据;
- 使用基于云的数据存储跟踪您每天早上起床所需的时间。
工作原理
这款智能闹钟具有许多实用功能。使用直接从英特尔® Edison 开发板提供的网页,通过您的手机设置闹钟。当闹钟响起时,蜂鸣器会发出声音,LCD 会显示是时候起床了。旋转拨盘可用于调节显示屏的亮度。
此外,智能闹钟可以通过 Weather Underground* API 访问每日天气数据,并用它来改变 LCD 的颜色。可以选择将所有数据存储在您自己的 Microsoft* Azure*、IBM* Bluemix* 或 AWS* 帐户中运行的英特尔物联网示例数据存储中。
硬件要求
Grove* 初级套件 Plus 包含:
- 带有 Arduino* 扩展板的英特尔® Edison 开发板
- Grove* 基座扩展板 V2
- Grove* 旋转模拟传感器
- Grove* 蜂鸣器
- Grove* 按钮
- Grove* RGB LCD
软件要求
- 英特尔® System Studio 物联网版(用于 C/C++ 和 Java* 开发的 Eclipse* IDE)
- Microsoft* Azure*、IBM* Bluemix* 或 AWS* 帐户
- Weather Underground* API 密钥
如何设置
首先,使用 Git* 在您的计算机上克隆如何使用英特尔® 物联网技术代码示例存储库,如下所示:
$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git
想要下载 .zip 文件?在您的网络浏览器中,访问https://github.com/intel-iot-devkit/how-to-code-samples,然后点击右下角的下载 ZIP按钮。下载 .zip 文件后,解压缩它,然后使用该目录中的文件作为此示例。
将程序添加到 Eclipse*
在 Eclipse* 中,选择导入向导,将现有项目导入工作区,如下所示:
- 从主菜单中,选择文件 > 导入。
- 导入向导对话框打开。选择通用 > 现有项目到工作区,然后点击下一步。
- 点击选择根目录,然后点击相关的浏览按钮,找到包含项目文件的目录。
- 在项目下,选择包含您要导入的项目文件的目录,然后点击确定,再点击完成,将文件导入 Eclipse*。
- 您的主 .cpp 程序现在显示在工作区的src文件夹下。
连接 Grove* 传感器
您需要将 Grove* Base Shield V2 连接到 Arduino* 兼容的扩展板,以便将所有 Grove* 设备插入 Grove* Base Shield V2。确保将 Grove* Base Shield V2 上的微型 VCC 开关设置为 5V。
- 将 Grove* 电缆的一端插入 Grove* 旋转模拟传感器,另一端连接到 Grove* Base Shield V2 上的 A0 端口。
- 将 Grove* 电缆的一端插入 Grove* 按钮,另一端连接到 Grove* Base Shield V2 上的 D4 端口。
- 将 Grove* 电缆的一端插入 Grove* 蜂鸣器,另一端连接到 Grove* Base Shield V2 上的 D5 端口。
- 将 Grove* 电缆的一端插入 Grove* RGB LCD,另一端连接到 Grove* Base Shield V2 上的任何 I2C 端口。
英特尔® Edison 开发板设置
此示例使用 restclient-cpp 库对远程数据服务器执行 REST 调用。代码可以在lib目录中找到。restclient-cpp 库需要 libcurl 包,该包已默认安装在英特尔® Edison 开发板上。
此示例还使用 Crow* Web 微框架来提供一个易于使用但功能强大的 Web 服务器。Crow* 库要求在英特尔® Edison 开发板上安装 libboost 包,并将所需的 include 和 lib 文件添加到 Eclipse* Cross G++ Compiler 和 Cross G++ Linker 中。
-
更新 opkg 基本源,以便您可以安装所需的依赖项。与英特尔® Edison 开发板建立 SSH 连接并运行以下命令:
vi /etc/opkg/base-feeds.conf
-
编辑文件,使其包含以下内容:
src/gz all http://repo.opkg.net/edison/repo/all src/gz edison http://repo.opkg.net/edison/repo/edison src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32
-
按 Esc,然后按 :,然后按 q,再按 Enter,保存文件。
这只需为每个英特尔® Edison 开发板执行一次,因此如果您已经完成,可以跳到下一步。
通过运行以下命令在英特尔® Edison 开发板上安装 boost 库:
opkg update opkg install boost-dev
复制库
您需要将库和头文件从开发板复制到您运行 Eclipse* 的计算机上,以便 Cross G++ Compiler 和 Cross G++ Linker 可以找到它们。最简单的方法是从您的计算机(而不是英特尔® Edison 开发板)运行 scp
命令,如下所示:
scp -r USERNAME@xxx.xxx.x.xxx:/usr/include/boost ~/Downloads/iotdk-ide-linux/devkit-x86/sysroots/i586-poky-linux/usr/include scp USERNAME@xxx.xxx.x.xxx:/usr/lib/libboost* ~/Downloads/iotdk-ide-linux/devkit-x86/sysroots/i586-poky-linux/usr/lib
将 USERNAME@xxx.xxx.x.xxx
更改为与您设置的开发板的用户名和 IP 地址相匹配。
将 ~/Downloads/iotdk-ide-linux
更改为与您计算机上安装英特尔® 物联网开发套件的位置相匹配。
在 Windows* 上复制库
我们有一个有用的链接来设置它,请看这里:
注意:您需要通过在开发板上运行 configure_edison --password
命令来打开 SSH。设置密码后,请务必将其记下。您只需执行一次此操作,并且在重新启动英特尔® Edison 开发板时会进行设置。
额外设置
您还需要将当前时区设置为与您所在时区相匹配。通过在开发板上使用 timedatectl
程序来完成此操作。例如:
timedatectl set-timezone America/Los_Angeles
Weather Underground* API 密钥
要选择性地获取实时天气信息,您需要从 Weather Underground* 网站获取 API 密钥:
http://www.wunderground.com/weather/api
您必须首先获取 Weather Underground* API 密钥才能检索天气状况。您仍然可以运行示例,但没有天气数据。
通过修改 config.json 文件中的 WEATHER_API_KEY
键,将您的 Weather Underground* API 密钥传递给示例程序,如下所示:
- 从运行菜单中,选择运行配置。
显示运行配置对话框。 - 在C/C++ 远程应用程序下,点击闹钟。
这会显示您的应用程序的信息。 -
在应用程序执行前要执行的命令字段中,添加环境变量,使其看起来像这样,除了使用与您自己的设置对应的 API 密钥:
chmod 755 /tmp/alarm-clock; export API_KEY="YOURKEY"
-
点击应用保存您的新环境变量。
现在,当您使用运行按钮运行程序时,它应该能够从英特尔® Edison 开发板检索实时天气数据。
数据存储服务器设置
或者,您可以将此示例程序生成的数据存储在后端数据库中,该数据库使用 Microsoft* Azure*、IBM* Bluemix* 或 AWS*,以及 Node.js* 和 Redis* 数据存储进行部署。
有关如何设置自己的云数据服务器的信息,请访问:
https://github.com/intel-iot-devkit/intel-iot-examples-datastore
将英特尔® Edison 开发板连接到 Eclipse*
- 在左下角,右键点击目标 SSH 连接选项卡上的任意位置,然后选择新建 > 连接。
- 出现英特尔® 物联网目标连接窗口。在过滤器字段中,输入您的开发板名称。
- 在选择一个找到的连接列表中,选择您的设备名称,然后点击确定。
- 在目标 SSH 连接选项卡上,右键点击您的设备,然后选择连接。
如果提示输入用户名和密码,则用户名为 root,密码是您在配置英特尔® Edison 开发板时指定的密码。
使用云服务器运行示例
要使用可选的后端数据存储运行示例,您需要设置 SERVER
和 AUTH_TOKEN
环境变量。您可以在 Eclipse* 中完成此操作,如下所示:
- 从运行菜单中,选择运行配置。
显示运行配置对话框。 - 在C/C++ 远程应用程序下,点击门铃。
这会显示应用程序的信息。 -
在应用程序执行前要执行的命令字段中,添加环境变量,使其看起来像这样,除了使用与您自己的设置对应的服务器和身份验证令牌:
chmod 755 /tmp/alarm-clock;export API_KEY="YOURKEY"; export SERVER="http://intel-examples.azurewebsites.net/logger/alarm-clock"; export AUTH_TOKEN="YOURTOKEN"
-
点击应用保存您的新环境变量。
现在,当您使用运行按钮运行程序时,它应该能够调用您的服务器,直接从英特尔® Edison 开发板保存数据。
在英特尔® Edison 开发板上运行代码
当您准备运行示例时,点击 Eclipse* 顶部菜单栏中的运行。
这将使用 Cross G++ Compiler 编译程序,使用 Cross G++ Linker 链接程序,将二进制文件传输到英特尔® Edison 开发板,然后在开发板本身上执行它。
运行程序后,您应该会看到与下图类似的输出。
当程序上传到英特尔® Edison 开发板时,您的 RGB LCD 会显示当前时间。
重新生成 HTML 和 CSS
如果您对 index.html 或 styles.css 文件进行了任何更改,您需要重新生成用于通过内置 Crow* Web 服务器提供资产的 .hex 文件。我们有一个关于如何使用 shell 脚本的有用教程,请看这里:
设置闹钟
闹钟是通过一个单页 Web 界面设置的,该界面在示例程序运行时直接从英特尔® Edison 开发板提供。
Web 服务器在端口 3000
上运行,因此如果英特尔® Edison 开发板通过 Wi-Fi* 连接到 192.168.1.13
,那么如果您在同一网络上,要浏览的地址是 http://192.168.1.13:3000
。
有关 C++ 中 18 个如何使用英特尔® 物联网技术代码示例的完整列表,请访问此英特尔® 开发者专区博客文章:现在提供 18 个如何使用英特尔® 物联网技术 C++ 代码示例。
有关 JavaScript* 中 18 个如何使用英特尔® 物联网技术代码示例的完整列表,请访问此英特尔® 开发者专区博客文章:宣布推出 18 个新的如何使用英特尔® 物联网技术代码示例。
有关此代码示例的更多详细信息,请访问GitHub*。