12-03-2021 07:35 PM
Some of my sensors after a couple of months start to get invalid readings from the bme 680 driver, sometimes it's the atmospheric pressure values, other times is the temperature/Humidity and/or the raw gas resistance. Basically we start to get invalid values like negative values for atmospheric pressure, super high/low values for humidity or temperature.
Is anyone aware of this issues for the BME680? Before i was thinking that mabye it was because our sensors where outdoor's, but now they are protected with a hidrophobic filter and i start to wonder if it's not an issue with the sensor/firmware.
This happens randomly after some months for some sensors, for others was after a year.
12-05-2021 05:23 AM
Could you describe you hardware and software information you used? Like your hardware schematic, whch software you referred, etc.
12-05-2021 07:38 PM - edited 12-05-2021 07:49 PM
Thank you for your quick repply, we are using the official drivers from Bosch:
BoschSensortec/BME68x-Sensor-API: Common Sensor API for the BME680 and BME688 sensors (github.com)
And the hardware was developped by us.
Our config of the BME680 is as follows:
rslt = bme68x_init(&gas_sensor);
if (rslt == BME68X_OK)
conf.filter = BME68X_FILTER_OFF;
conf.odr = BME68X_ODR_NONE;
conf.os_hum = BME68X_OS_16X;
conf.os_pres = BME68X_OS_1X;
conf.os_temp = BME68X_OS_2X;
rslt = bme68x_set_conf(&conf, &gas_sensor);
heatr_conf.enable = BME68X_ENABLE;
heatr_conf.heatr_temp = 300;
heatr_conf.heatr_dur = 100;
rslt = bme68x_set_heatr_conf(BME68X_FORCED_MODE, &heatr_conf, &gas_sensor);
//Calculate delay period in microseconds
meas_period = bme68x_get_meas_dur(BME68X_FORCED_MODE, &conf, &gas_sensor) + (heatr_conf.heatr_dur * 1000);
Every 3 seconds we set forced mode and read sensor data as follows:
int8_t dataStatus = 0x00;
int8_t rslt = bme68x_set_op_mode(BME68X_FORCED_MODE, &gas_sensor);
if(rslt == BME68X_OK)
struct bme68x_data data;
rslt = bme68x_get_data(BME68X_FORCED_MODE, &data, &n_fields, &gas_sensor);
if(rslt == BME68X_OK && n_fields)
dataStatus = data.status;
/* Avoid using measurements from an unstable heating setup */
if(data.status & BME68X_GASM_VALID_MSK)
currentSensorsData.humidity = data.humidity;
currentSensorsData.pressure = data.pressure / 100.0f;
currentSensorsData.temperature = data.temperature;
currentSensorsData.gasResistance = data.gas_resistance;
All this works fine for a long time, and for some sensors, after a couple of months they start to report really weird values and do not recover anymore, even after restarting or taking of the power completelly and trying to communicate with the BME680.
We are using floating point data output #define BME68X_USE_FPU
We are using an ATMEGA328PB, and i will share the parts of the schematics regarding the BME680 as son as i can, just need some time to collect that.
12-06-2021 08:06 AM
From your code, it uses the official driver code.
Your device works outdoors. When abnormal data occurs, what is the surrounding working environment?