0

我正在尝试弄清楚如何控制多个温度传感器。

设置:

  • 2个ESP8266微控制器
  • 2 个MCP9808温度传感器
  • 1 使用 Johnny-5 控制两个 ESP 的机器。

注意:每个 ESP8266 微控制器处理一个 MCP9808 温度传感器。

目标: 中央机器(运行 Johnny-Five 的 MacOS)在一个 Node JS 脚本下处理两个微控制器。

问题: 我可以控制一个微控制器/温度配对,但不能在同一个脚本下同时控制。显然,同时处理两者的关键在于知道如何处理 IC2 寻址。到目前为止,我还没有找到任何可以用我能理解的术语清楚地解释逻辑的页面、论坛、说明或其组合。

问题: 如何使用 Johnny-5 处理 I2C 来控制多个设备

代码: 它仅在处理一个传感器时有效,而不是同时处理两个传感器。换句话说,第 4 行注释掉它有效。未注释,它没有。

    var five = require("johnny-five");
    var {EtherPortClient}=require("etherport-client");
    var Thermometers=[
        //{Name:"Thermometer1", Ip:"192.168.1.101"}, //Uncommenting causes fail.
        {Name:"Thermometer2", Ip:"192.168.1.102"} 
    ];
    TrackThermometers();

    function TrackThermometers(){
        Thermometers.forEach(function(ThisThermometer, ThermometerCount){
            ThisThermometer.Board=new five.Board({
                port: new EtherPortClient({
                    host: ThisThermometer.Ip,
                    port: 3030
                }),
                repl: false
            });
            ThisThermometer.Board.on("ready", function(){
                ThisThermometer.Controller=new five.Thermometer({ //This cmd triggers the error
                    controller:"MCP9808"
                });
                ThisThermometer.Controller.on("change", function(){
                    console.log(this.id, this.fahrenheit);
                });
            })
        });
    }
4

1 回答 1

0

解决方案

J5 的API下有一个board属性(截至本文未记录) 。Thermometer将有问题的实例分配Board给该属性会将温度计实例与该板相关联。

例如,上面的代码将被编辑如下......

    ThisThermometer.Controller=new five.Thermometer({
       board: ThisThermometer.Board, //<-- the missing magic
       controller:"MCP9808"
    });

感谢Donovan Buck解决了这个问题。可能很快就会记录在案

于 2019-05-18T16:59:55.187 回答