文档章节

Ruff

knightuniverse
 knightuniverse
发布于 2016/11/12 12:42
字数 1432
阅读 19
收藏 1
点赞 1
评论 0

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荆天为:以解决痛点为基点,用实践推动物联网的发展

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

行者武松 ⋅ 03/06 ⋅ 0

《近匠》专访 Ruff CTO 郑晔:技术老兵教你如何上手物联网应用开发

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

tangxiaoyin ⋅ 2017/06/20 ⋅ 0

Ruff——让你快速用JS开发出智能硬件应用的工具

Ruff这个想法诞生,到现在已有一年半了。决定要做Ruff的动机很简单:市面上没有一款工具能让我快速开发出智能硬件应用。树莓派固然很好,但是我依然要写C写驱动,搞定内存管理、进程调度、异...

Andy-RTT ⋅ 2016/04/11 ⋅ 0

Ruff技术白皮书

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

虚拟机 ⋅ 01/15 ⋅ 0

我与IOT的故事

今年年初,有个卖别墅的朋友找我分享他的点子:他想弄个手机软件来控制房子里面的空调,这样可以在回家之前先把空调打开。他觉得这个点子很赞,而且经济效益应该也不错,找到我是因为只差一个...

草莓豆豆龙 ⋅ 2017/12/03 ⋅ 0

和ruff比,区别!

@cupkee 你好,想跟你请教个问题:Cupkee和ruff比,区别!?

terenceyhj ⋅ 2016/12/10 ⋅ 2

去掉炒作和噱头,区块链到底需要怎样的技术人才?

区块链虽然早已不是什么新鲜物种,却随着币圈的浮沉,从去年下半年开始彻底成为互联网科技圈的人才抢夺热点。在政策环境尚不明朗的当下,正在招聘技术人员的区块链公司,有的选择蹭热度吸引应...

100offer ⋅ 04/13 ⋅ 0

游历 JavaScript IoT 应用开发平台

物联网(Internet of Things,简称IoT)时代的脚步声已经越来越响亮,每个程序员都希望跟上时代的步伐,不为时代浪潮所淘汰。面对IoT这个纷争初起的领域,程序员们该何去何从?本文将带领诸位...

tangxiaoyin ⋅ 2017/08/08 ⋅ 0

ThoughtWorks:这是一个新的时代

作为一家服务于全球不同类型客户的IT专业公司,ThoughtWorks一直致力于用卓越的技术解决不同的问题。ThoughtWorks技术雷达是ThoughtWorks服务于各个行业客户的技术准绳,中科软总裁曾做出对此...

玄学酱 ⋅ 05/25 ⋅ 0

全栈必备 JavaScript基础

JavaScript 来了 喔家ArchiSelf 1995年,诞生了JavaScript语言,那一年,我刚刚从大学毕业。在今年RedMonk 推出的2017 年第一季度编程语言排行榜中,JavaScript 排第一,Java 第二,Python ...

wireless_com ⋅ 2017/04/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 今天 ⋅ 0

Java8新增的DateTimeFormatter与SimpleDateFormat的区别

两者最大的区别是,Java8的DateTimeFormatter也是线程安全的,而SimpleDateFormat并不是线程安全。 在并发环境下使用SimpleDateFormat 为了能够在多线程环境下使用SimpleDateFormat,有这三种...

人觉非常君 ⋅ 今天 ⋅ 0

多线程如何控制执行顺序

线程的生命周期说明: 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、...

MarinJ_Shao ⋅ 今天 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Django第一期

安装Django 去https://www.djangoproject.com/download/ 下载最新版的Django,然后解压放到Anaconda\Lib\site-packages目录下,然后cmd进入此目录,输入安装命令: python setup.py install ...

大不了敲一辈子代码 ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部