当前位置:   article > 正文

Ruff 硬件开发初体验_ruff主板相关知识

ruff主板相关知识

Ruff 官网 : https://ruff.io

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

这里写图片描述

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

几乎从没接触过硬件开发,要说唯一体验应该还是在大学的时候,忘了是 Linux 还是嵌入式附带的实验课程,开发过程可以说毫无体验可言,从头到尾按着教案一路懵逼,中间莫名其妙的跪了好多次,Hello World 都出不来,结束了都不知道自己干了点儿啥。

后来在论坛里有看到过树莓派等开发版,能安装 Linux、Android 等操作系统,便捷了许多,但想玩点儿外设之类的还是绕不过硬件、接线、驱动等等底层复杂的东西,加之不少人都说买了吃灰,我也就没入坑。前两天看到 Ruff,官网逛了逛感觉有点儿意思,微博上随手转发了个活动,晚上就抽中了…

周五 Ruff 套件到货了,就要开启硬件开发之旅了,想想还有点小激动…

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

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

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

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

这里写图片描述

入门后可以跟着官方的几个 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 的可视化工具,不习惯命令行的朋友可以试试。

开发过程使用到的额外知识确实不多,非常容易上手,尤其是 layout –visual 后插线也方便许多,但还是不太智能,没有计算已插好的硬件,不太懂接线的东西,没敢在图上自己布线,通常我都拔了重插了。。。

小问题

  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(比如空调遥控器)

https://github.com/kassadin/RuffLabs

这里写图片描述

这里写图片描述

代码非常简单:

https://github.com/kassadin/RuffLabs/blob/master/allinone/src/index.js

  1. 'use strict';
  2. var led;
  3. var lcd;
  4. var btnr;
  5. var btnb;
  6. var dht; // 温湿度
  7. var light;
  8. var buzzer;
  9. var ir;
  10. var lcdStatus = 1; // lcd on
  11. $.ready(function (error) {
  12. if (error) {
  13. console.log(error);
  14. return;
  15. }
  16. $('#led-g').turnOn();
  17. dht = $('#dht');
  18. led = $('#myled');
  19. lcd = $('#mylcd');
  20. light = $('#light-sensor');
  21. buzzer = $('#buzzer');
  22. ir = $('#ir');
  23. welcome();
  24. // btnr get dht info
  25. btnr = $('#btn-r');
  26. btnr.on('push', function () {
  27. console.log('Button red pushed.');
  28. lcd.clear();
  29. dht.getTemperature(function (error, temperature) {
  30. printToLcd('TEMP', error, temperature, 0);
  31. });
  32. dht.getRelativeHumidity(function (error, humidity) {
  33. printToLcd('HUMI', error, humidity, 1);
  34. });
  35. buzzer.turnOn();
  36. });
  37. btnr.on('release', function () {
  38. console.log('Button red released.');
  39. buzzer.turnOff();
  40. });
  41. // btn-b
  42. btnb = $('#btn-b');
  43. btnb.on('push', function () {
  44. console.log('Button blue pushed.');
  45. lcd.clear();
  46. light.getIlluminance(function (error, value) {
  47. printToLcd('Light', error, value, 0);
  48. });
  49. });
  50. btnb.on('release', function () {
  51. console.log('Button blue released.');
  52. });
  53. ir.on('data', function(data) {
  54. console.log('received data', data);
  55. if(data){
  56. if(lcdStatus === 1){
  57. lcd._p3.write(0);
  58. lcd.turnOff();
  59. lcdStatus = 0;
  60. closeLed();
  61. }else{
  62. lcd._p3.write(1);
  63. lcd.turnOn();
  64. lcdStatus = 1;
  65. welcome();
  66. }
  67. }
  68. });
  69. });
  70. $.end(function () {
  71. $('#led-g').turnOff();
  72. });
  73. function welcome(){
  74. lcd.clear();
  75. lcd.print('Hello,Ruff!');
  76. lcd.setCursor(0,1);
  77. lcd.print('kassadin.vip');
  78. openLed();
  79. }
  80. function printToLcd(label,error,value,line){
  81. lcd.setCursor(0,line);
  82. var content;
  83. if (error) {
  84. console.error(error);
  85. content = label + ':ERR';
  86. }else{
  87. console.log(label, value);
  88. content = label + ':' + value;
  89. }
  90. lcd.print(content);
  91. }
  92. // https://github.com/RuffApps/Apps/blob/master/colorful-light/src/index.js
  93. var lightTimer;
  94. function openLed(){
  95. led.turnOn();
  96. var r, g, b;
  97. lightTimer = setInterval(function () {
  98. //产生0-255的随机颜色值
  99. r = Math.random() * 255;
  100. g = Math.random() * 255;
  101. b = Math.random() * 255;
  102. led.setRGB(r, g, b);
  103. sleep(1000);
  104. }, 2000);
  105. }
  106. //睡眠函数
  107. function sleep(milliseconds) {
  108. var start = new Date().getTime();
  109. for (var i = 0; i < 1e7; i++) {
  110. if ((new Date().getTime() - start) > milliseconds) {
  111. break;
  112. }
  113. }
  114. }
  115. function closeLed(){
  116. if(lightTimer){
  117. clearInterval(lightTimer);
  118. }
  119. led.turnOff();
  120. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/43648
推荐阅读
相关标签
  

闽ICP备14008679号