BME280 vs BME680 vs ENS160 vs SCD41
All four get sold as "air quality sensors," and they measure completely different things. Here's what each one actually reads, the marketing trap in the middle, and a straight answer for every use case.
Side by side
What the BME280, BME680, ENS160 and SCD41 actually measure
| Sensor | Measures | i2c address | The catch |
|---|---|---|---|
| BME280 | temperature, humidity, pressure | 0x76 / 0x77 | no air-quality sensing at all |
| BME680 | those three + VOC gas resistance | 0x76 / 0x77 | useful IAQ needs Bosch's BSEC library and a burn-in period |
| ENS160 | TVOC, AQI, estimated eCO2 | 0x52 / 0x53 | eCO2 is inferred from VOCs — it is not a CO2 measurement |
| SCD41 | true CO2 + temperature, humidity | 0x62 | priciest of the four; hungriest while measuring |
The trap
eCO2 is not CO2: BME680 and ENS160 vs the SCD41
The single most important thing this comparison can tell you: only the SCD41 measures carbon dioxide. It fires a light pulse into a chamber and listens — photoacoustically — to how much of it CO2 molecules absorb. That's a physical measurement of the actual gas.
The ENS160's "eCO2" (and the SGP30's before it) is an estimate: the chip measures VOCs — which people exhale alongside CO2 — and infers what CO2 would plausibly be if humans were the only source. In a sealed office it correlates decently. Add a scented candle, cleaning spray or a glass of wine and the "CO2" reading rockets while actual CO2 hasn't moved. The BME680 sits in the same family: its heated metal-oxide plate reads total VOC load as a resistance, and Bosch's BSEC library turns that into an IAQ index plus its own CO2-equivalent guess — genuinely useful as a trend, never as a number to ventilate a classroom by.
Rule of thumb: if the decision matters — ventilation, CO2 alarms, occupancy — measure real CO2. If you just want "the air got worse, do something," a VOC sensor is cheaper and fine.
The verdicts
Which air sensor for which project
Weather station, temperature logger, anything without "air quality" in it → BME280. Cheapest, lowest power by far (~µA), best-supported driver ecosystem in existence. Don't pay for a gas sensor you won't use.
One board that does environment + a usable IAQ trend → BME680. You get everything the BME280 reads plus VOC sensing — accept that good output means linking Bosch's BSEC blob and letting the sensor burn in for a day or two.
Adding air-quality awareness to an existing build, cheaply → ENS160. Modules pair it with an AHT21 for temp/humidity, it's simple to read, and TVOC/AQI trends are exactly what "should I open a window?" needs. Ignore the eCO2 number.
Real CO2 — ventilation, alarms, classrooms, grow rooms → SCD41. It's the only one measuring the actual gas, and its single-shot mode makes battery operation practical. (Its cheaper sibling SCD40 is the same silicon family with a narrower range.)
Bus logistics are painless: ENS160 (0x52) and SCD41 (0x62) never clash with the Bosch parts, so any combination shares one bus — the only trap is BME280 + BME680 together, since both default to 0x76. Flip one to 0x77 with its address jumper, or read the conflict guide. All four appear in the address list and work over Qwiic/STEMMA QT.
Get one
Questions
Air-sensor FAQ
Can the BME680 measure CO2?
No. Its gas sensor measures the electrical resistance of a heated metal-oxide surface, which changes with total VOC exposure. Bosch's BSEC library converts that into an air-quality index and a 'CO2 equivalent' estimate, but nothing in the chip counts CO2 molecules. For real CO2 you need a photoacoustic or NDIR sensor like the SCD41.
Is eCO2 from the ENS160 or SGP30 accurate?
It's an inference, not a measurement: the chip watches VOC levels (which humans also exhale alongside CO2) and estimates what CO2 'probably' is. In a room of people it tracks reasonably; open a window, light a candle, or use hand sanitiser and the estimate swings wildly. Treat eCO2 as a trend indicator, never as a number for ventilation decisions.
Can I run a BME280 and BME680 on the same bus?
Yes, but they collide out of the box — both default to address 0x76. Move one to 0x77 via its SDO/address jumper and they coexist fine. The ENS160 (0x52/0x53) and SCD41 (0x62) don't clash with either, so all four sensors can genuinely share two wires.
Which of these uses the least power?
The BME280 by a wide margin — around 3.6 µA at one reading per second, and it sleeps between readings. The BME680's heated gas plate pulls ~12–18 mA while burning, and the SCD41 draws tens of mA during its photoacoustic measurement (its single-shot mode helps for battery projects). For coin-cell logging, BME280; for battery CO2, SCD41 in single-shot.
Do these sensors need a level shifter with a 5 V Arduino?
The bare chips are all 3.3 V-class parts. Qwiic versions are strictly 3.3 V; Adafruit STEMMA QT versions include regulation and level shifting so 5 V hosts are safe; bare modules vary. Check your specific board, and see our level-shifting guide when in doubt.