【问题标题】:firmatajs, multiple Arduinos give timeout (johnny-five, cylonjs)Firmatajs,多个 Arduinos 超时(johnny-5,cylonjs)
【发布时间】:2015-02-09 17:31:02
【问题描述】:

我有两个使用标准 StandardFirmata 闪存的 Arduino unos,我正在尝试使用一个简单的节点项目(johnny-5 npm 包)进行多板演示。当我分别尝试它们时,两个 arduino 都可以工作。使用以下代码:

var five = require("johnny-five");

var boardOne = new five.Board({ id: "A", port: "/dev/cu.usbmodem1d1141" });
boardOne.on("ready", function(){
    var led = new five.Led({
    pin: 13,
    board: this
    });
    led.on();
});

node index.js 
1418288836782 Connected /dev/cu.usbmodem1d1141 
1418288836784 Repl Initialized 
>> 

在尝试多板示例时,我得到: 设备或固件错误 连接到板时发生超时。 请检查您是否使用正确的固件正确刷新了电路板。

var five = require("johnny-five");

var ports = [
    { id: "A", port: "/dev/cu.usbmodem1d1141" },
    { id: "B", port: "/dev/cu.usbmodem1d1131" }
];

new five.Boards(ports).on("ready", function(){
    var led = new five.Led({
        pin: 13,
        board: this[0]
    });
    led.on();
});


更新 #1:

出于好奇,我尝试更换 USB 电缆并得到了一些不同的结果:

1) 似乎只有一个 arduino 连接:

1418318698635 Device(s) /dev/cu.usbmodem1a1231,/dev/cu.usbmodem1a1241 
1418318698642 Device(s) /dev/cu.usbmodem1a1241 
1418318701849 Connected /dev/cu.usbmodem1a1231 
1418318701850 Board ID:  A 

或 2) 我收到一个错误:

.../johnny-five-master/node_modules/firmata/lib/firmata.js:246
board.pins[pin].analogChannel = currentValue;
                              ^
TypeError: Cannot set property 'analogChannel' of undefined
at Object.SYSEX_RESPONSE.(anonymous function) [as 106] 
(.../johnny-five-master/node_modules/firmata/lib/firmata.js:246:35)


更新 #2:

我使用 cylon.js 进行了上述测试,得到了相同的结果。仍然不知道如何解决这个问题:( 一个 arduino 工作正常,多个什么都不做。 (可能是 osx 相关的问题?)

更新 #3:

我在 johnny-5 代码中添加了一些日志,这绝对是连接问题(我认为!?)。第二个 Arduino 从不响应。我切换了arduinos的顺序并得到了相同的结果(第一个连接,另一个没有响应)。连接是异步的,所以它可能在某处被阻塞。两个 arduino 上的灯肯定表明正在进行一些操作。

node index.js
err: undefined --- type: connect --- io: /dev/tty.usbmodem1d1111
err: undefined --- type: connect --- io: /dev/tty.usbmodem1d1121
err: undefined --- type: ready --- io: /dev/tty.usbmodem1d1111
1418467187527 Connected /dev/tty.usbmodem1d1111 
1418467187527 Board ID:  A 
1418467284327 Device or Firmware Error A timeout occurred while connecting to the Board. 
Please check that you've properly flashed the board with the correct firmware.

【问题讨论】:

  • 我还尝试了官方示例(例如/board-multi.js)并用 StandardFirmata 重新刷新了两个 arduinos,但我仍然超时.. 可能知道发生了什么的人?
  • 看起来代码应该可以工作,但是您遇到了通信问题。你最后一次更新约翰尼五号是什么时候?
  • 我尝试了来自 github 的代码和 node 包。今天早上全新安装。
  • 看起来 Divan Visagie 在这里为您打开了一个错误:github.com/rwaldron/johnny-five/issues/532 :)

标签: node.js arduino arduino-uno johnny-five


【解决方案1】:

感谢@izar 发布此问题,然后在Johnny-Five gitter 频道向我们提出问题。从那里开始,Divan Visagie(来自 Johnny-Five 核心团队)致力于对该错误进行分类,并能够通过复制进行确认。这揭示了 Firmata.js 中的一个错误,其中传递给 Serialport 的选项被该类扩展。由于重用了默认对象并且Object.assign 不是“深度”操作,因此更改是针对引用而不是副本进行的。结果是第二次初始化得到了一组“默认值”,这些“默认值”加载了第一个实例自己的数据。该问题已通过更改 Firmata 以对每个实例使用新的默认值来解决。 Here's the patch

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多