在 Intel Edison 开发板上,利用 JavaScript 打造聪明的桌上型时钟



为什么我需要更聪明的时钟……

我常会设定闹铃提醒行事历的开会通知,但当计算机屏幕桌面角落跳出那小小的「某某会议再过 15 分钟就要开始」的通知时,我心里就会想「15 分钟够让我多做一件事了」,然后按下「延后」或「关闭」,继续工作。过20 分钟后才猛然醒悟:我迟到了!

而有时候,我会一直记挂着接下来要开会。我每一分钟都一下看时钟、一下看会议开始的时间,心里盘算着还有多久就要开会... 担心开会迟到。这一直占据着我的心思,根本做不了任何工作。

我可以在四周摆放好几个时钟,但大多数的时钟都是「笨」东西,只能显示时间给你看。但是,运用一点物联网神奇的魔力,笨东西也有可能变聪明。

我可以怎么做呢?

让我们想象一下:有个智能型时钟,会自动检查行事历,并且告诉你下一个行程。

时钟知道某个活动即将到来,这时候,就会自动提供距离活动还有多久的关系型倒数计时(例如「距离开会时间还有45分钟」,而不是「会议在下午4时开始」。随着活动开始时间越来越近,时钟会改变颜色,从温和提醒变成急迫警示,催促您马上动身。(例如黄色表示「注意」、橙色表示「动作快」,而红色表示「危险」。)

嗯,不要再想了,立刻动手做!

在这篇 Instructables 文章中,我会说明如何将把Intel Edison 与 Grove LCD变成智能型桌钟,能够使用Google Calendar API撷取行事历的信息。这个智能型桌钟应用程序的编写,属于 NodeJS 应用程序(在 Github这里的JavaScript 程序代码),使用Intel XDK 的 IoT 版本上传档案,以及执行物联网应用程序。

步骤 1:收集需要的材料


要打造内含 Intel 的智能型闹钟,你需要:

• Intel Edison开发板模块,连接到 Arduino 扩充板

• 专用的电源。
o 我会使用 12V 直流电源,直接插入墙上的插座。

• Grove Starter Kit for Arduino(Grove 的 Arduino 入门套件)或 Grove Starter Kit Plus – Intel IoT Edition for Intel Galileo Gen 2 and Edison(Grove 入门套件升级版:适用于 Intel Galileo 第 2 代与 Edison 的 Intel IoT 版本)都有提供:
o Grove Base Shield v2 for Arduino(搭配 Arduino 的扩充板)
o Grove LCD with RGB backlight(RGB 背光的液晶显示器)
o 1 条 Grove 组件 4 针连接线

Intel Edison 设计程序,你需要:

• 计算机
o 任何主流操作系统(Mac、Windows、Linux)都行,但我会使用 Mac 做示范。

• 计算机上已经安装了Intel XDK 的 IoT 版本集成开发环境 (IDE)。
o 我使用 Intel XDK,因为这款应用程序的程序代码是以 JavaScript 撰写,用于 NodeJS 环境。

• 一条 micro-USB 传输线。
o 在执行 Shell 命令,以及直接在 Intel Edison 设定 WiFi 的时候会用到。(注:如果您的 Intel Edison 已经设定 Wi-Fi 联机,就不需要这条额外的传输线。)

(*注:本项目的程序代码也适用于 Intel Galileo。如果使用 Intel Galileo,可以透过有线网络或 WiFi 无线网卡进行联机。)

步骤 2:设定 Edison 的 Wi-Fi 联机


Intel Edison 需要连接到无线网络,才可从 Intel XDK 透过无线网络进行程序设计,以及呼叫 Google Calendar API【使用行事历】。

如果尚未设定 Intel Edison 连接到无线路由器,请先执行下列步骤:

1、取得 Intel Edison 的 Shell 权限

图文说明英文文件1:https://software.intel.com/en-us/setting-up-serial-terminal-on-system-wi...

图文说明英文文件2: https://software.intel.com/en-us/setting-up-serial-terminal-on-system-wi...

2、执行「configure_edison –wifi」命令

图文说明英文文件: https://software.intel.com/en-us/articles/intel-edison-getting-started-wifi

步骤 3:安装 Intel XDK IoT Edition


如果还没有安装 Intel XDK IoT Edition,请先从https://software.intel.com/en-us/html5/xdk-iot下载并安装这套集成开发环境。

针对安装 Intel XDK,如果还需要进一步的协助,请参考以下安装指南:

• 影片讲解:https://software.intel.com/en-us/videos/setting-up-the-intel-xdk-iot-edi...

• 文件数据:https://software.intel.com/en-us/articles/install-the-intel-xdk-iot-edition

若要确认 Intel XDK 是否可以在 Intel Edison 开发板实际执行,请执行控制板载 LED 闪烁的范例项目

• 影片讲解:https://software.intel.com/en-us/videos/setting-up-the-intel-xdk-iot-edi...

• 文件说明:https://software.intel.com/en-us/blinking-an-led-with-intel-xdk-iot-edition

步骤 4:将 Grove Shield 组装到 Intel Edison 的 Arduino 扩充板上

1、拔除 Arduino 扩充板所有的电源连接。

2、将 Grove Base Shield 安装到 Intel Edison 开发板上,请对准所有的针脚,并且确实将 Shield 板插进扩充板的接头。

3、将 Grove(4 针脚)线的一端连接到 Grove LCD。

4、将 Grove 线的另一端连接到 Grove Base Shield,请注意,必须连接到有「I2C」标示的插槽。

5、重新接通开发板的电源。

步骤 5:启用 Google Calendar API


要了解如何设定 Google Calendar API,请参考 Google Developers 网站上的 Node.js Quickstart指南:https://developers.google.com/google-apps/calendar/quickstart/node

完成这个「快速入门指南」之后,您应该会得到:

• 一个 Google Calendar API 项目(也许可以叫做「smart-clock」),已经在 Google Developer Console启用。

• 一个client_secret.json的档案。

• 一个 NodeJS 脚本文件,可将接下来的 10 个行事历事件打印出来,送到「开发人员控制台」。

步骤 6:将 Google Calendar API 的 Node Quickstart 程序代码移植到 Edison

到 Intel Edison,只需编辑几个小地方。

1、在 Intel XDK 的 IoT 版本:开始新项目 >汇入您的 Node.js 专案

• 使用先前步骤建立的文件夹(里面含有 quickstart.js 的文件夹)。

• 提供项目名称,例如「smart-clock」。

2、建立package.json档案。

• 加入 Github 这段程序代码:https://github.com/pearlchen/iot-smart-desk-clock/blob/master/iot-versio...

3、删除项目文件夹中的node_modules文件夹(及其中的内容)。

• 因为这个文件夹太大了,如果让 Intel XDK 透过无线方式复制到开发板,还没完成就会发生逾时。在后面的步骤,我们会将 Node 链接库直接安装到开发板上。

4、建立main.js档案。

• 将先前在 quickstart.js 编写的所有程序代码复制到 main.js。

• 如果您跳过了前面的步骤,请使用这段程序代码:https://github.com/pearlchen/iot-smart-desk-clock/blob/master/desktop-ve...

5、请确实储存刚才建立的任何档案。

6、如果还没有连接开发板,请透过「IoT Device」下拉式清单连接到开发板。

7、单击底部工具栏的「Manage your daemon/IoT device」按钮,开始管理物联网装置。

• 单击「Sync PC time w/clock on target device」,同步处理计算机与目标装置的时间

• 选取「Run npm install directly on IoT Device」,直接在物联网装置执行 npm 安装(这将会使用先前在 package.json 定义的依存关系)

8、单击底部工具栏的「Upload」按钮,开始上传。

9、单击底部工具栏的「Build」按钮,它在「Upload」旁边。

10、使用 SSH Terminal卷标页(透过无线网络)或Serial Terminal卷标页(透过 micro-USB 传输线)来连接开发板。

11、输入:「cd /node_app_slot」,这是 Intel XDK 复制任何项目文件的地方。

12、执行您自己的 main.js,也就是这里的脚本文件:「node main.js」

13、依提示说明取得 Token 认证,再传递回去终端机命令行。

14、如果看到了您接下来 10 项行事历事件的输出结果,就表示 Intel Edison 顺利透过无线网络与 Google Calendar API 通讯了!

15、现在,尝试从 Intel XDK 执行 Node 应用程序,取代执行「node main.js」。单击底部工具栏上的「Run」按钮,开始执行。

16、你会看到错误讯息:「Error loading client secret file」,表示加载档案发生错误,这是因为 Intel XDK 在项目文件夹的范围之外执行应用程序。

17、对 main.js 做以下编辑,储存档案,再按一次「Run」按钮,应该就会看到你接下来的 10 项行事历事件。

恭喜!

下一步,就是加入 LCD 屏幕的支持。

步骤 7:汇入 MRAA 与 UPM LCD 链接库

MRAA是某种低阶 C++ 链接库,促成 Edison 的 Linux(软件)端代表 Edison 的通用输入输出针脚(硬件)端进行通讯。Intel 维护的 mraa 链接库放在 Github 这里:https://github.com/intel-iot-devkit/mraa

例如,要点亮连接到 Pin 13 的 LED,就像这样使用 MRAA:

UPM是比较高阶的链接库,使用 MRAA 来简化对于现成电子组件的操控,尤其是有些组件需要的不只是简单的开关命令,像是上面 LED 的例子。要让 LCD 屏幕显示文字,就需要发送某些非常精确计时的电气信号,所以要有额外的动作,装进个别的 UPM 链接库中。Intel 维护的 UPM 链接库放在 Github 这里:https://github.com/intel-iot-devkit/upm

针对 Grove LCD 组件 (Jhd1313m1),仍然要像上面那样包含 MRAA 链接库,此外还要使用个别的 UPM I2C LCD 链接库,像下面这样:

如果需要更多其他的传感器范例程序代码,可以透过 Github 的 UPM 范例文件夹或是Intel IoT 的传感器网页寻找。
所以,在 main.js 档案的最上方,需要有这个:

步骤 8:加入我的 LCD 文字辅助链接库

用 JavaScript 的 UPM LCD 链接库其实相当简陋,只会提供几种命令,像是将文字写到屏幕上、清除屏幕,以及改变 RGB 背光颜色。

如果尝试写入超过 16 个字符长度的文字,内容就会截断(超出屏幕显示范围)。

在智能型闹钟的例子里,行事历事件的名称很可能会超过 16 个字符,所以我写了一个 Node 模块,倘若文字超出一行的范围,就会左右卷动。

1、从这里下载:https://github.com/pearlchen/iot-smart-desk-clock/blob/master/iot-versio... 这段句柄。

2、将 lcd_text_helper.js 放进您的项目目录,与 main.js 放在一起。

3、在 main.js 中,加入这个部分,与 UPM LCD 链接库放在一起:

4、像这样使用:

现在,有了基本(但看起来相当不错)的功能,可以将文字输出到 LCD 屏幕,我们再来将一些行事历的逻辑加到程序代码中。

步骤 9:加入最后的行事历事件逻辑

看一看在 Github 这里 main.js 最终的程序代码:https://github.com/pearlchen/iot-smart-desk-clock/blob/master/iot-versio...

我在最终版本做了一件事,就是将 Google Calendar API 的东西从 main.js 挪出来,放进独立的 Node 模块,叫做 GoogleCalendarEventFetcher。

1、从这里下载:https://github.com/pearlchen/iot-smart-desk-clock/blob/master/iot-versio...

2、将 google_calendar_event_fetcher.js 放进您的项目目录,与 main.js 放在一起。

3、在 main.js 中,加入这个部分,与 LCD 文字辅助功能放在一起。

4、像这样使用:

步骤 10:程序代码总整理

如果看到步骤 7 或步骤 8 的程序代码就晕头转向了:别担心!

您可以从 Github 下载整个智能型桌钟的程序代码,放在「iot-version」文件夹里面:https://github.com/pearlchen/iot-smart-desk-clock/tree/master/iot-version

请记得,需要将你自己的 client_secret.json加进来,这应该在「步骤 5」的时候就已经有了。
将这些档案放进您的 Intel XDK 项目目录,然后使用 Intel XDK:

1、单击底部工具栏的「Upload」按钮,开始上传。

2、单击底部工具栏的「Run」,开始执行。

3、检查 Intel XDK 控制台是否有任何错误。

4、检查时钟的 LCD 屏幕!

步骤 11:打造桌钟的外壳


为了让 DIY 的智慧桌钟看起来有一点专业的感觉,就要制作一个外壳,把 Intel Edison 包在里面,并且托住 LCD 屏幕,转到您坐在桌前可以轻松看到的角度。

要为聪明的桌钟制作一个简单的纸板外壳,您需要:

• 纸板,或是很硬的卡纸

• 胶带、胶水

• 美工刀、剪刀

• 直尺

• 丁字尺(并非必要,但很好用)

• 装饰用的小物

如果想要额外的质感,可以考虑 3D 打印或是雷射切割桌钟的外壳。目前,我暂时用纸板就行了,因为我还会继续改善,增加功能。这东西根本就是用胶带黏起来的,这样说并不夸张。

我也加了一个 Adafruit NeoPixel Ring 彩色灯环当作装饰。最终,我会把这个连接到 Intel Edison,但那是日后的事了。

步骤 12:把时钟放在桌上

完成了!

使用 Intel XDK 编写 NodeJS 物联网应用程序的好处,就是位于 /node_app_slot 的应用程序可以自动设定,在 Intel Edison 开机的时候就会自动启动。

因此,这就表示,只需要经由电源插孔,给时钟稳定的电源供应,您的时钟就会立即连接到 Google Calendar API,随时为你留意行程安排!

文章来源:英特尔quark开发者俱乐部

Intel Edison 开发板详情请点击这里

最新文章