Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 

    Multiple BME680 devices with BSEC

    Multiple BME680 devices with BSEC

    Paetze
    Occasional Visitor

    Hello,

    is it possible to process multiple BME680 devices with BSEC library? Our application implements two BME680 devices, each using a dedicated I2C bus. As far as I understood, it's not possible to pass duplicate (physical) sensor IDs to he library. How can I pass different physical sensor instances to the BSEC library?

    Thanks,

    Paul 

    8 REPLIES 8

    handytech
    Community Moderator
    Community Moderator

    We are currently investigating the best way to approach this feature, and will provide an update once we can offer a potential solution.

    Hi,

    According to page 18 from BST-BME680-Integration-Guide-AN008-47.pdf, it should be possible no?

    Here pseudo code from that page:

     

    "2.8 Simulate multiple sensors using single BSEC instance


    Last but not least, it is possible to simulate data collected from multiple sensors with one BSEC instance by following below integration pseudo-code:
    call_update_subscription() // Same sampling period and outputs for all sensors
    retrieve_state_file() // Get default state string
    call_dummy_do_step() // do_step needs to be called for proper initialization of the library. Populate
    input struct with time stamp equal to zero, sensor id of BSEC_INPUT_TEMPERATURE and signal equal to 25
    for (i_sensor = 0; i_sensor < n_sensors; i_sensor++){ // For loop for all sensors
    load_state_file(i_sensor) // Load state string for the particular sensor. In case that the sensor was
    not used before, use default state string values from the library
    set_input(i_sensor, input) // Populate input struct using recorded data-point
    call_do_steps(input) // Call do_steps
    retrieve_state_file(i_sensor) // Retrieve state string for the particular sensor
    }"

    Hi,

    I'm also looking to accomplish the same thing.

    I tried following the pseudocode as provided in the integration guide.  But when i call bsec_do_steps with the provided values to "initialize" it returns an error.

    bsec_init();
    
    bsec_set_configuration(serialized_settings, n_serialized_settings, work_buffer, n_work_buffer);
    
    bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings, &n_required_sensor_settings);
    
    bsec_input_t input[1];
    input[0].sensor_id = BSEC_INPUT_TEMPERATURE;
    input[0].time_stamp = 0;
    input[0].signal = 25;
    
    bsec_output_t output[BSEC_NUMBER_OUTPUTS];
    uint8_t  n_output = BSEC_NUMBER_OUTPUTS;
    
    bsec_status = bsec_do_steps(input, n_input, output, &n_output);
    // bsec_status = BSEC_W_DOSTEPS_TSINTRADIFFOUTOFRANGE (4)

     This same error arrises when i skip this initialization step and loop over all sensors while swapping states.

     

    Am I doing something wrong?

    Okay, I think I have it figured out.

    The pseudocode given in the documentation is not very clear (and possibly wrong).

    I've managed to get it working using the following pseudocode:

    for (i_sensor = 0; i_sensor < n_sensors; i_sensor++){ // For loop for all sensors
        call_init_bsec() // Re-initiate the bsec library
        call_bsec_set_configuration() // Set the configuration
        call_update_subscription() // Set the subscription sampling rate
        load_state_file(i_sensor) // Load state string for the particular sensor. In case that the sensor was not used before, skip this step
        call_bsec_sensor_control() // Get the sensor settings to be used (This seems to be nessecary to call)
        set_input(i_sensor, input) // Populate input struct using recorded data-point
        call_do_steps(input) // Call do_steps
        retrieve_state_file(i_sensor) // Retrieve state string for the particular sensor
    }
    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist