Multiple bme680 sensors on esp32-s3

I have an esp32-s3 board and four BME680 sensors that I want to use to monitor my ventilation system (air in before/after heat exchanger, air out before/after heat exchanger).

I was originally planning to use SPI, but apparently SPI is not supported for the bme680, just the BME280?

I’m now using I2C instead and can successfully operate a single sensor using the bme68x_bsec2_i2c component. However, I’m struggling to configure multiple sensors. On the I2C side it should be fine, using two buses, and putting two sensors on each bus, as the sensor can be configured to use one of two I2C addresses.

The bme68x_bsec2_id documentation mentions that one can set bme68x_bsec2_id:

The ID of the bme68x_bsec2_i2c component sensors will refer to. Useful when multiple devices are present in your configuration.

However, trying to define bme68x_bsec2_i2c as a list in the YAML fails compilation because a dict is expected (expected a dictionary), e.g. like this:

bme68x_bsec2_i2c:
  - address: 0x76
    model: bme680
    operating_age: 28d
    sample_rate: LP
    supply_voltage: 3.3V
    id: freshair

It seems to support that the component would need to set MULTI_CONF in its __init__.py, which this component doesn’t. Am I missing something or are multiple BME680 sensors not supported in the bme68x_bsec2_i2c integration, and the ID mechanism is pointless?

Finally, I noticed that the older bme680_bsec component does set MULTI_CONF and does seem to support multiple sensors, but apparently it is not supported on esp32-s3.

Any ideas or recommendations? Do I need to switch to an ESP8266 and use bme680_bsec?

For some background, I want to use ethernet instead of WIFI for this device, and there were very few boards that came with an ethernet controller, which is why I got the esp32-s3 board. Switching to an ESP8266 likely would mean to also add a separate ethernet controller…

What you’ve done there is what I would have tried and “looks right” to me.

So you tried a bit like this?

bme68x_bsec2_i2c:
  - address: 0x76
    model: bme680
    operating_age: 28d
    sample_rate: LP
    supply_voltage: 3.3V
    id: freshair
  - address: OtherAddress
    model: bme680
    operating_age: 28d
    sample_rate: LP
    supply_voltage: 3.3V
    id: freshair2

Why don’t you just change address of a second one? Then you can connect both to same I2C.

Isn’t that what they said they are trying to do?

1 Like

Indeed, i missed that. My mistake, sorry…

1 Like

That wouldn’t make sense since it doesn’t support multiple I2C buses.
You should go with Esp32 aka Wroom32 (not S or C). Or use I2C multiplexer.

1 Like

Thanks everyone!

Yes exactly.

Oh, good point. I’m now getting the Olimex ESP32-POE-ISO-WROVER which comes with onboard Ethernet and uses the plain Esp32.

You can follow various old crumbs for similar looking issues for other bme680 components. They look suspiciously similar.

With this issue, personally I would post what you have on the ESPHome Discord and see what some of the devs over there reckon. Then pending what they say, maybe open an issue.