intel / intel-iot-services-orchestration-layer

The total solution that provides visual graphical programming for developing IoT applications.
80 stars 61 forks source link

关于蓝牙连接的问题 #12

Closed windmillknight closed 8 years ago

windmillknight commented 8 years ago

您好,请问我该如何在iot平台中用代码连接蓝牙并处理数据呢,需要用到哪些库呀?

jiangzidong commented 8 years ago

我并没有写过蓝牙相关的代码.

首先, hub之间的通信协议, 现在只支持http和mqtt, 所以蓝牙只能在service中使用.

servcie的内部实现是完全开放的, 用户可以写任意JS或者调用已有的可执行程序. 见help文档

我的建议是 1, 搜索 支持你所在硬件平台的蓝牙npm package, 这样在service中就用js完成蓝牙读写 (我没有写过相关代码, 所以不知道是否存在这样的package)

2, 用c/c++写一个蓝牙读写的可执行程序, 在servcie中调用他们.

windmillknight commented 8 years ago

那这样的话python或者Arduino的可执行文件也可以用咯?

jiangzidong commented 8 years ago

原则上都可以, 需要注意的是arduino程序启动的时候会初始化整个硬件. 如果你的工作流 a -> b -> c, a点亮了LED, b步骤调用了arduino程序, 由于会初始化硬件, 导致LED又关闭

windmillknight commented 8 years ago

明白了,谢谢您。现在我又遇到了一个问题,在使用递归的时候,怎么样让程序每隔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); } } 我们的代码是这样的,这里的延时函数似乎不起作用。

jiangzidong commented 8 years ago

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);
KaboChueng commented 8 years ago

谢谢您,上次那个问题解决了。 现在的问题是程序多运行几次会卡住,有时重启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);

jiangzidong commented 8 years ago

@KaboChueng 你的描述像是'jsupm_apa102'这个出的问题 我建议你把 var ledStrip = new lib.APA102(144, 0); 放到start.js中, 不要多次实例化. 可以参考 led 的实现

windmillknight commented 8 years ago

您好,现在我们按照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文件的时候,有时候一个文件保存之后再打开,文件的最后一个字符就会消失,要是重复打开,就会持续消失。

jiangzidong commented 8 years ago

hi 关于spi接口的错误, 我并没有使用过, 像是你用的库本身的问题.

关于编辑js文件 "字符"消失, 请问能否再描述的详细一点, 以至于我们可以重现并分析问题原因

windmillknight commented 8 years ago

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

具体就是这个情况。

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

jjykh commented 8 years ago

你好,谢谢你提供图片信息。 我这边无法重现你说的“字符"消失的问题(Chrome,Firefox),能否提供你的操作系统版本、浏览器以及IoT SOL的版本呢?

windmillknight commented 8 years ago

您好,我的操作系统电脑是unbuntu14.04, edison版本是https://software.intel.com/iot/hardware/edison/downloads从这里下载的最新Yocto 映像 浏览器是Chrome 52.0.2743.82, ioT SOL是github 的master分支

jiangzidong commented 8 years ago

@windmillknight 你是下载官方firmware的是吗? 请在edison上面 运行 node -v 看一下nodejs版本

windmillknight commented 8 years ago

v 4.4.4

jjykh commented 8 years ago

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

windmillknight commented 8 years ago

好的,谢谢您。

jiangzidong commented 8 years ago

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

windmillknight commented 8 years ago

是哒~