07-15-2019 09:47 PM
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
07-25-2019 12:18 PM
We are currently investigating the best way to approach this feature, and will provide an update once we can offer a potential solution.
08-07-2019 11:02 PM
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
}"
12-10-2019 04:23 AM
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?
12-15-2019 10:06 PM
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
}