跳转到主要内容

英特尔物联网技术入门代码示例:使用 C++ 编写智能炉灶

editor 提交于

<br><strong><font size="5">引言</font></strong></br>

这款智能炉灶应用是一系列英特尔® 物联网技术代码示例入门实践(使用英特尔® 物联网开发人员套件、英特尔® Edison 开发板、云 平台、API 和其他技术)的一部分。

从该实践中,开发人员可以学习到如何:

<li>连接英特尔® Edison 开发板 — 一个旨在创建原型,生产物联网和可穿戴计算产品的计算平台。</li>

<li>使用英特尔® 物联网开发人员套件中的 MRAA 和 UPM 与英特尔® Edison 开发板 IO 和传感器库交互;该套件是一款完整 的软硬件解决方案,可帮助开发人员探索物联网和实施创新项目。</li>

<li>在英特尔® System Studio 物联网版(面向 C/C++ 和 Java* 开发的 Eclipse* IDE)中运行这些代码示例;该工具是一个 IDE,可创建与传感器和制动器交互的应用,支持立即开发面向英特尔® Edison 或英特尔® Galileo 开发板的软件。</li>

<li>使用 Microsoft* Azure* 的 Azure Redis Cache*、IBM* Bluemix* 的 Redis Store* 或使用 Amazon Web Services* 的 Redis* 的 ElastiCache*,连接物联网解决方案(包括数据分析、机器学习和各种生产力工具)的不同云服务以简化将传感器连接到云,支持 物联网项目快速正常运行的效率提高工具,设置 web 应用服务器以设置温度并保存该数据。</li>

<br><strong><font size="5">它是什么</font></strong></br>

使用英特尔® Edison 开发板,该项目支持您创建具备下列功能的智能炉灶:

<li>使用传感器监控温度,并在食物达到所需温度,需要关闭炉灶时提供声响通知;</li>

<li>支持使用手机通过内置 Web 界面访问以设置所需温度;</li>

<li>使用连接的火焰传感器监控可能形成的火灾,并发出紧急警告声响;</li>

<li>使用基于云的数据存储追踪烹饪温度。</li>

<br><strong><font size="5">工作原理</font></strong></br>

该智能炉灶传感器拥有多项精心设计的实用特性,可帮助您监控在传统炉灶上烹制的食物的温度。

您可以使用手机,直接通过英特尔® Edison 显示的网页为炉灶上的锅设置目标温度。

达到目标温度时,扬声器将发出声音告警。 如果检测到沸溢的锅中出现明火,警报将发出鸣响。

此外,它还可使用在 Microsoft* Azure*、IBM* Bluemix* 或 AWS*账户中运行的英特尔物联网示例数据存储 (Intel IoT Examples Datastore) 存储系统事件。

<strong><font size="5">硬件要求</font></strong>

Grove* 家庭自动化套件,包括:

1、带有 Arduino breakout 开发板的英特尔® Edison 开发板

2、Grove * 基座护罩 V2

3、<a href="http://iotdk.intel.com/docs/master/upm/node/classes/otp538u.html">Grove* IR 温度传感器</a>

4、<a href="http://iotdk.intel.com/docs/master/upm/node/classes/yg1006.html">Grove* 火焰传感器</a>

5、<a href="http://iotdk.intel.com/docs/master/upm/node/classes/grovespeaker.html">…* 扬声器</a>

<strong><font size="5">软件要求</font></strong>

1、<a href="https://software.intel.com/zh-cn/eclipse-getting-started-guide">英特尔® System Studio 物联网版(面向  C/C++ 和 Java* 开发的 Eclipse* IDE)</a>

2、Microsoft* Azure*、IBM* Bluemix* 或 AWS* 账户

<br><strong><font size="5">如何设置

首先,使用电脑上的 Git*(如下) 复制英特尔® 物联网技术代码示例入门库:

$ git clone https://github.com/intel-iot-devkit/how-to-code-samples.git

想要下载 .zip 文件? 在您的 Web 浏览器中,访问 https://github.com/intel-iot-devkit/how-to-code-samples,并点击右下方的 Download ZIP 按钮。 下载 .zip 文件后,对其进行解压,然后使用目录中的文件(对本例而言)。

<strong><font size="5">将程序添加至 Eclipse*</font></strong>

在 Eclipse* 中选择 Import Wizard 以将现有项目导入至工作区,如下所示:

1、从主菜单中选择 File > Import。

<center><img src="http://intel.eetrend.com/files/2016-06/wen_zhang_/100001763-4797-101.pn…; alt=""></center>

<br>2、Import Wizard 对话框打开。 选择 General > Existing Project into Workspace 并单击 Next。</br>

<center><img src="http://intel.eetrend.com/files/2016-06/wen_zhang_/100001763-4798-102.pn…; alt=""></center>

<br>3、单击 Select root directory,然后单击相关的 Browse 按钮,以找到包含项 目文件的目录。</br>

<center><img src="http://intel.eetrend.com/files/2016-06/wen_zhang_/100001763-4799-103.pn…; alt=""></center>

<br>4、在 Projects 下方选择目录和您希望导入的项目文件,单击 OK,然后单击 Finish 以将文件导入至 Eclipse*。</br>

<center><img src="http://intel.eetrend.com/files/2016-06/wen_zhang_/100001763-4800-104.pn…; alt=""></center>

<br>5、您的主 .cpp 程序将显示在 src 文件夹下方的工作区。</br>

<center><img src="http://intel.eetrend.com/files/2016-06/wen_zhang_/100001763-4801-105.pn…; alt=""></center>

<br><strong><font size="5">连接 Grove* 传感器</font></strong></br>

您需要具有连接至兼容 Arduino* 的 breakout 开发板的 Grove* 基座护罩 V2,以便将所有 Grove* 设备插入 Grove* 基座护罩 V2。 确保 Grove* 基座护罩 V2 上的微型 VCC 开关设置为 5V。

1、将 Grove* 线缆的一端插入 Grove* 红外线温度传感器,并将其另一端连接至 Grove* 基座护罩 V2 的 A0 端口上。

<center><img src="http://intel.eetrend.com/files/2016-06/wen_zhang_/100001763-4802-106.jp…; alt=""></center>

<br>2、将 Grove* 线缆的一端插入 Grove* 火焰传感器,并将其另一端连接至 Grove* 基座护罩 V2 的 D4 端口上。</br>

3、将 Grove* 线缆的一端插入 Grove* 扬声器,并将其另一端连接至 Grove* 基座护罩 V2 的 D5 端口上。

<strong><font size="5">英特尔® Edison 开发板设置</font></strong>

该示例使用 restclient-cpp 库执行面向远程数据服务器的 REST 呼叫。 您可在 lib 目录中获 得该代码。 restclient-cpp 库要求 libcurl 软件包(默认已安装在英特尔® Edison 开发板上)。

该示例还使用 Crow* Web 微框架,以提供易于使用,但功能强大的 Web 服务器。 Crow* 库要求 libboost 软件 包安装于英特尔® Edison 开发板,并将所需的包含和库文件添加至 Eclipse* Cross G++ Compiler 和 Cross G++ Linker。

1、更新 opkg base feed,以便安装所需的相关性。 建立 SSH 与英特尔® Edison 开发板之间的连接,并运行以下 命令:

vi /etc/opkg/base-feeds.conf

2、编辑文件以包含以下内容:

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

3、依次按下 Esc、:、q 和 Enter,保存文件。

每个英特尔® Edison 开发板只需这样操作一次,如果已经操作过,可跳至下一步。

通过运行以下命令,将 boost 库安装于英特尔® Edison 开发板:

opkg update opkg install boost-dev

<strong><font size="5">复制库</font></strong>

您需要将库和包含文件从开发板复制到运行 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 以匹配计算机安装英特尔 ® 物联网开发人员套件的位置。

<strong><font size="5">在 Windows* 上复制库</font></strong>

我们提供一个实用的链接,以完成这一设置:

<a href="https://github.com/intel-iot-devkit/how-to-code-samples/blob/master/doc…; rel="nofollow">using- winscp.md</a>

注:您需要通过在开发板上运行 configure_edison --password 命令,以打开 SSH。 设置密码后,确保将其写下。 您只需操作一次,它在重启英特尔® Edison 开发板时设置。

<strong><font size="5">数据存储服务器设置</font></strong>

您还可选择将该示例程序生成的数据存储在使用 Microsoft* Azure*、IBM* Bluemix*、AWS*、Node.js* 和 Redis* 数据存储部署的后端数据库中。

有关如何设置云数据服务器的信息,请访问:

https://github.com/intel-iot-devkit/intel-iot- examples-datastore

<strong><font size="5">连接英特尔® Edison 开发板和 Eclipse*</font></strong>

1、在左下角右击 Target SSH Connections 选项卡的位置,并选择 New > Connection。

<center><img src="http://intel.eetrend.com/files/2016-06/wen_zhang_/100001763-4803-107.pn…; alt=""></center>

<br>2、显示 Intel® IoT Target Connection 窗口。 在 Filter 字段中,输入开发板的名称。</br>

<center><img src="http://intel.eetrend.com/files/2016-06/wen_zhang_/100001763-4804-108.pn…; alt=""></center>

<br>3、在 Select one of the found connections 列表中选择设备名称并单击 OK。</br>

<center><img src="http://intel.eetrend.com/files/2016-06/wen_zhang_/100001763-4805-109.pn…; alt=""></center>

<br>4、在 Target SSH Connections 选项卡中,右击设备并选择 Connect。</br>

<center><img src="http://intel.eetrend.com/files/2016-06/wen_zhang_/100001763-4806-110.pn…; alt=""></center>

<br>如果收到有关用户名和密码的提示,用户名为 root,密码为您在配置英特尔® Edison 开发板时指定的密码。</br>

<strong><font size="5">使用云服务器运行该示例</font></strong>

如欲通过可选后端数据库运行该示例,需要设置 SERVER 和 AUTH_TOKEN 环境变量。 该操作可 在 Eclipse* 中执行,以下所示:

1、在 Run 菜单中选择 Run Configurations。显示 Run Configurations 对话框。

2、在 C/C++ Remote Application 下方单击 doorbell。这样可以显示有关 应用的信息。

3、除使用与设置对应的服务器和验证令牌外,在 Commands to execute before application 字段中添加环境变量,如下所示:

chmod 755 /tmp/smart-stovetop;export API_KEY="YOURKEY"; export SERVER="http://intel-examples.azurewebsites.net/counter/logger/smart-stove&quot;; export AUTH_TOKEN="YOURTOKEN"
>

4、单击 Apply 以保存新的环境变量。

现在,如果使用 Run 按钮运行应用,应该能够调用您的服务器以保存英特尔® Edison 开发板的数据。

<strong><font size="5">在英特尔® Edison 开发板上运行代码</font></strong>

准备运行该示例时,在 Eclipse* 中单击顶部菜单栏中的 Run。

<center><img src="http://intel.eetrend.com/files/2016-06/wen_zhang_/100001763-4807-111.pn…; alt=""></center>

<br>这样将使用 Cross G++ Compiler 编译程序,使用 Cross G++ Linker 进行链接、将二进制代码传输至英特尔® Edison 开发板,然后 在开发板上执行代码。</br>

运行程序后,您将看到类似于下图中的输出。

<center><img src="http://intel.eetrend.com/files/2016-06/wen_zhang_/100001763-4808-112.pn…; alt=""></center>

<br><strong><font size="5">生成 HTML 和 CSS</font></strong></br>

如果要对 index.html 或 styles.css 文件进行更改,需要生成以通过内置 Crow* Web 服务 器提供资产的 .hex 文件。 此处提供介绍如何使用该 shell 脚本的教程:

<a href="https://github.com/intel-iot-devkit/how-to-code-samples/blob/master/doc…; rel="nofollow">how-to-run-the-shellscript.md</a>

<strong><font size="5">设置温度</font></strong>

使用该示例程序运行时英特尔® Edison 开发板显示的单页 web 界面设置目标温度。

<center><img src="http://intel.eetrend.com/files/2016-06/wen_zhang_/100001763-4809-113.pn…; alt=""></center>

<br>该 Web 服务器运行在端口 3000 上,因此,如果英特尔® Edison 开发板连接至 192.168.1.13 上 的Wi-Fi*,您在同一网络上时浏览的地址是 http://192.168.1.13:3000。</br>

如欲获取 18 个英特尔® 物联网技术代码示例(用 C++ 编写)入门的完整列表,请参阅本篇英特尔® 开发人员专区博文 <a href="https://software.intel.com/zh-cn/blogs/18-how-to-intel-iot-code-samples…; rel="nofollow">18 个英特尔® 物联网技术代码示例入门现可在 C++ 中使用</a>。

如欲获取 18 个英特尔® 物联网技术代码示例(用 JavaScript* 编写)入门的完整列表,请参阅本篇英特尔® 开发人员专区博文 <a href="https://software.intel.com/zh-cn/blogs/2015/11/04/announcing-18-new-how…; rel="nofollow">发布 18 个英特尔® 物联网技术代码示例入门 </a> 。

有关该代码示例的更多详情,请访问 <a href="https://github.com/intel-iot-devkit/how-to-code-samples&quot; rel="nofollow">GitHub*</a>。

文章来源:<a href="https://software.intel.com/zh-cn/articles/how-to-intel-iot-code-samples…;