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.
Thank you for your quick repply, we are using the official drivers from Bosch:
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.