Bosch Sensortec Community

    Showing results for 
    Search instead for 
    Did you mean: 

    BME680 state_save / state_load problem

    BME680 state_save / state_load problem

    Established Member

    using Arduino 1.88 / 1.85 with ESP8266 (lib 2.50 / 2.42) and two BME680 sensors.

    Final goal is to use these sensors in portable devices, but at first in normal mode without sleeping process.

    If using the config_state sample I can see that the state_save and state_load will not work correct.

    what is going on:
    1) BME starts - after some time will get right values as expected with accuracy=1
    2) some time later have still valid values with accuracy=2, sometimes is falling back to accuracy=1
    3) auto save procedure (with accuracy=2 (?) or even 1 (!) ) will be done
        (have canged this in code that I allow autosave only if accuracy >=2 - maybe "3" is correct? )
    4) After autosave to EEPROM with accuracy=3  reboot the ESP (power loss...)

    -> Load values from EEPROM

    5) BME start and show at first minutes no valid values and accuracy=0  (maybe correct ?)
    6) After some minutes accuracy=2 but IAQ is still 0 - for a very long time (hours).
        Resistance is in normal range (as before restarting) - so no changes.

    The only way is erase the EEPROM and start at new - then all is fine again (until next restart).

    I already made some control procedures - but not sure how to get a valid config_load after restarting.

    BTW: I have compared the saved and loaded values before - identical.

    Any idea?



    36 REPLIES 36

    Hi Bosch,

    it also makes sense from a technical point of view to save the state after any long time if accuracy ❤️ , so modify the code for this?

    I have still the problem that an indoor sensor have after 29 days (without interrupt) still the accuracy=1 - so state will be never saved.

    Can these saved values valid for any "reached calibration" (in case of rebooting device) or will it be ignored because accuracy=1 ?



    Community Moderator
    Community Moderator

    I believe the idea behind this condition was linked to the IAQ accuracy definition. If the accuracy=1, the library already considers that its current state is uncertain, therefore similar performance could be expected whether this state is reused or not. If the accuracy=2, the library is still calibrating to its sourrounding environment.

    Both can be argued, and our sample code is provided as reference. In this case the library will let your save/reload its state regardless of the accuracy, therefore you could use your favorite configuration based on the expected end-user experience.


    After restart, state_load is called and state is restored, great
    But IAQ_accuracy is at 0 so we shouldn't take into account the value until it is at least 1, isn't it?

    So with ULP mode, after restart, I'll wait around 20 minutes before using the values?


    Community Moderator
    Community Moderator

    Correct, the IAQ_accuracy=0 indicates that the gas sensor is still stabilizing, typically right after powering-up your device. Therefore it is up to you to decide how you will process the output data during this period, but the library indicates that the performance of this data cannot be guaranteed.

    Established Member

    save/load state is working now.

    After 5 minutes about the accuracy will be changed from "0" to last saved state, the values (IAQ, voc) will be near the latest measured values, so all seems to be ok.

    I have expected an issue if saving the state with accuracy=1 - possibly saved too early :
    iaqEstimate will be all the time "0", co2Equivalent will be "400", iaqAccuracy can be "1" - but these values will not be changed over a long time (hours) more, even it temperature, resistance are changing.

    To correct this a reboot will not help, because same values will be loaded from EEPROM - the only way is to erase EEPROM in such a case.

    I think this happen is save invalid (not ready) state values to EEPROM - so maybe a good idea is to wait a long time before saving, if not possible to wait for iaqAccuracy=3.

    This can be discussed in other topic, if any needs.