Как получить API «Термометр» от Johnny-Five для работы с двумя датчиками температуры - PullRequest
0 голосов
/ 16 мая 2019

НАСТРОЙКА:

  • 2 ESP8266 Микроконтроллеры
  • 2 MCP9808 Температурные датчики
  • 1 Машина, управляющая обоими ESP с помощью Johnny-Five.

Примечание. Каждый микроконтроллер ESP8266 работает с одним датчиком температуры MCP9808.

Это продолжение Этот вопрос

Первоначально мы думали, что проблема заключается в отсутствии управления адресацией I2C. Но, как мудро указывает Джон Ромки , у нас есть только один датчик на контроллер, предполагая, что адресация I2C здесь не проблема.

ПРОБЛЕМА:

В приведенном ниже коде мы можем создать несколько плат, без проблем, каждая плата с соответствующим датчиком. И мы можем создать два независимых объекта J5 ThisThermometer. Но оба объекта ThisThermometer возвращают показания контроллера / датчика "A", игнорируя контроллер / датчик "B"

ВОПРОС:

Есть ли что-то, что мы можем добавить к опциям в new five.Thermometer() (т.е. ThermOps), который скажет J5 связать ThisThermometer объекты с их соответствующими досками?

Большой вопрос: как обрабатывать 2 пары микроконтроллер / термометр по одному сценарию?

КОД:

var five = require("johnny-five");
var {EtherPortClient}=require("etherport-client");
var Setups=[
    {id:"A", Ip:"192.168.1.101"},
    {id:"B", Ip:"192.168.1.102"}
];
InitSetups();

function InitSetups(){
    var Envs;
    Envs=[];
    Setups.forEach(function(ThisSetup, ThermometerCount){
        Envs.push({
            id:ThisSetup.Id,
            port: new EtherPortClient({
                host: ThisSetup.Ip,
                port: 3030
            }),
            repl: false
        });
    });
    new five.Boards(Envs).on("ready", function(){
        this.each(function(ThisBoard){
            var ThisThermometer, ThermOps;
            ThermOps={id:ThisBoard.id, controller:"MCP9808"};
            ThisThermometer=new five.Thermometer(ThermOps);
            //****2 Thermometer instances, but no way to associate with their respective boards.
            ThisThermometer.on("change", function(){
                console.log(this.id, this.fahrenheit);
            });
        });
    });
}
...