关于蓝牙连接的问题
windmillknight opened this issue · 18 comments
您好,请问我该如何在iot平台中用代码连接蓝牙并处理数据呢,需要用到哪些库呀?
我并没有写过蓝牙相关的代码.
首先, 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文件 "字符"消失, 请问能否再描述的详细一点, 以至于我们可以重现并分析问题原因
你好,谢谢你提供图片信息。
我这边无法重现你说的“字符"消失的问题(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 这里下载的吧?
是哒~