intel/intel-iot-services-orchestration-layer

关于蓝牙连接的问题

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文件 "字符"消失, 请问能否再描述的详细一点, 以至于我们可以重现并分析问题原因

您好,不好意思前面在回家的路上,所以没能及时回复您。具体是这样的:
比如我打开两个文件,刚开始是这样的:
err1
可以看到现在go(0,30); 最后是有分号的,这时候如果我点到start.js文件,再点回来,分号就会消失。
err2
如果持续来回点的话,就会一直消失:
err3
err4

具体就是这个情况。

除此之外,还有一个问题,比如我选中一段代码,在选中的地方点击,这段就会消失:
err5
err6

jjykh commented

你好,谢谢你提供图片信息。
我这边无法重现你说的“字符"消失的问题(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

jjykh commented

是Linux下中文输入法的问题,暂时还没特别好的解决办法,请你切换到英文方式编辑,谢谢!

好的,谢谢您。

@windmillknight 你edison上面跑的image应该是http://www.swcontest.net/index.php?a=down&m=study 这里下载的吧?

是哒~