0
点赞
收藏
分享

微信扫一扫

物联网学习2 IoT应用开发平台巡礼

郑晔@Ruff
端上IoT平台,非云上IoT平台

一、IoT平台简介

1. 平台

分类

项目

嵌入式操作系统

VxWorks、FreeRTOS、LiteOS、mbed

极客硬件平台

树莓派、Arduino

JavaScript IoT 开发平台

Ruff、Tessel、JerryScript、Johnny-Five

2. 嵌入式操作系统的困境

  • 入门门槛门槛极高,开发者需要学习大量软硬件相关的知识,因此,嵌入式领域的人才数量受到了限制
  • 工程方法大幅度落后于行业水平,敏捷软件开发方法以及精益创业的理念,在嵌入式领域极少得到应用,该领域在工程方法上发展缓慢
  • 知识共享编程概念属于专用领域,知识很难在行业中共享,开发者在行业中流动也相对困难,嵌入式领域对于现代软件开发理念的理解也整体上落后于软件行业

原型机投入生产比较困难

二、JavaScript IoT应用开发平台

分类

项目

在硬件上运行 JavaScript

JerryScript、Espruino 等

面向应用的硬件抽象

Tessel、Johnny-Five、Cylon.js 等

提供生产支持

Ruff

1. 在硬件上运行JavaScript

espruino

  • 网站​​https://www.espruino.com/​​
  • 目标 在单片机上运行 JavaScript
  • 代码风格 类似于 C
  • 其它 解释器、操作系统、程序库混为一谈

示例:灯不断亮灭

function toggle() {
on = !on;
digitalWrite(LED1, on);
digitalWrite(LED2, !on);
}

espruino本身不支持的硬件很难移植上去。

jerryscript(三星)

网站:​​http://jerryscript.net/​​

  • JerryScript 是三星打造的一款 JavaScript 引擎,它可以运行在 64K 的 MCU 上
  • 对于 JavaScript 标准支持得比较好
  • 完整支持 ECMAScript 5.1
  • 只是一个独立的JavaScript解释器
  • -

IoT.js

  • 网站​​http://iotjs.net/​​
  • 目标 基于JerryScript 的 Node.js
  • 代码风格 符合今天主流的代码风格
  • 模块 支持 Buffer、net、timer 等标准模块

一段IoT.js示例

var i2c = require('i2c');
var wire = new i2c(0x23, {device: '/dev/i2c-1'});

wire.scan(function(err, data) {
...
});

2. 面向应用的抽象

名称

项目网站

开发板

JS 引擎

使用领域

Tessel

​​https://tessel.io/​​

自己的开发板

Node.js

IoT、机器人

Jonny-Five

​​http://johnny-five.io/​​

适配多种开发板

Node.js

IoT、机器人

Cylon.js

​​https://cylonjs.com/​​

适配多种开发板

Node.js

IoT、机器人、物理计算

在PC上运行Nodejs引擎。

Tessel

示例:

var tessel = require('tessel');
var ambientlib = require('ambient-attx4');
var WebSocket = require('ws');

var ambient = ambientlib.use(tessel.port['A']);

var ws = new WebSocket('ws://awesome-app.com/ambient');
ws.on('open', function () {
setInterval(function () {
ambient.getSoundLevel(function(err, sdata) {
if (err) throw err;
sdata.pipe(ws);
})
}, 500);
});

通过getSoundLevel屏蔽了底层接口。

Jonny-Five

var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
var led = new five.Led(13);
led.blink(500);
});

Cylon.js

var Cylon = require("cylon");

Cylon.robot({
connections: {
arduino: { adaptor: 'firmata', port: '/dev/ttyACM0' }
},

devices: {
led: { driver: 'led', pin: 13 }
},

work: function(my) {
every((1).second(), function() {
my.led.toggle();
});
}
}).start();

3. Ruff

  • ​​https://ruff.io​​
'use strict';
$.ready(function(error){
if(error){
console.log(error);
return;
}
$('#led-r').turnOn();
});
$.end(function(){
$('#led-r').turnOff();
});


举报

相关推荐

0 条评论