文档章节

Ruff

knightuniverse
 knightuniverse
发布于 2016/11/12 12:42
字数 1432
阅读 112
收藏 1

行业解决方案、产品招募中!想赚钱就来传!>>>

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的应用场景应该会相当多的吧,比如用来快速做一个硬件产品的原型等。

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

应该挺好玩的。

knightuniverse
粉丝 1
博文 39
码字总数 46366
作品 0
厦门
程序员
私信 提问
加载中
请先登录后再评论。
JavaScript在物联网中的应用

凡是能用JavaScript写出来的,最终都会用JavaScript写出来。 —— Atwood定律 在那篇《最流行的编程语言JavaScript能做什么?》里,我们列举了JavaScript在不同领域的使用情况,今天让我们来...

Phodal
2016/08/11
4.7K
8
2017 第六届iWeb 峰会暨攻城狮嘉年华(上海站)

由国内最大的前端开发者社区-HTML5梦工场主办的、前端行业最具影响力的前端开发者大会--“2017iWeb峰会(上海站)将于6月18日在上海小南国花园酒店盛大开启,一直以来iWeb峰会都”以最接地气...

H5梦工场
2017/04/06
13
0
天机阁|全国巡回 Meetup 上海站

天机阁|全国巡回 Meetup 上海站 拥抱未来:Bring Blockchain To Everyone 活动介绍 天机阁全国巡回 Meetup 是由天机阁主办的面向开源社区贡献者和区块链技术开发者的线下技术沙龙活动,将在...

SVchain
2018/07/17
155
0
2017 第六届iWeb 峰会暨攻城狮嘉年华(上海站)

由国内最大的前端开发者社区-HTML5梦工场主办的、前端行业最具影响力的前端开发者大会--“2017iWeb峰会(上海站)将于6月18日在上海小南国花园酒店盛大开启,一直以来iWeb峰会都”以最接地气...

H5梦工场
2017/04/06
102
0
QingCloud Insight 2016 科技,洞见未来

28 Jul, 2016 QingCloud Insight 邀你共同探讨科技与创新的前沿话题,洞悉技术与商业未来。 科技,洞见未来 探讨科技话题,洞悉商业未来 信息技术的发展日益深刻地改变着人类的生活。从工业时...

cathyli
2016/06/30
1.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot 上传文件

package com.taven.demo;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframewor......

tavenpy
20分钟前
4
0
GitHub 标星 44k!史上最全技术面试手册!

整理:迷妹 大家好,我是为前端娱乐圈操碎了心的小迷妹,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标。 每...

祈澈菇凉
今天
0
0
Sublime Text3配置及控制台乱码[cmd杀死进程乱码/编译文件乱码]解决方法

Sublime Text3配置及控制台乱码[cmd杀死进程乱码/编译文件乱码]解决方法 参考文章: (1)Sublime Text3配置及控制台乱码[cmd杀死进程乱码/编译文件乱码]解决方法 (2)https://www.cnblogs...

osc_wl6d9wri
21分钟前
0
0
JS实现网页轮播(每隔5秒切换)

function onload() { <%=sb_js_onload.ToString() %> var timer = setInterval("jump_url()", 1000); } var arrurl = ["screen.aspx?code......

_Somuns
21分钟前
7
0
程序猿:论学习方式的重要性

大家都知道,做我们开发这行的,最核心的竞争力就是学习能力。技术一直在变化,框架一直在更新,学还是不学。 不学,你会落伍,学,太累了,根本学不过来。学习只要找对了方法,也没那么累。...

osc_zg8wy3xa
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部