Closed windmillknight closed 8 years ago
我并没有写过蓝牙相关的代码.
首先, hub之间的通信协议, 现在只支持http和mqtt, 所以蓝牙只能在service中使用.
servcie的内部实现是完全开放的, 用户可以写任意JS或者调用已有的可执行程序. 见help文档
我的建议是 1, 搜索 支持你所在硬件平台的蓝牙npm package, 这样在service中就用js完成蓝牙读写 (我没有写过相关代码, 所以不知道是否存在这样的package)
2, 用c/c++写一个蓝牙读写的可执行程序, 在servcie中调用他们.
那这样的话python或者Arduino的可执行文件也可以用咯?
原则上都可以, 需要注意的是arduino程序启动的时候会初始化整个硬件. 如果你的工作流 a -> b -> c, a点亮了LED, b步骤调用了arduino程序, 由于会初始化硬件, 导致LED又关闭
明白了,谢谢您。现在我又遇到了一个问题,在使用递归的时候,怎么样让程序每隔1s进行下一次递归呀? function forNext(i,end){ if(i<end){ sendOUT({ out1: colors[i][0], out2: colors[i][1], out3:colors[i][2], out4:colors[i][3] }); ledStrip.setLed(0,colors[i][0],colors[i][1],colors[i][2],colors[i][3]); setTimeout(process.nextTick(function(){ return forNext(++i,end); }),1000); } } 我们的代码是这样的,这里的延时函数似乎不起作用。
setTimeout 第一个参数需要时一个function, 而你的第一个参数是
process.nextTick(function(){
return forNext(++i,end);
})
这个值是函数process.nextTick
执行的结果, 是undefined. 同时, process.nextTick
将
function(){
return forNext(++i,end);
}
注册为本次"step of event loop"完成后马上执行.
你应该这么写
setTimeout(forNext, 1000, ++i, end);
谢谢您,上次那个问题解决了。 现在的问题是程序多运行几次会卡住,有时重启iot都没用,要重启edison board. 不知是不是我代码写的有问题,导致性能不好? var lib = require('jsupm_apa102'); var colors =[ [1,0,225,225], [1,0,0,225], [1,0,225,0], [1,225,0,0], [1,0,0,0] ];
var ledStrip = new lib.APA102(144, 0);
function forNext(i,end){ if(i<end){ var j = ( i + 1 ) % 5 ;
ledStrip.setLed(0,colors[i][0],colors[i][1],colors[i][2],colors[i][3]);
ledStrip.setLed(1,colors[j][0],colors[j][1],colors[j][2],colors[j][3]);
setTimeout(forNext, 1000, ++i, end);
}
} forNext(0,5);
@KaboChueng 你的描述像是'jsupm_apa102'这个出的问题
我建议你把 var ledStrip = new lib.APA102(144, 0);
放到start.js中, 不要多次实例化.
可以参考 led 的实现
您好,现在我们按照led的实现,把var ledStrip = new lib.APA102(144, 0); 放在了start.js 中,但是程序运行时仍然会不时地卡住,并且命令行会报下面的这个错误。
[ 360.609645] INFO: task node:385 blocked for more than 120 seconds. [ 360.609735] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
我们想知道这是因为什么原因导致的,是因为向spi端口输入的数据太快了么?下面是我的一段代码,这段代码在运行时,有时可以完整运行,有时会在半中央卡住。
function forNext(i,end){ if(i<end){ if(i % 2 ===0){ for( j = 0 ;j < 10 ; j++){ shared.ledStrip.setLed(j,1,0,0,25(j+1)); } for(j = 10 ; j < 20 ; j++){ shared.ledStrip.setLed(j,1,0,25(j-9),0); } for(j = 20 ; j < 30 ; j++){ shared.ledStrip.setLed(j,1,25(j-19),0,0); } shared.ledStrip.pushState(); //向spi发信号 }else{ for( j = 0 ;j < 10 ; j++){ shared.ledStrip.setLed(j,1,25(j+1),0,0); } for(j = 10 ; j < 20 ; j++){ shared.ledStrip.setLed(j,1,0,0,25(j-9)); } for(j = 20 ; j < 30 ; j++){ shared.ledStrip.setLed(j,1,0,25(j-19),0); } shared.ledStrip.pushState(); } setTimeout(forNext, 1000, ++i, end); }else{ return; } } shared.ledStrip.setAllLeds(1,0,0,0); shared.ledStrip.pushState(); forNext(0,5);
除此之外,在iot_sol平台上编辑js文件的时候,有时候一个文件保存之后再打开,文件的最后一个字符就会消失,要是重复打开,就会持续消失。
hi 关于spi接口的错误, 我并没有使用过, 像是你用的库本身的问题.
关于编辑js文件 "字符"消失, 请问能否再描述的详细一点, 以至于我们可以重现并分析问题原因
您好,不好意思前面在回家的路上,所以没能及时回复您。具体是这样的: 比如我打开两个文件,刚开始是这样的: 可以看到现在go(0,30); 最后是有分号的,这时候如果我点到start.js文件,再点回来,分号就会消失。 如果持续来回点的话,就会一直消失:
除此之外,还有一个问题,比如我选中一段代码,在选中的地方点击,这段就会消失:
你好,谢谢你提供图片信息。 我这边无法重现你说的“字符"消失的问题(Chrome,Firefox),能否提供你的操作系统版本、浏览器以及IoT SOL的版本呢?
您好,我的操作系统电脑是unbuntu14.04, edison版本是https://software.intel.com/iot/hardware/edison/downloads从这里下载的最新Yocto 映像 浏览器是Chrome 52.0.2743.82, ioT SOL是github 的master分支
@windmillknight 你是下载官方firmware的是吗? 请在edison上面 运行 node -v
看一下nodejs版本
v 4.4.4
是Linux下中文输入法的问题,暂时还没特别好的解决办法,请你切换到英文方式编辑,谢谢!
好的,谢谢您。
@windmillknight 你edison上面跑的image应该是http://www.swcontest.net/index.php?a=down&m=study 这里下载的吧?
是哒~
您好,请问我该如何在iot平台中用代码连接蓝牙并处理数据呢,需要用到哪些库呀?