Enviro Indoor VOC readings


I bought the Enviro Indoor and based on the product page and printing on the board it should be capable of reading VOCs.

Out of the box this is not in the MQTT packet. I can’t seem to fin any information within the GIT page or anything within the files on the board.

Has anybody obtained readings from the gas scanner or know of info of where I can attack this sensor?

Thanks in advance,


Was just about to post the same question. Would really appreciate an answer to this!!!


One thing to try, is to reflash it with the Enviro uf2 file, with the PMS sensor connected. If it gets detected as an Enviro Urban that may fix your issue.
Release Version 1.19.6 · pimoroni/pimoroni-pico (github.com)

Have a look at this, might help?
enviro/urban.py at main · pimoroni/enviro (github.com)

Incorporating the BME688 gas sensor into the Enviro software is still on our to-do list - I don’t think there’s a Github issue about that one on the go if you wanted to open one? Issues · pimoroni/enviro · GitHub

I think we were going to see if it was possible to pull in the Bosch drivers so we could use the official air quality algorithm, which is why we didn’t manage to implement it in time for launch.

Our current BME68X drivers do read the raw reading from the gas sensor though, so if you wanted to add some code to indoor.py to add that to your reporting in the meantime it should be fairly straightforward. You can read the gas element of the sensor on Enviro like this:

from breakout_bme68x import BreakoutBME68X
from enviro.board import i2c

bme688 = BreakoutBME68X(i2c, address=0x77)

data = bme688.read()
1 Like

Thanks all,

I was going to have a go at bringing the code across from the other boards tonight but looks like @hel has made it pretty simple for me. When I get a second I will open the GitHub issue if that helps put it on the official roadmap.

Kind Regards,


1 Like

So it appears that all required code is present, I was ignorant to the fact the BME688 included the “VOC” sensor. All that was required was adding to the return in the indoor.py file. For those in need simply add to the return definition near the top of the file:

  return [

And in the return at bottom of the file as per below:

return {
    "temperature": round(data[0], 2),
    "humidity": round(data[2], 2),
    "pressure": round(data[1] / 100.0, 2),
    "luminance": lux_from_rgbc(r, g, b, c),
    "color_temperature": colour_temperature_from_rgbc(r, g, b, c),
    "voc": round(data[3], 2)

According to the data sheet this returns a resistance in Ohms and not a particle count, but at least is a metric. You can create your own Indoor Air Quality index, see the following GitHub page on how others have done this previously:

G6EJD - BME680-Example

Thanks for the help on this one!



I’ll be playing around with some of this once my just recently placed order arrives. It’s going by snail mail so may be a week or more before I get it.