物联网产品开发之路:如何构建智能自动售货机

物联网 (IoT) 产品开发之路是商用物联网解决方案开发系列的一部分。该系列涵盖初步概念阶段、原型构建阶段和产品改进阶段,旨在开发切实可行的产品。该项目采用 Grove* 商用物联网开发人员套件,以及基于英特尔® 下一代计算设备 (NUC) 套件 DE3815TYKHE 小外形电脑和 Arduino* 101 开发板构建的原型。

本文展示了如何构建原型,以及如何使用相同的技术来部署英特尔物联网网关和工业传感器。这不需要特殊的设备或深入的专业知识,其目标是为物联网项目的原型开发阶段提供一些通用指导。

注:这一开发板在美国称为“Arduino* 101”,在其他地方称为“Genuino* 101”。在本文中称为“Arduino 101”开发板。

本文介绍了如何构建 智能自动售货机原型。 如欲了解详情,请查看 物联网产品开发之路:构建智能自动售货机

请访问 GitHub,获得该项目的最新代码示例和文档。

 

简介

完整的智能自动售货机如图 1 所示。通过该实践开发人员可以学习到如何:

图 1. 完整的智能自动售货机。
  • 连接英特尔 NUC 套件 DE3815TYKHE。
  • 使用英特尔® 物联网开发人员套件中的 MRAA 和 UPM 与 IO 和传感器库交互;该套件是一款完整的软硬件解决方案,可帮助开发人员探索物联网和实施创新项目。
  • 在英特尔® System Studio 中运行该代码示例;该工具是一个 IDE,可创建与传感器和制动器交互的应用,支持快速开发面向英特尔物联网平台的软件。
  • 使用 Microsoft Azure* 平台设置并连接至云服务,从而为解决方案的不同组件提供云分析和通信中枢。

功能

该项目支持模拟智能自动售货机的以下功能::

  • 贩卖多种商品
  • 跟踪售货机内的产品存货情况
  • 库存水平低于预设的阈值以下时发送告警
  • 确定电源启动和故障
  • 售货机门打开时发送通知
  • 显示线圈状态
  • 监控机器内部温度并发送告警
  • 提供日志记录历史维护、库存和相关事件
  • 提供用于购买产品的配套应用

 

 

工作原理

该智能自动售货机原型使用传感器来触发各种不同的操作:

  • 按钮模拟从售货机选择指定产品
  • 步进电机分发产品
  • 红色和绿色 LED 分别代表故障和 OK 状态
  • 温度传感器监控售货机内部温度
  • LCD 显示售货机状态

所有数据流均通过作为媒介的云服务形成。例如,如果客户使用移动应用选择一款产品,相关信息便会传送至云端以及售货机本身。借助这种方法,便可在云端控制存货水平。

同样,与产品、定价和维护事件相关的数据在云端集中管理,这有助于进行全面的趋势分析和报告。例如,服务告警可以发送至服务人员,而且管理应用可得到更新以便进行追踪。请注意,虽然智能自动售货机原型在设计的时候考虑了上述功能,但在此次演示中并未实施。

设置英特尔® NUC 套件 DE3815TYKHE

本节将指导如何在 NUC 上安装英特尔® 物联网网关软件套件。

注:如果您具备 Grove 商用物联网开发人员套件,那么 NUC 上便已经预装了英特尔物联网网关软件套件。

  1. 如果没有帐号,需要在英特尔® 物联网平台市场上创建一个。
  2. 下载英特尔物联网网关软件套件,按照电子邮件中的说明下载映像文件。
  3. 解压该存档文件,然后将 .img 文件写入 4GB U 盘:

    在 Microsoft Windows* 上可以使用类似 Win32 Disk Imager* 的工具:https://sourceforge.net/projects/win32diskimager
    在 Linux* 上使用sudo dd if=GatewayOS.img of=/dev/sdX bs=4M; sync,其中 sdX 表示 U 盘。

  4. 将 U 盘从系统上拔出,然后插入包含显示器、键盘和电源线的英特尔 NUC。
  5. 打开 NUC,然后在启动时按 F2 进入 BIOS。
  6. 如果要通过 U 盘启动:

    a. 在 Advanced 菜单选择 Boot
    b. 在 Boot ConfigurationOS Selection 下,选择 Linux
    c. 在 Boot Devices 下,确保 选中 USB 框。
    d. 保存更改并重启。
    e. 按 F10 进入启动选择菜单,然后选择 U 盘。

  7. 使用 root:root 登录系统。
  8. 使用下面的命令在本地存储上安装 Wind River Linux:
    ~# deploytool -d /dev/mmcblk0 --lvm 0 --reset-media –F

    注:由于本地存储应用容量有限,不建议设置恢复区。重新使用 U 盘,恢复至出厂映像。

  9. 使用 poweroff 命令关闭网关。然后,拔下 U 盘并重新打开网关,以便从本地存储设备启动。
  10. 插入以太网线缆,然后使用 ifconfig eth0 命令查找分配给网关的 IP 地址(假设您已完成相应网络设置)。
    如果所在的网络与网关相同,您可以通过开发设备远程使用网关。如果想使用英特尔® 物联网网关开发中心(而非命令行),可在浏览器中输入 IP 地址,并进行首次设置。
  11. 使用英特尔物联网网关开发中心将 MRAAUPM 库更新至官方库(https://01.org)发布的最新版本。输入以下命令,也可达到相同的效果:
     ~# smart update
     ~# smart upgrade
     ~# smart install upm
  12. 使用以下命令安装 Java* 8 支持(执行前面的命令后)。这将移除预编译的 OpenJDK* 7,并安装 OpenJDK* 8,后者支持 MRAA 和 UPM:
    ~# smart remove openjdk-bin
    ~# smart install openjdk-8-jre
  13. 插入 Arduino 101 开发板,然后重启 NUC。将 Firmata* 方案闪存至 Arduino 101,这样就可以与 MRAA 和 UPM 结合使用了。

设置 Arduino 101 开发板

有关 Arduino* 101 开发板的设置说明,请访问 https://www.arduino.cc/en/Guide/Arduino101

连接其他组件

本节将介绍如何连接 NUC 和其他硬件组件。表 1 汇总了用于该原型的材料清单,图 2 所示为如何安装这些组件。

表 1. 智能自动售货机原型组件。

 

组件

详细信息

基本系统

英特尔® NUC 套件 DE3815TYKHE

http://www.intel.com/content/www/cn/zh/support/boards-and-kits/intel-nuc-kits/intel-nuc-kit-de3815tykhe.html

Arduino* 101 开发板

https://www.arduino.cc/en/Main/ArduinoBoard101

USB Type A 转 Type B 线缆

用于将 Arduino 101 开发板连接至 NUC

Grove* Starter Kit Plus IoT Edition 的组件

基座护罩 V2

http://www.seeedstudio.com/depot/Base-Shield-V2-p-1378.html

带有驱动程序的齿轮步进电机

http://www.seeedstudio.com/depot/Gear-Stepper-Motor-with-Driver-p-1685.html

按钮模块

http://www.seeedstudio.com/depot/Grove-Button-p-766.html

温度传感器模块

http://www.seeedstudio.com/depot/Grove-Temperature-Sensor-p-774.html

绿色 LED

http://www.seeedstudio.com/depot/Grove-Green-LED-p-1144.html

红色 LED

http://www.seeedstudio.com/depot/Grove-Red-LED-p-1142.html

触摸装置

http://www.seeedstudio.com/depot/Grove-Touch-Sensor-p-747.html

带有 RGB 背光模块的 LCD

http://www.seeedstudio.com/depot/Grove-LCD-RGB-Backlight-p-1643.html

 
图 2.智能自动售货机概念验证原型。

 

安装英特尔® System Studio

英特尔® System Studio 是 Eclipse* 的一款插件,支持您在英特尔 NUC 或其他兼容板上连接、更新和编程物联网项目。它能够帮助您使用 C 和 C++ 语言编写应用,并提供专门针对英特尔®物联网开发人员套件设计的两个库:

  • MRAA 是一种低级别库,可将输入/输出接口转换成针脚,以供物联网开发板使用。

  • UPM 是一种传感器库,支持使用 MRAA 的多种语言。UPM 使您能够针对自己的项目轻松的使用或构建传感器表示。

在 Windows* 上安装

Note: 7-Zip* 支持超长路径名称(压缩文件中的某些文件经常拥有超长的路径名称),因此只有使用7-Zip 软件才能解压该安装程序文件。

  1. 从以下网址下载 7-Zip 软件:http://www.7-zip.org/download.html
  2. 右击下载的可执行文件,并选择 以管理员身份运行
  3. 点击 下一步 并按照安装向导中的说明安装应用。
  4. 使用 7-zip,解压安装程序文件。

警告:确保将安装程序文件解压至路径名称中不包含空格的文件夹位置。例如,文件夹 C:\My Documents\ISS 不符合要求;C:\Document\ISS 符合要求。

在 Linux* 上安装

  1. 下载 英特尔® System Studio for Linux*安装程序文件。
  2. 打开一个新的终端窗口。
  3. 导航至包含安装程序文件的目录。
  4. 输入命令:tar -jxvf file 解压 tar.bz2 文件,其中 file 代表安装程序文件的名称。例如 tar -jxvf iss-iot-linux.tar.bz2。使用的命令可能会略有不同,具体取决于安装程序文件的名称。

在 Mac* OS X* 上安装

  1. 下载英特尔 System Studio for Mac* OS X* 安装程序文件。
  2. 打开一个新的终端窗口。
  3. 导航至包含安装程序文件的目录。
  4. 输入命令:tar -jxvf file 解压 tar.bz2 文件,其中 file 代表安装程序文件的名称。例如 tar -jxvf iss-iot-mac.tar.bz2。使用的命令可能会略有不同,具体取决于安装程序文件的名称。

注:如果您看到消息提示 "iss-iot-launcher can’t be opened because it is from an unidentified developer",请右击文件并选择 Open with。选择 Terminal应用。在打开的对话框中,单击 Open

启动英特尔® System Studio

  1. 导航至包含安装程序文件的目录。
  2. 启动英特尔 System Studio:
  • 在 Windows* 中,双击 iss-iot-launcher.bat 启动英特尔 System Studio。
  • 在 Linux* 中,运行 iss-iot-launcher.sh
  • 在 Mac* OS X* 中,运行 iss-iot-launcher

注:使用 iss-iot-launcher文件(而不是英特尔® System Studio 可执行文件)将启动英特尔 System Studio 以及所有必要的环境设置。每次可使用 iss-iot-launcher 文件来启动英特尔® System Studio。

安装 Microsoft* Azure* 组件

Azure* 云能够在网络中维护智能自动售货机的产品信息,追踪售货机收到的事件,而且未来还能够分析数据,并根据不同的状况触发响应措施(例如库存较低或者机器故障)。

实施 Azure* C++ API

使用 C++ API 连接至 Azure* 需要编译以下所有库,以便构建 Casablanca 项目:

在 Azure* 中创建 web 应用

编译 Boost

wget -O  boost_1_58_0.tar.gz  ‘http://downloads.sourceforge.net/project/boost/boost/1.58.0/boost_1_58_0.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fboost%2Ffiles%2Fboost%2F1.58.0%2F&ts=1438814166&use_mirror=iweb’
tar czvf boost_1_58_0.tar.gz
cd boost_1_58_0
./bootstrap.sh
./b2

编译 Casablanca

克隆 Casablanca:

git clone https://git.codeplex.com/casablanca

https://github.com/Microsoft/cpprestsdk

编译 Casablanca:

https://casablanca.codeplex.com/wikipage?title=Setup%20and%20Build%20on%20Linux&referringTitle=Documentation 
git clone https://github.com/Azure/azure-storage-cpp.git

https://github.com/Azure/azure-storage-cpp.git

SQLite3 安装和表初始化

SQLite3 IPK 软件包安装:

root@galileo:~# opkg install sqlite3
Installing sqlite3 (3:3.8.6.0-r0.0) on root.
Downloading http://iotdk.intel.com/repos/1.5/iotdk/i586/sqlite3_3.8.6.0-r0.0_i586.ipk.
Configuring sqlite3.

产品数据库创建和初始化:

root@galileo:~# sqlite3 Vending_Prototype/products.sqlite3
SQLite version 3.8.6 2014-08-15 11:46:33
Enter ".help" for usage hints.
sqlite> create table products(name varchar(255) primary key, price smallint, quantity smallint);
sqlite> insert into products values('Coke',150,2);
sqlite> insert into products values('Pepsi',130,3);

事件数据库创建和初始化:

root@galileo:~# sqlite3 Vending_Prototype/events.sqlite3
SQLite version 3.8.6 2014-08-15 11:46:33
Enter ".help" for usage hints.
sqlite>
sqlite> create table events(time INT, type smallint, key varchar(255), value smallint);

SQLite3 Node.js 软件包安装:

npm install sqlite3

Azure* 安装

npm install azure-storage

结论

正如本文所介绍的,物联网开发人员可通过网关、管理、移动和云软件功能来构建原型,而且成本较低,不需要专业的技能。借助Grove* 商用物联网开发人员套件和 Arduino* 101 开发板,项目团队能够快速进行原型开发,以便测试物联网概念的可行性,进而为物联网产品开发之路提供有力的支持。

请访问 GitHub,获得该项目的最新代码示例和文档。

不得将本文件用于关于本文中所描述的英特尔产品的任何侵权行为或其他法律解释。您同意授权英特尔随后起草的任何专利声明的非排他性、免版税许可,包括本文公开的主题。
 
本文件不构成对任何知识产权的授权,包括明示的、暗示的,也无论是基于禁止反言的原则或其他。
 
所述产品可能包含设计缺陷或错误(已在勘误表中注明),这可能会使产品偏离已经发布的技术规范。这些缺陷或失误已收录于勘误表中,可索取获得。

为方便客户和合作伙伴,英特尔基于“按原样”原则提供相关信息,而且概不承担任何责任。英特尔明确拒绝所有明确或隐含的担保,包括但不限于对于适销性、特定用途适用性和不侵犯任何权利的隐含担保,以及任何对于履约习惯、交易习惯或贸易惯例的担保。
 
英特尔、Intel 标识、英特尔® 物联网网关、英特尔® 物联网网关软件条件、英特尔® NUC、英特尔® 下一代计算设备 (NUC) 套件 DE3815TYKHE、英特尔® 物联网平台市场和英特尔® System Studio 是英特尔公司在美国和其他国家(地区)的商标。
其他的名称和品牌可能是其他所有者的资产
 
英特尔版权提示:“© 英特尔公司”

 

For more complete information about compiler optimizations, see our Optimization Notice.