Johnny-Five, I2C, Управление несколькими датчиками температуры с помощью ESP8266 - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь понять, как управлять несколькими датчиками температуры.

НАСТРОЙКА:

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

ПРИМЕЧАНИЕ: Каждый микроконтроллер ESP8266 обрабатывает один MCP9808Датчик температуры.

ЦЕЛЬ: Центральный компьютер (MacOS под управлением Johnny-Five) обрабатывает оба микроконтроллера по одному сценарию Node JS.

ПРОБЛЕМА: Я могу управлять одним спариванием Микроконтроллер / Температура, но не обоими по одному сценарию.Очевидно, что ключ к обработке обоих заключается в знании того, как обрабатывать адресацию IC2.До сих пор я не смог найти ни одной страницы, форума, инструкции или их комбинации, которые бы четко объясняли логику в понятных мне терминах.

ВОПРОС: Как обращаться с I2Cиспользование Johnny-Five для управления несколькими устройствами

КОД: Работает только при работе с одним датчиком, а не с обоими. Другими словами, с закомментированной 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);
                });
            })
        });
    }

1 Ответ

0 голосов
/ 18 мая 2019

РЕШЕНИЕ

В Thermometer API J5 есть свойство board (недокументированное на этот пост). Присвоение рассматриваемого экземпляра Board этому свойству связывает экземпляр термометра с этой платой.

В качестве примера приведенный выше код будет отредактирован следующим образом ...

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

Спасибо Доновану Баку за выяснение этого. Может быть задокументировано в ближайшее время .

...