I bought a BME680 sensor from Adafruit and I've been testing it for the last couple of days. Some questions arise however.
I know it's written in the datasheet that the IAQ calculation happens in a closed-source library from Bosch:
Bosch Sensortec BSEC software is available as a closed source binary which will be made available via a Software License Agreement (SLA) on the Bosch Sensortec website (https://www.bosch-sensortec.com/bst/products/all_products/BSEC).
The key features of the hardware-software system are:
Calculation of ambient air temperature outside of the device (e.g. phone)
Calculation of ambient relative humidity outside of the device
Calculation of indoor air quality (IAQ) level outside of the device
But there are other libraries/scripts out there which attempt to directly talk to the sensor without the BSEC library and use their own algorithm/calculation to obtain an IAQ value:
You've been asked this probably a thousand times but I'm asking it again: Would you be so kind to share the IAQ calculation algorithm? Or at least give some hints to get to a close to correct value?
In the last few days I've been using a C script from https://github.com/alexh-name/bsec_bme680_linux to in combination with the BSEC library to obtain some values. Example output:
2020-04-03 10:17:08,[IAQ (2)]: 23.54,[T degC]: 2.36,[H %rH]: 68.66,[P hPa]: 950.59,[G Ohms]: 985240,[S]: 0,[eCO2 ppm]: 487.148864746093750,[bVOCe ppm]: 0.4762972593307495117187500 2020-04-03 10:17:11,[IAQ (2)]: 23.56,[T degC]: 2.36,[H %rH]: 68.62,[P hPa]: 950.60,[G Ohms]: 985968,[S]: 0,[eCO2 ppm]: 487.308288574218750,[bVOCe ppm]: 0.4765842854976654052734375 2020-04-03 10:17:14,[IAQ (2)]: 23.62,[T degC]: 2.35,[H %rH]: 68.60,[P hPa]: 950.60,[G Ohms]: 987426,[S]: 0,[eCO2 ppm]: 487.841918945312500,[bVOCe ppm]: 0.4775463342666625976562500
After a couple of hours of runtime, the sensor eventually switched to accuracy 3.
If I stop the script and launch it again (even just for a few seconds), the IAQ accuracy drops to 0 again. Does that mean that the sensor needs to be actively queried all the time to stay at accuracy level 3? Shouldn't the sensor have at least a short-term memory to recall it's already calibrated?
From what I saw in the BSEC library, there's only support for C. Are there any plans to officially support python by creating a module?
By comparing the Adafruit BME680 python library and using the above mentioned C program using the BSEC library I noticed different values retrieved from the sensor. This is probably caused by the Adafruit's own sensor calculations. Are you (Bosch) in direct contact with Adafruit which could help to get the same values as retrieved from the BSEC library (supposing the data retrieved from BSEC is correct)? -> https://github.com/adafruit/Adafruit_CircuitPython_BME680/issues/29
Thanks in advance for any helpful answers!
Solved! Go to Solution.
I've kept the sensor running for more than one week now to let it calibrate properly.
On positive notes: Temperature, Humidity and Pressure seem to give very accurate readings. Nice!
However I am kind of confused by the raw gas readings (resistance in ohm). Even these resistance values seem to be dependable on the humidity. I see that during the night (with high humidity) the resistance shows extreme changes (from 95K to 4.6M). Only in the last 2 days seem to be more "stable".
My problem is how am I able to represent a "correct" air quality when even the raw gas values change because of humidty? The IAQ value from BSEC can only be used when humidity has stabilized during the day. If I want to try and create my own calculation, this is still based on the raw resistance values but they too, are obviously impacted by humidity. Does that even make sense?
Any thoughts on this?
It is hard to comment without reference or absolute sensor, but I would say that your observations make sense. In general it is known that ambient humidity will impact gas sensing, which is compensated for in our IAQ calculation algorithms. Please note that VOC (and other pollutant) compounds and concentrations vary between outdoor and indoor use-cases, and expect our current outputs to perform optimally indoor for stationary applications.
I am new to this sensor. wanted to use SPI interface.
To use SPI interface,the 2 registers were set as below,
0x75 address sets 0x1(spi_3w_en) and
0x72 address sets to 0x40(spi_3w_int_en), and then SPI_Data from sensor is stopping to come out.
without this configuration, at least SPI_data is coming out from sensor.
Can anyone help how to set SPI Configuration?
The ID from page 0 is readable in SPI interface. trying to read the oversampling registers on page 1 register mem ,after page1 mem is set and writing control data as required. read register values are expected as write data, but read values are always all "0xFF". My question is if the control registers are readable or not? datasheet doesnot say anything about thta.Can anyone help ? Assumed that the SPI interface is established due to The Check ID register was written and the result was correct as ID , 0x61.