Ruff

Ruff

Created 星期一 24 十月 2016

如果问起十月份我最开心的事情,大概有两件。一件事去江西武功山,徒步征服了海拔1900米的大山;另一件事就是上周末去厦门Google AdWords体验中心参加了首季的AHA分享

活动有三个主节目,分别是《新硬件工坊》,《敏捷游戏坊--Pizza。Game》以及《敏捷变革--天下事有难易乎?》。这三个主节目是同时进行的,你只能报名参加其中的一个。

大学的时候我学习过微机原理,但是我几乎从来没有一次真正的将写好的汇编代码在机器上执行,一直有个遗憾在心里。而且,其实我对硬件还是很有兴趣,特别是智能硬件和物联网(IOT)。因此这次果断参加了《新硬件工坊》。

原来的讲师是黄凯明老师,但是不巧的是,因为台风的缘故,没法从深圳赶来。因此为我们做分享的是杨杰老师。杨老师是Ruff SDK负责人。拥有超过10年的linux软件开发经验(涉及芯片SOC,网络,和安全软件),2015年加入Ruff。杨老师之前在Nvidia担任senior system engineer,参于了多款Tegra SOC的bring up,(T114,T148,T124)。Nvidia之前,在IBM负责virtual switch。核心模块FE(forward engine)。他是也是Linux开源社区的积极参与者,向Linux kernel贡献了Atheros ethernel L1E和L1C的驱动。

Ruff Develop Kit

此次分享活动,我们是在Ruff开发套件上做的。一副Ruff开发套件包含的东西还是挺多的,一块开发板,十个外设(按钮,蜂鸣器,LCD显示器等)。

Ruff Dev Kit

开发环境

Ruff有自己的SDK,安装过程十分简单。另外,值得一提的是,Ruff选择的编程语言是JavaScript。其他的硬件例如树莓派,大部分那都是用C语言进行开发,比起Ruff来说,学习曲线相对要陡峭一些。

而且Ruff SDK似乎是基于NodeJS的,或者说是兼容NodeJS的。基于Ruff SDK的编程体验十分类似NodeJS编程。

Getting Start

SDK安装好了以后,就可以开始编写代码了。Ruff SDK有自己的包管理工具——rap。初始化一个新的Ruff App的话,执行

rap init

即可。

Standard Directory Layout

| Folder       | Description                                                            |
|:-------------|:-----------------------------------------------------------------------|
| .rap         | 包管理工具rap的隐藏目录,当你运行rap layout --visual的时候,会下载一些硬件的图片资源在这个文件夹内;应该还有其他作用; |
| ruff_modules | Ruff 设备驱动模块                                                            |
| src          | Ruff App 源代码                                                           |
| test         | Ruff App 测试代码                                                          |
| app.json     | Ruff App 硬件信息                                                          |
| package.json | Ruff App 软件信息,包依赖                                                      |

app.json

先看看app.json都有那些内容:

{
    "devices": [
        {
            "id": "button",
            "model": "CK002",
            "driver": "button-gpio",
            "inputs": {
                "gpio": {
                    "type": "gpio",
                    "args": {
                        "direction": "in",
                        "edge": "both"
                    }
                }
            }
        }
	]
}

是的,app.json就一个对象。这个文件记录着Ruff App的硬件布局。实际上,当你通过

rap device add <device_id>

来添加硬件的时候,包管理工具rap会在app.json写入对应的硬件的信息,更新package.json,往package.json添加硬件驱动依赖信息,最后下载硬件驱动模块到ruff_modules这个文件夹里。那么引用硬件驱动提供的JavaScript对象也很容易

$('#<device_id>').doSomeThing();

package.json

有在NodeJS做过编程大概都知道这个package.json的作用。Ruff的话,添加了一个ruff属性,紧接着上面的例子,我们看看package.json会是什么样的:

{
    "name": "ruff-starter",
    "version": "0.1.0",
    "description": "this is a starter project",
    "author": "milo.hou",
    "main": "src/index.js",
    "ruff": {
        "boards": {
            "ruff-mbd-v1": "^4.1.2",
            "*": "*"
        },
        "dependencies": {
            "button-gpio": "^2.0.4"
        }
    }
}

因为我们添加了一个button外设,因此我们必定依赖于这个button的驱动。

src

如果你使用 rap init

初始化一个Ruff App的话,默认在src文件夹下,是会有一个index.js文件的。当然你是可以重命名成其他的文件名,记得修改package.json里的main配置。

这个index.js文件是包含一些示例代码的:

'use strict';

$.ready(function (error) {
    if (error) {
        console.log(error);
        return;
    }

    $('#led-r').turnOn();
});

$.end(function () {
    $('#led-r').turnOff();
});

具体做开发的话就和编写NodeJS差不多。你可以编写若干个模块,然后require进来。

App部署

部署出乎意料的简单。硬件开发版默认提供一个WIFI热点,只要链接到这个WIFI热点,在命令行下输入

rap deploy -s

即可部署并且在开发板上立刻启动应用程序。

实际上你大概也猜到了,要启动开发板上部署的App,只要输入

rap start

反过来,要停止App的运行,你只要运行

rap stop

就好了。

调试

调试我想应该是比较困难的一个环节。首先,你要检查你硬件的连接是否正确。硬件的布局和连线,可以通过 rap layout

或者 rap layout --visual

提供的可视化信息来查看。

但这远远是不够的。有可能是你的代码出现异常了。通常我们需要写log来进行调试。这个时候,你可以运行 rap log

连接到开发板上,获取日志信息。

一点感想

整体来说,Ruff上手非常容易,开发,调试和部署也非常简单。我在想Ruff的应用场景应该会相当多的吧,比如用来快速做一个硬件产品的原型等。

也许远不止如此,比如跨界和农业结合,用硬件产品去收集一系列数据:土壤湿度,光照等,反过来使用计算机去自动灌溉以及控制光照;或者用收集一系列环境数据,分析对比看看环境是否变得更好了。

应该挺好玩的。

转载于:https://my.oschina.net/knightuniverse/blog/786707

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值