别让小朋友沈溺于电动,教你动手做IoT互动式游戏

多数人对 Intel® Edison 模组的第一印象都是安装在 Arduino 扩充板的尺寸看起来实在大到不适合行动装置使用。因此许多开发者会认为 Edison 对于小型设备或穿戴式装置并不实用。

不过如照片所示,Intel® Edison 模组其实不佔空间,但使用上并不容易,因为用来连接週边设备的针脚太小了:Intel Edison 开发板上的 Hirose 接头有 70 个针脚,而长度仅约 1 公分。解决此问题的办法之一便是使用 Seeed 出品的 Xadow 穿戴式套件 Intel® Edison 版。此套件所囊括的配接器和小型感应器,可满足小型穿戴式装置的所有必备需求。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

套件内含不同功能的小型扩充板,所有的扩充板均是由柔性扁平排线连接。可用菊轮鍊方式来连接扩充板,为装置提供必要的功能。

以下为套件的内容物:

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

本文将在<穿戴式套件组件>一节介绍各项组件。

o 电池
o Xadow – Edison:插入 Intel® Edison 开发板的主要接头。
o Xadow – Edison Programmer::用 USB 将 Intel® Edison 开发板与电脑连接的模组。
o Xadow – Edison SD:用来连接 SD 记忆卡的模组。
o Xadow – OLED:128 x 64 黑白 OLED 显示器。
o Xadow – Buzzer
o Xadow – Vibration Motor
o Xadow – Q Touch Sensor:触控按钮
o Xadow – NFC:NFC 读取器。
o NFC Tags – 三个 NFC 标籤 。
o Xadow – 3Axis Accelerometer
o Xadow – Barometer BMP 180:气压计与温度计。
o Digital RGB LED Flexi-Strip:此款灯条配备五个可控制的 RGB LED 灯。
o FFC 线材套件
o 电源线

说明事项

在开始说明流程之前,我想先谈谈进行专案时所发现的特点和问题,以及相应的解决方法。首先,我强烈建议更新开发板韧体。
如需确认当前版本,可使用以下指令:

在撰写本文时,开发板最新的韧体版本为 159。
同样也建议更新所有已安装的程式库。更新作业需要网际网路连线。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

本文中所有的程式码範例都适用于 Arduino* IDE。Seeed 套件的开发人员并未提供其他 IDE 範本。

我试过以 IoT 版本的 Intel® XDK 和 С++ 来使用开发版,不过无法运作。一项可能的原因是开发板电路不同于标準 Arduino 扩充版的电路。I2C 介面也有相同问题,加速度计的运作有时不稳定。不过在游戏设置中,加速度计在 OLED 显示器之后连接,此时运作一切正常。我无法启动气压计和温度计扩充板。

有时候开发板无法连线到 Arduino* IDE;编译和 sketch 之间的传输也可能失败。若发生这种情况,请终止开发板上执行的 sketch。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

之后请清空 /sketch 资料夹,并关闭所有在电脑上执行的 Arduino* IDE。关闭 Intel® Edison 开发板的电源 ,再按住 PWR 按钮直到 LED 亮起,将电源重新打开。

若需要在供电状态下用 Edison 开发板执行 sketch,则可建立一个档案来执行开机:建立资料夹 /etc/init.d。在资料夹中建立一个名为「automateSketch.sh」的档案,其中需包含:

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

建立并储存好 automateSketch.sh 之后,使档案成为可执行:

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

然后在启动清单内加入 automateSketch.sh:

别让小朋友沈溺于电动,教你动手做IoT互动式游戏
入门介绍

应先在电脑上安装所有 Intel Edison 驱动程式。此套件与模组的一切互动都透过 Arduino IDE,请务必安装。可至 www.arduino.cc 下载。

必须连接 Xadow-Edison Programmer 模组,才能使用开发板开始作业。请注意,两个 USB 连接埠都必须插入:一个负责供电,一个负责连接 Arduino IDE 中使用 Boards Manager来选取 Intel Edison 开发板。

Edison OS 作业系统开机完毕后,请在电脑上的 Device Manager内找出虚拟连接埠的编号。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

请在 Arduino

程式库

若要与模组互动,就少不了程式库。可至 github.com/Seeed-Studio/Xadow_Edison_Demos 将程式库下载为一个 ZIP 档。很可能无法立刻安装完成整个套件,所以必须将含有必要程式库的资料夹加到 IDE 选单内。

连接模组

插入任何模组之前,请先切断 Intel Edison 开发板的电源,藉以降低组件损伤的风险。若使用热插拔模组,Sketch 将无法正确载入。

所有模组均是以柔性扁平排线连接。线材的长度和宽度各不相同,传输线的宽度应与接头相符。所有线材插入时都是蓝侧向上,针脚向下。开发板上的接头有两种类型。第一种须向上开启,如同掀盖一般。请打开接头,轻轻将传输线完全置入 ,然后关上接头。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

第二种接头类型是滑动式的夹盖,使用上较不方便。必须先从侧边撬开,然后拉出约 1 mm 的距离,一定要小心,我曾经不慎弄断一根针脚。接着稍微用点力,将传输线尽可能往里推 。然后再用点力,将接头推进去。传输线应该会牢牢固定在接头里。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

所有模组在相对的两端都有接头。所有模组和主板在某一侧均有切角。连接所有电路板时,应让切角侧朝同一方向。在下图中可看到切角侧全部朝左。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏
穿戴式套件组件

如本文开端所述,套件每一部份都可用来创造不同类型的穿戴式技术,端看结合和编程的方式。

电池

此系统的电池是标準 3.7 V 的 500 mAh 锂离子电池。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏
Xadow -- Edison
别让小朋友沈溺于电动,教你动手做IoT互动式游戏

这是用来连接 Edison 模组的主板,较模组本身稍大一些。若将 Edison 模组插进主板的插槽,应该能够牢牢固定,但为了保障安全,可以拿 Arduino* 模组的螺丝来安装。

主板配备电池用接头,侧边还有四个接头可供扩充板使用。上方的接头是 Edison Programmer 扩充板专用,侧面接头供感应器和致动器使用,底端接头则是给 SD 卡模组。

其上有两个按钮:PWR 与 FW_RCVR。长按 PWR 可以开/关装置 ─ 长按 9 秒关闭电源,2 秒开启电源。

电池接头旁的小 LED 灯会显示电源状态。LED 灯闪烁时,表示是经由 USB 供电。LED 灯恆亮时,即代表电池充电中。LED 灯熄灭,则表示电池已充电完毕。

只需要主板和电池,即可让 Edison 开发板开始运作。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏
Xadow -- Edison Programmer
别让小朋友沈溺于电动,教你动手做IoT互动式游戏

此扩充板是用来与电脑连线,用途包括从电脑供电以及除错功能,且配备两个 Micro USB 接头。
• UART 接头可透过 COM 埠连接电脑并供电。
• 装置/主机接头则能从 Arduino 请选择「Device 」。

Xadow -- Edison SD
别让小朋友沈溺于电动,教你动手做IoT互动式游戏

此扩充卡有一个可插入 SD 记忆卡的接头,是以最宽的传输线连接到主板底端的插槽。

在装置目录的 /dev/mmcblk1 可找到 SD 卡。

安装时请按照标準的 Linux 步骤。先建立一个空资料夹,如:

别让小朋友沈溺于电动,教你动手做IoT互动式游戏
 再将记忆卡安装到此资料夹:
别让小朋友沈溺于电动,教你动手做IoT互动式游戏
 若想要在 Linux 开机时自动安装记忆卡,请将下列字串加到 /etc/fstab 档案中:
别让小朋友沈溺于电动,教你动手做IoT互动式游戏
Xadow -- OLED 12864

此为套件随附的 128×64 OLED 显示器。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

规格请参见 Seeed 网站。
此显示器是经由 I2C 介面连接,装置位址为 0x3C。
以下程式码为画面显示用的範本:

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

画面有 8 列,一列 16 个字元,帧率可每秒多个画格。

我们使用了下列功能:
• init:初始化 Seeed OLED 的画格,并将显示器设为正常模式。
• clearDisplay:清空整个画面。在全新开始之前,或是滚动停用之后,都应该使用此功能,游标也将设定在左上角。
• setBrightness:设定 OLED 显示器的对比率。亮度可为 0~255 之间的任何数字。
• setNormalDisplay:将显示器设定为正常模式。
• setPageMode:将显示器设定为页面定址模式。
• setTextXY:将文字的位置设定至第 X 页,第 Y 列。X 可为 0~7 之间的任何数字。Y 可为 0~127 之间的任何数字。
• putString:将字串发布到 OLED 显示器上,从目前 setTextXY 所设定的位址指标开始。
• sendData:将一个位元组送到画面上。
其他功能和更多资讯可参照 www.seeedstudio.com/wiki/OLED_Frame and in SeeedOLED.h 档案。

Xadow -- Buzzer
别让小朋友沈溺于电动,教你动手做IoT互动式游戏

蜂鸣器需连接到针脚 11 和 13,必须同时开启或关闭。将 0 或 1 传送到这两个针脚上便会发出声音。

依我个人经验,最简单的方法是将其中一个针脚预设为 1,然后改变另一个针脚的状态,藉以发出声音。

以下程式码为声音输出的範本:

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

由于是依据软体播放,所以声音无法十分清楚。最好使用脉冲宽度调变。值得一提的是,我为 Intel® XDK IoT 版和 С++所製作的这个 Sketch 複製版无法运作 ─ 没有声音输出。

Xadow -- Vibration Motor
别让小朋友沈溺于电动,教你动手做IoT互动式游戏

可以用和蜂鸣器相同的方式来控制震动马达:将针脚 10 和 11 设定为相同的数值,藉此开启或关闭。方法可参考下列範例码:

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

就和蜂鸣器一样,预先将其中一个针脚设定为 1 后,再控制另一个针脚即可。

Xadow -- Q Touch Sensor
别让小朋友沈溺于电动,教你动手做IoT互动式游戏

此扩充板的背面有三个触控按钮,由 I2C 连接,位址为 0x1B。

按钮的灵敏度很高,就算隔着几层纸或胶片也感应得到,所以可用图片遮蔽这些按钮。

以下的範例码会传回按下的按钮编号:

别让小朋友沈溺于电动,教你动手做IoT互动式游戏
Xadow -- NFC
别让小朋友沈溺于电动,教你动手做IoT互动式游戏

NFC 读取器可支援 I2C、SPI 以及 UART 连线,作业频率为 13.56 MHz。其可支援读写操作、ISO14443 Type A 与 Type B 协定、以及 P2P,且配备一条随附连接线的天线。更多资讯请见 http://www.seeedstudio.com/wiki/XadowNFC

套件随附三个可写入的空白 NFC 标籤。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

此模组需要用到 NDEF、PN532、PN532_HSU、PN532_I2C 以及 PN532_SPI 程式库。请从一般的 Seeed 範本程式库下载上述程式库。

如需测试标籤和读取器,可使用 NDEF 程式库里的範例程序 readTag。它会读取标籤内的资料并将之显示在控制台上。

套件中的标籤有序号,因为尚未格式化,若经查询将传回下列输出结果:

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

要先以 NDEF 程式库的 FormatTag 範本将标籤格式化,才能写入资料。

如需将资料写进标籤中,可使用 NDED 程式库的 WriteTag 範本。

以下是从某个标籤读取资料的结果:

别让小朋友沈溺于电动,教你动手做IoT互动式游戏
Xadow -- 3Axis Accelerometer
别让小朋友沈溺于电动,教你动手做IoT互动式游戏

此为三轴加速度感应器。所能测量到的範围为 ±16 G,透过 I2C 连线,位址为 0x53。感应器安装在 ADXL345 晶片上。要使用的话需从套件安装 DigitalAccelerometer_ADXL345 程式库。
共有四种测量範围,精确度和转换率各不相同:±2 g、±4 g、±8 g、±16 g。

晶片的规格表可查看此处:pdf1.alldatasheet.com/datasheet-pdf/view/254714/AD/ADXL345.html

资料会以 16 位数字的形式回传。程式库回传的数字是 int 变数,因此需如下进行修改:

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

若使用的範围是 ±2 g,则各规格表的传回数值均需除以 256。之前提过,我在加速度计这边遇到了一些麻烦。有时候会无法侦测到加速度计,而 Linux 控制台会传回 I2C 错误。不过当把萤幕连接到主模组,再将加速度计连接到萤幕时,运作就相当稳定。也许这个感应器没有终端电组。

Xadow -- Barometer BMP 180
别让小朋友沈溺于电动,教你动手做IoT互动式游戏

此扩充板上有气压计和温度计。压力测量範围为 300~1100 hPa 。其是以 0x77 位址连接 I2C。

不幸的是,我无法让这个扩充板运作起来,可能是因为 I2C 介面有些错误。也许跟加速度计的问题是一样的。我曾拿另一组 Xadow 套件测试过,同样无法运作。

Xadow -- Breakout
别让小朋友沈溺于电动,教你动手做IoT互动式游戏

这个扩充板是用来连接标準的感应器,有以下针脚:3.3 V、SCL、SDA、TX0、GND、SCK、MOS1、MOS0、A5。上面也有两个接头垫,可插入标準的「Seeed」模组。一个标为「Serial」,一个标为「I2C」。可拿来连接 LED 灯条。

Digital RGB LED Flexi-Strip
别让小朋友沈溺于电动,教你动手做IoT互动式游戏

这是一条配有 5 个 RGB WS2812B LED 灯的灯条。透过一条线来控制 LED 灯。

必须要正确连接才能运作,如下图所示。使用 Xadow-Breakout 扩充板

别让小朋友沈溺于电动,教你动手做IoT互动式游戏
别让小朋友沈溺于电动,教你动手做IoT互动式游戏
资料是由软体送出,因此有时候会发生资料传输错误的情形,LED 灯可能会紊乱闪烁。

以下为「Running light」程式:

别让小朋友沈溺于电动,教你动手做IoT互动式游戏
製作游戏

我想用这个套件来做些什幺,然后就冒出了做个游戏的想法。

在这个游戏里,LED 灯带会安装在游戏盒的外侧。当 LED 灯亮起或熄灭时,玩家要依据 LED 灯光的颜色将盒子 45 度朝某个方向倾斜。若中间的 LED 灯是绿色,就要将盒子向外倾斜 。若中间的 LED 灯亮红色,就往自己这一侧倾斜。所最右边的 LED 灯转绿,则将盒子朝右倾,但若是亮红灯,就要朝左斜。

这个游戏不但能测试反应能力,还能让玩家在动作前先动动脑。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

要作出这个游戏需要下列组件:
• 陀螺仪
• OLED 显示器
• LED 灯条
• 连接灯条的扩充模组
• 按钮板
• 电池

首先我在电池接头的那侧连接分线板,然后是感应器按钮。另一端连接萤幕,再连接陀螺仪。这个盒子是用几张彩色厚纸板黏成的。接下来开一个口让萤幕露出来。我将按钮板装在萤幕下,如你所知,按钮的感应度很高。我在正面给按钮位置画了几个符号。
所有的扩充板盖了一张纸,再用透明胶带黏好,以防损坏。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

Sketch 会自动在 Linux 中启动。

要开始游戏时,就长按主模组的 PWR 按钮 9 秒左右。要结束游戏,就将同一按钮按 3 秒即可。

游戏开始后会出现选单,在选单中可以选择开始游戏或显示游戏说明若要关闭说明画面,就按下箭头钮。

别让小朋友沈溺于电动,教你动手做IoT互动式游戏

游戏共有五回合。每一回合会有一个 LED 灯随机亮,玩家就得朝相对应的方向倾斜盒子。若动作正确,画面上会显示「You Win!」。若失败或是时间到,画面上显示的就是「You Lose!」。

You may see example video

所有的游戏程式码都在一个档案内。我尽可能写得简洁清楚,所以相当好分析。

Sketch 游戏程式码

别让小朋友沈溺于电动,教你动手做IoT互动式游戏
关于作者

Valery Mosyagin 是 Intel 官方的软体创新者。目前定居在俄罗斯的下诺夫哥罗德。拥有数学与电脑科学的硕士学位。在 Intel 的 OpenCV 团队中有 6 年工作经历,后来到日本为 Brain Research Institute 开发生物实验用的软体.─. 网路流量分析软体以及无线讯号涵盖和传播软体。有很长一段时间在教导小朋友编写程式。Valery Mosyagin 的兴趣相当广泛,包括虚拟实境、游戏开发、微控制器和 IoT 等。