Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

222
Vistas
NodeJS - Two same I2C address BME280 sensors connected through TCA9548A multiplexer (clashing results)

Good evening everyone!

For some reason there are a lot information on TCA9548A in Python, but not much on NodeJS.

I was trying to use this library from Github TCA9548A with this library BME280

Both BME280 sensors have address 0x76.

TCA9548A - 0x70.

The final code I was running was this:

const tca9548a_1 = new TCA9548A({addr: 0x70, bus: 1});

//as an example, if using two bme280 temp sensors (sensor1 and sensor2)
//that have the same address need to enable the specific 
//multiplexer port each time you want to read from a certain device
//singlePortOn activates the port of the argument and 
//disables all other ports
//argument has to be a number 0-7
//
//use a callback to ensure that the port is enabled 
//before proceeding with other processing
//
//for example, sensor1 is attached to port 2 on the multiplexer
//
tca9548a_1.singlePortOn(2, doSomethingWithSensor());

//then read from sensor2 attached to port 6 on the multiplexer
//
tca9548a_1.singlePortOn(7, doSomethingWithSensor());


function doSomethingWithSensor () {
  //process sensor data magic
const bme280 = require('bme280');

const format = number => (Math.round(number * 100) / 100).toFixed(2);
const delay = millis => new Promise(resolve => setTimeout(resolve, millis));

const reportContinuous = async _ => {
  const sensor = await bme280.open({
    i2cBusNumber: 1,
    i2cAddress: 0x76,
    humidityOversampling: bme280.OVERSAMPLE.X1,
    pressureOversampling: bme280.OVERSAMPLE.X16,
    temperatureOversampling: bme280.OVERSAMPLE.X2,
    filterCoefficient: bme280.FILTER.F16
  });

  for (let i = 1; i <= 250; ++i) {
    const reading = await sensor.read();
    console.log(
      `${i} ` +
      `${format(reading.temperature)}°C, ` +
      `${format(reading.pressure)} hPa, ` +
      `${format(reading.humidity)}%`
    );
    await delay(1000); // 1 second
  }

  await sensor.close();
};

reportContinuous().catch(console.log);

}

Output and the problem: Only one sensor is being read and is outputting information that is doubled. This code is not reading information from them both, but just from one.

I am not very strong in JavaScript, but really want to learn. Seems like I need to create a callback - from this comment in the code:

//use a callback to ensure that the port is enabled before proceeding with other processing

Will greatly appreciate any help on this subject.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Code that worked for me:

const TCA9548A = require('tca9548a');
const i2c = require('i2c-bus');

const tca9548a_1 = new TCA9548A({ addr: 0x70, bus: 1 });

function two(callback) {
    tca9548a_1.singlePortOn(2);
    console.log("Two")
    const bme280 = require('bme280');
    bme280.open().then(async sensor => {
        console.log(await sensor.read());
        await sensor.close();
    }).catch(console.log);
    callback()
}

function seven(callback) {
    return setTimeout(() => {
        tca9548a_1.singlePortOn(7);
        console.log("Seven")
        const bme280 = require('bme280');
        bme280.open().then(async sensor => {
            console.log(await sensor.read());
            await sensor.close();
        }).catch(console.log);
        callback()
    }, 1000);    
}

function run() {
    two(() => {
        seven(() => { })
    })
}

run();

OUTPUT:

Two
{
  temperature: 28.303820903622544,
  pressure: 991.7407636221005,
  humidity: 39.50036416630162
}
Seven
{
  temperature: 24.77324210727238,
  pressure: 991.0048461479205,
  humidity: 25.391542980733707
}
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda