文档章节

Ruff

knightuniverse
 knightuniverse
发布于 2016/11/12 12:42
字数 1432
阅读 20
收藏 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
粉丝 2
博文 39
码字总数 46366
作品 0
厦门
程序员
Ruff:利用区块链技术构建的物联网公链|SSR评级

前言: Ruff Chain是一个结合物联网和区块链的架构,包含了分布式操作系统和开放式主链,目标是解决不同领域的物联网系统之间的可信操作和繁重操作问题,从而创建一个开放的Ruff链生态系统。...

SSRating
09/20
0
0
「镁客·请讲」Ruff荆天为:以解决痛点为基点,用实践推动物联网的发展

当下,物联网作为最热门的创业领域之一,一直被行业关注,但是其本身也存在着不小的底层问题。 说到当今火热的物联网领域,就不得不提到这样一个痛点,也可以说是一道鸿沟,就是搞硬件的不懂...

行者武松
03/06
0
0
《近匠》专访 Ruff CTO 郑晔:技术老兵教你如何上手物联网应用开发

万物互联时代,很多人仍然会有这样一个疑问:“为何物联网概念与技术提出并发展了多年,却感觉离我们仍很遥远?”。解惑这个问题之前,我们不妨先探讨智能手机为何会成为人们生活不可或缺的一...

tangxiaoyin
2017/06/20
0
0
「飞猪说行情」7月26日行情分析

今天BTC有冲高回落的趋势,不过就算是币价回调,这几天的成交量起来了,大的趋势还是向上,甚至看情况近期BTC有望冲击9000点。 IOST今天涨的比较猛,飞猪6月初的时候说过IOST和RUFF类似,都是...

飞不起来的猪简称飞猪
07/26
0
0
Ruff技术白皮书

前言: 几年前我设计Ruff的时候,最核心的假设就是物联网是去中心化的,会是mesh网络,自组网,而控制芯片的内存会类似摩尔定律那样越来越大,直到单片机达到512kb RAM, linux版本大到以G为...

虚拟机
01/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

c++_CWinApp

CWinApp:MFC 中的主应用程序类封装用于 Windows 操作系统的应用程序的初始化、运行和终止. ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen...

一个小妞
4分钟前
0
0
可变对象传入set

set=([1,2,3]), 其中([ ])只是set的表现形式,并不是把list放入set中 >>> s1=set([1,2,3])>>> L[1, 2, 3]>>> s1{1, 2, 3}>>> s1(L)Traceback (most recent call last): File "<std......

fadsaa
7分钟前
0
0
多生产与多消费:操作栈

代码同“多生产与一消费”,区别在于测试类代码 public class Test { public static void main(String[] args) { MyStack myStack = new MyStack(); Produce produce......

起个昵称好难啊
8分钟前
0
0
@Component 的作用

1、@controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层 2、@service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理 3、@repository(实现dao访问) ...

踏破铁鞋无觅处
9分钟前
0
0
工厂模式

工厂方法模式 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 简单工厂模式 又称静态工厂方法模式...

noob_fly
11分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部