Intel® IoT 技术代码示例:C++ 中的访问控制
此访问控制系统应用程序是使用 Intel® 物联网开发者套件、Intel® Edison 板、云平台、API 和其他技术的 Intel® 物联网技术操作指南代码示例系列的一部分。
获取新的 Intel® 物联网开发者套件,这是一个完整的硬件和软件解决方案,让开发者能够使用 Intel® Galileo 和 Intel® Edison 板创建令人兴奋的新解决方案。请访问 Intel® 物联网开发者中心。
引言
此访问控制系统应用程序是使用以下技术的 Intel® 物联网技术操作指南代码示例系列的一部分
Intel® 物联网开发者套件、Intel® Edison 板、云平台、API 和其他技术。
通过此练习,开发人员将学习如何:
- 连接英特尔® Edison 开发板,这是一个专为物联网和可穿戴计算产品原型设计和生产而设计的计算平台。
- 使用英特尔® 物联网开发套件中的 MRAA 和 UPM 接口英特尔® Edison 开发板的 IO 和传感器库,这是一个完整的软硬件解决方案,可帮助开发人员探索物联网并实施创新项目。
- 在 Intel® System Studio IoT Edition(用于 C/C++ 和 Java 开发的 Eclipse* IDE)中运行这些代码示例,用于创建与传感器和执行器交互的应用程序,从而快速启动 Intel® Edison 或 Intel® Galileo 板的软件开发。
- 设置一个 Web 应用程序服务器,让用户输入访问代码以禁用警报系统,并使用 Microsoft 的 Azure* Redis Cache、IBM Bluemix* 的 Redis Store 或 Amazon Web Services* (AWS) 的 ElastiCache*(使用 Redis*)存储此警报数据,这些是用于连接物联网解决方案的各种云服务,包括数据分析、机器学习和各种生产力工具,以简化将传感器连接到云并将您的物联网项目快速启动并运行的过程。
它是什么
使用 Intel® Edison 板,本项目向您展示如何创建一个智能访问控制系统,该系统
- 监控运动传感器以检测何时有人进入需要授权的区域;
- 可以通过内置 Web 界面使用您的手机进行访问以禁用警报;
- 使用基于云的存储跟踪访问数据。
工作原理
此访问控制系统提供以下用户流程:
- PIR 运动传感器检测运动。
- 用户触发运动检测器,然后在 30 秒内从浏览器输入正确的代码。
- 如果用户未及时输入代码,警报将响起。
- 如果用户输入了正确的代码,系统将等待 2 分钟以允许用户通过。
此外,还会记录各种事件(motion-detected
、invalid-code
等)。
可选地,可以使用您自己的 Microsoft Azure、IBM Bluemix 或 AWS 帐户中运行的 Intel IoT Examples Datastore 来存储所有数据。
硬件要求
Grove* 交通与安全套件,包含
- 带有 Arduino* 扩展板的英特尔® Edison 开发板
- Grove* 基座扩展板 V2
- Grove* PIR 运动传感器
- Grove* RGB LCD
软件要求
- Intel System Studio IoT Edition(用于 C/C++ 和 Java 开发的 Eclipse IDE)
- Microsoft Azure、IBM Bluemix 或 AWS 帐户
如何设置
首先,使用 Git* 将 Intel® 物联网技术操作指南代码示例 存储库克隆到您的计算机,如下所示:
$ 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 文件后,解压缩它,然后使用此示例目录中的文件。
将程序添加到 Eclipse
在 Eclipse* 中,选择导入向导,将现有项目导入工作区,如下所示:
- 从主菜单中,选择文件 > 导入。
- 导入向导对话框打开。选择通用 > 现有项目到工作区,然后点击下一步。
- 点击选择根目录,然后点击相关的浏览按钮,找到包含项目文件的目录。
- 在项目下,选择包含您要导入的项目文件的目录,然后点击确定,再点击完成,将文件导入 Eclipse*。
- 您的主 .cpp 程序现在显示在工作区的src文件夹下。
连接 Grove 传感器
您需要将 Grove Base Shield V2 连接到 Arduino 兼容的 breakout 板,以便将所有 Grove 设备插入 Grove Base Shield V2。请确保将 Grove* Base Shield V2 上的微型 VCC 开关设置为 5V。
- 将 Grove*= 电缆的一端插入 Grove* PIR 运动传感器,另一端连接到 Grove* Base Shield V2 上的 D4 端口。
- 将 Grove* 电缆的一端插入 Grove* RGB LCD,另一端连接到 Grove* Base Shield V2 上的任何 I2C 端口。
英特尔® Edison 开发板设置
此示例使用 restclient-cpp 库执行对远程数据服务器的 REST 调用。代码可以在 lib 目录中找到。restclient-cpp 库需要 libcurl 包,该包已在 Intel® Edison 板上默认安装。
此示例还使用 Crow* Web 微框架提供了一个简单易用但功能强大的 Web 服务器。Crow 库需要 libboost 包安装在 Intel® Edison 板上,还需要将必要的 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
复制库
您需要将库和 include 文件从开发板复制到运行 Eclipse 的计算机上,以便 Cross G++ Compiler 和 Cross G++ Linker 能够找到它们。最简单的方法是使用您的计算机(而不是 Intel® 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
更改为与您安装 Intel IoT Developer Kit 的计算机上的位置匹配。
在 Windows* 上复制库
我们有一个有用的链接来设置它,请看这里:
注意:您需要运行开发板上的 configure_edison --password
命令来启用 SSH。设置密码后,请务必记下它。您只需要执行一次此操作,并且在 Intel® Edison 板重启时也会生效。
数据存储服务器设置
或者,您可以将此示例程序生成的数据存储在后端数据库中,该数据库使用 Microsoft* Azure*、IBM* Bluemix* 或 AWS*,以及 Node.js* 和 Redis* 数据存储进行部署。
将 Intel® Edison 板连接到 Eclipse
- 在左下角,右键点击目标 SSH 连接选项卡上的任意位置,然后选择新建 > 连接。
- 出现英特尔® 物联网目标连接窗口。在过滤器字段中,输入您的开发板名称。
- 在选择一个找到的连接列表中,选择您的设备名称,然后点击确定。
- 在目标 SSH 连接选项卡上,右键点击您的设备,然后选择连接。
如果提示输入用户名和密码,则用户名为 root,密码是您在配置英特尔® Edison 开发板时指定的密码。
使用云服务器运行示例
要使用可选的后端数据存储运行示例,您需要设置 SERVER
和 AUTH_TOKEN
环境变量。您可以在 Eclipse* 中完成此操作,如下所示:
- 从运行菜单中,选择运行配置。
显示运行配置对话框。 - 在C/C++ 远程应用程序下,点击门铃。
这会显示应用程序的信息。 -
在 Commands to execute before application 字段中,添加环境变量,使用与您自己的设置对应的服务器和身份验证令牌,如下例所示
chmod 755 /tmp/access-control; export SERVER="http://intel-examples.azurewebsites.net/logger/access-control"; export AUTH_TOKEN="YOURTOKEN"
-
点击应用保存您的新环境变量。
现在,当您使用 Run 按钮运行程序时,它应该能够直接从
Intel® Edison 板调用您的服务器来保存数据。
在英特尔® Edison 开发板上运行代码
当您准备好运行示例时,请单击 Eclipse 顶部菜单栏中的 Run。
这将使用 Cross G++ Compiler 编译程序,使用 Cross G++ Linker 链接程序,将二进制文件传输到英特尔® Edison 开发板,然后在开发板本身上执行它。
运行程序后,您应该会看到与下图类似的输出。
重新生成 HTML 和 CSS
如果您对 index.html 或 styles.css 文件进行任何更改,您需要重新生成 .hex 文件,该文件用于通过内置的 Crow* Web 服务器提供资源。 详细了解如何使用 shell 脚本。
禁用警报
警报使用一个单页 Web 界面禁用,该界面在示例程序运行时直接从 Intel® Edison 板提供。
Web 服务器在端口 3000
上运行,因此如果英特尔® Edison 开发板通过 Wi-Fi* 连接到 192.168.1.13
,那么如果您在同一网络上,要浏览的地址是 http://192.168.1.13:3000
。
要查看 C++ 中 18 个 Intel IoT 技术操作指南代码示例的完整列表,请阅读 Intel® Developer Zone 上的 18 个 Intel® IoT® 技术代码示例现已推出 C++ 版本 博文。
要查看 JavaScript* 中 18 个 Intel IoT 技术操作指南代码示例的完整列表,请阅读 Intel® Developer Zone 上的 宣布推出 18 个新的 Intel® 物联网技术操作指南代码示例 博文。
有关此代码示例的更多详细信息,请访问GitHub*。