在上一章《我的第一个物联网应用 2》中,我们完成了 Ruff SDK 的安装,开发环境已经准备就绪,这一章我们的目标是:
- 新建一个 Ruff 项目,熟悉项目结构
- 以继电器为例学会添加连接外设,并控制外设
下面有请这一期的主角入场。
- Ruff 开发板:
继电器
继电器的作用
为了方便理解后面的内容,这里先简单科普一下继电器的工作原理,如果你已经知道继电器的作用可以跳过这段内容。
什么是继电器?继电器是一种通过某种信号变化来自动控制电路开关的电子设备。
上图是最简单的继电器模型图,输出电路有三个端口:常闭、常开和公共端,默认情况下常闭端和公共端是连通的,控制端根据输入的电信号能控制摆动条向下或向上摆,从而控制公共端和常闭端或者常开端连通。例如下图就是一个基于电磁信号来实现的继电器:
大家回忆一下中学物理课中的电磁感应原理,当线圈通电后,线圈环绕的铁芯会产生磁力,在磁力的吸引作用下铁片和常闭端断开、和常开端联通;当线圈断电,铁芯磁力消失,铁片在弹簧拉力的作用下和常闭端联通。 如果我们用开发板控制继电器来控制风扇,那么电路连接情况可以如下图:
创建项目
思路理清楚了,下面我们终于可以写代码了,开干吧!创建一个目录:MyLotApp。进入项目目录。执行命令:
rap init
接下来命令终端会让你输入项目名称、描述、作者等信息,写过 NodeJs 的同学一定会觉得很亲切,项目初始化完成之后我们来看看工程的目录结构:
package.json:
{"name": "MyLotApp","version": "0.1.0","description": "My first Lot App","author": "dalimao","main": "src/index.js","ruff": { "boards": { "ruff-mbd-v1": "^4.2.0", "*": "*" }, "dependencies": {} }}
其中 main 节点指定了程序的入口文件;ruff 节点描述工程的依赖模块,boards 是开发板的基础依赖模块,dependencies 是设备的依赖模块,我们现在还没添加外设备,所以这里是空的。
app.json: 描述设备的逻辑ID(我们在添加外设时自己指定的ID)和驱动依赖包的映射关系。
test 目录:测试代码存放目录。
src 目录:源码目录,我们写的代码就放到这个目录下。
src/index.js: 在package.json 中指定了 index.js 为项目的程序入口。
'use strict';$.ready(function (error) { if (error) { console.log(error); return; } $('#led-r').turnOn();});$.end(function () { $('#led-r').turnOff();});
开发板启动完成、加载程序之后会执行ready() 回调函数,关闭之前会执行end()回调函数。这段代码加载后,开发板会点亮开发板上内置的红色led 灯。现在我们让这段初始化生成的代码在开发板上跑起来吧,有请我们的第一位主角-Ruff 开发板出场。
启动开发版
用 USB 连接线给 Ruff 开发板 ,开发板随即启动。开发版启动后会启动一个名字以 Ruff 开头的 WI-FI 热点,例如 Ruff0021332 。让开发机(你的电脑)连上这个 WI-FI 热点,然后就可以把代码部署到开发板上了。
部署程序
打开终端,进入工程目录,输入命令:
rap deploy -s
部署成功,观察一下开发板上红色 led 灯是否亮了。
添加继电器
关掉开发板电源,WIFI 切回正常使用的 WIFI。先来熟悉下 rap device add 这个命令,这个命令是用来添加外设的, 后面的参数是逻辑上的设备 ID,你可以自行定义,只要保证和其他设备 ID 不重复就行了。
rap device add relay
这里我把继电器的 ID 定义为 relay ,回车之后 Ruff 命令行会询问你 Module ID, 这个才是设备真正的 ID ,这个 ID 和这个硬件的驱动程序是对应的,这个 ID 在设备的包装盒上有注明,输入这个 ID 回车之后 Ruff SDK 会根据 ID 在 Ruff 的软件仓库帮你寻找对应的驱动程序供你选择安装,如果这个设备还没有对应的驱动程序,你可以去根据 Ruff 的 API 去为它写驱动程序,当然这是后话了。