×

用户注册

已有账号? 登录
other

cloud-cola

2020-12-05 14:30

Ruff 硬件开发体验--温湿度传感器和LCD1602 183

转发自:https://blog.csdn.net/a06_kassadin/article/details/51843243

Ruff 官网 : https://ruff.io

Ruff 是一个 JavaScript 运行时,专为硬件开发而设计。Ruff 对硬件进行了抽象,使用了基于事件驱动、异步 I/O 的模型,使硬件开发变得轻量而且高效。


先总结:简单容易上手,懂硬件的人应该能瞬间就玩 high 了,普通玩家几乎不需要什么额外知识。

拆箱感觉东西还挺多的,主板 + 10个外设模块,但说明书就一张纸,清单和针脚示意图,想象中的接电、开关机、注意事项等都没有,有点无从下手,还好网站上的起步走教程比较详细,估计是因为产品还在不断完善中,所以才没配备详细的纸质说明吧。

整个 Hello World 过程还是比较流畅的,只有配置 wifi 的时候卡壳了,倒腾半天无果,插了网线,第二天通过 rap wifi --lan [ip] 将 Wifi 给整通了。

拿到手的板子不是最新系统,升级系统几分钟就好了,顺便说下系统包只有5M。

rap system upgrade --hostname 192.168.1.30 ~/Downloads/ruffos-1.2.0.bin


入门后可以跟着官方的几个 demo 写写

https://github.com/RuffApps/Apps

玩具车 :

https://github.com/RuffApps/Apps/tree/master/ruff-car

home web frameworkd:https://github.com/vilic/ruff-home

Ruff 开发常用命令

应用相关

  1. rap deploy -s 开发并启动应用
  2. rap start
  3. rap stop
  4. rap log 应用日志输出
  5. rap console 应用启动后的交互环境

设备相关

  1. rap device [add|remove|list 添加、删除、查看设备
  2. rap layout --visual 添加设备后根据 layout 来插线

论坛里有个 RuffHelper 的可视化工具,不习惯命令行的朋友可以试试。  

小问题

  1. 名字的统一

    温湿度传感器 Temperature Humidity Sensor, 设备号是 DHT11 ,印刷是 DH11
    大按键模块 Push Button Module, 设备号是 CK002, 印刷是 CK-002

  2. 外设支持的还比较少

  3. 开放的 API 还比较少,USB接口还没用上

  4. 传了个简单的项目,算是把附带的几个外设过了下吧

    1. start 后显示 welcome,led 随机变色
    2. 红色按钮显示温度和湿度,并且 buzzer一下 - -
    3. 蓝色按钮显示光照度
    4. 任意红外线设备开、关 LCD(比如空调遥控器)
  5. https://github.com/cloud-cola/RuffLabs




代码:  

https://github.com/cloud-cola/RuffLabs/blob/master/allinone/src/index.js

'use strict';

var led;
var lcd;
var btnr;
var btnb;
var dht; // 温湿度
var light;
var buzzer;
var ir;
var lcdStatus = 1; // lcd on

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

$('#led-g').turnOn();

dht = $('#dht');
led = $('#myled');
lcd = $('#mylcd');
light = $('#light-sensor');
buzzer = $('#buzzer');
ir = $('#ir');

welcome();

// btnr get dht info
btnr = $('#btn-r');
btnr.on('push', function () {
console.log('Button red pushed.');
lcd.clear();

dht.getTemperature(function (error, temperature) {
printToLcd('TEMP', error, temperature, 0);
});

dht.getRelativeHumidity(function (error, humidity) {
printToLcd('HUMI', error, humidity, 1);
});
buzzer.turnOn();
});

btnr.on('release', function () {
console.log('Button red released.');
buzzer.turnOff();
});

// btn-b
btnb = $('#btn-b');
btnb.on('push', function () {
console.log('Button blue pushed.');
lcd.clear();
light.getIlluminance(function (error, value) {
printToLcd('Light', error, value, 0);
});
});

btnb.on('release', function () {
console.log('Button blue released.');
});


ir.on('data', function(data) {
console.log('received data', data);
if(data){
if(lcdStatus === 1){
lcd._p3.write(0);
lcd.turnOff();
lcdStatus = 0;
closeLed();
}else{
lcd._p3.write(1);
lcd.turnOn();
lcdStatus = 1;
welcome();

}
}
});

});

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


function welcome(){
lcd.clear();
lcd.print('Hello,Ruff!');
lcd.setCursor(0,1);
lcd.print('kassadin.vip');
openLed();
}

function printToLcd(label,error,value,line){
lcd.setCursor(0,line);
var content;
if (error) {
console.error(error);
content = label + ':ERR';
}else{
console.log(label, value);
content = label + ':' + value;
}

lcd.print(content);
}

// https://github.com/RuffApps/Apps/blob/master/colorful-light/src/index.js
var lightTimer;
function openLed(){
led.turnOn();
var r, g, b;
lightTimer = setInterval(function () {
//产生0-255的随机颜色值
r = Math.random() * 255;
g = Math.random() * 255;
b = Math.random() * 255;

led.setRGB(r, g, b);
sleep(1000);
}, 2000);
}

//睡眠函数
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds) {
break;
}
}
}

function closeLed(){
if(lightTimer){
clearInterval(lightTimer);
}
led.turnOff();
}


暂无任何评论