约翰尼五和多个板 - 如何识别我连接到哪个板

Johnny five and multiple boards - how to recognize which board I am connected to

假设我正在将 2 个 Arduino 板连接到计算机,我想在这里使用 Johnny-5。每个板用于不同的任务,例如一个读取传感器,另一个控制一些 LED。因此,向适当的董事会发出 read/write 信号对我来说很重要。

我在这里寻求一些灵活性,因为我发现:

这里我不知道哪块板子有key A和哪块b,我不能保证我的arduinos连接到另一台机器时keys不会相反:

new five.Boards([ "A", "B" ]);

在这里我确切地知道哪个板连接到哪个端口,但如果我打算将板连接到另一台机器,我不能硬编码:

new five.Boards([ "/dev/cu.usbmodem621", "/dev/cu.usbmodem411" ]);

我现在唯一的想法是使用一种跳线,例如将 pin10 连接到板 1 上的 +5V,然后连接到板 2 上的地,或者甚至使用电阻器并具有多个信号电平(如果我打算连接更多的板),然后探测引脚并获取我连接到哪个板的信息并将其分配给阵列中的 A 或 B。之后我会 运行 我的程序的主要代码。

我的问题是:您是否看到任何其他方法可以保证您 "talk" 纠正电路板?

选项 1:使用拨码开关设置设备 ID

使用 2 或 4 开关拨码开关来识别板。每个开关都可以连接到一个单独的数字输入。

开关越多,您可以拥有的板子就越多

  • 1 位 - 2 板
  • 2 位 - 4 板
  • 4 位 - 16 板
  • 8 位 - 256 板

在 2 位配置中,

  • 00 - 板 A
  • 01 - 板 B
  • 10 - 板 C
  • 11 - 板 D

选项 2:修改 Firmata 并硬编码设备 ID

扩展和自定义 firmata 固件。我确定这不是一个很好的选择。

选项 3:使用 filename/firmware 名称

我从 Johnny-Five 和 Frimata 小组那里得到了很多很好的建议。强尼五号使用文件名作为固件名,可以通过Johnny-Five中的棋盘对象访问。

firmware: { version: [Object], name: 'AdvancedFirmata.ino' },

就我而言,我只是在编译 AdvancedFirmata 代码并将其上传到设备时重命名了文件名。

firmware: { version: [Object], name: 'boardA.ino' },

这就是我要在我的项目中使用的,通过board.io.firmware.name

来识别不同的板

这似乎是最好的解决方案。

更新:这是一个完整的例子。就我而言,我让事情变得更加可配置,但这会起作用:

var boards = new five.Boards("A","B");
var j5 = {}
boards.on("ready", function(){
  this.each(function(board){

    // Set up LED on board B
    if(board.io.firmware.name == "BoardA.ino"){
      j5.ledA = new five.Led({
        pin: 13,
        board: board
      });
    }

    // Set up LED on board B
    else if (board.io.firmware.name == "BoardB.ino"){
      j5.ledB = new five.Led({
        pin: 13,
        board: board
      });
    }


  });
});

现在您可以:

// Toggle LED A every 500ms
setInterval(function(){
  j5.ledA.toggle();
},500); 

// Toggle LED B every 250ms
setInterval(function(){
  j5.ledB.toggle();
},250);