01-12-2024 01:12 PM - edited 01-12-2024 01:37 PM
Hello!
I want to use BSEC library 2.4.0.0 build for ESP32-C2C3 on another riscv platform.
Sample application build up succesfully.
I read data from BME680, raw sensor data seems ok
I use valid timestamps in ns
Mode is LP
I wait forsensor_settings.next_call
I followed guide in FAQ section
BSEC configuration for BME680 has been set up with no error
no error on bsec_init
no other warnings or errors
I tried with fresh air, defferent configuration, different delays, all I can find in the forum here.
In the BSEC output I have temperature, humidity and other values I have already from BME680, but IAQ sesnor value and accuracy always 0.
Maybe library is not appropriate for my platform.
So I am concerned about initial valule for IAQ.
Should initial value for IAQ be 25, or it could be zero?
I attached output data from BSEC with raw valuesfrom BME680.
Note that timestamps is devided by 1000000, so they are passed to BSEC lib in ns.
Could you please share some test data that I can test if library in general can work on my platform?
01-12-2024 01:42 PM
void StartBME68XTask(void const * argument)
{
return_values_init ret;
struct bme68x_dev bme_dev;
memset(&bme_dev,0,sizeof(bme_dev));
/* Call to the function which initializes the BSEC library
* Switch on low-power mode and provide no temperature offset */
#if defined(BME68X_OUTPUT_GAS_ESTIMATE)
#if defined(USE_I2C_INTERFACE)
ret = bsec_iot_init(BSEC_SAMPLE_RATE_SCAN, 0.0f, SensorAPI_I2Cx_Write, SensorAPI_I2Cx_Read, bst_delay_us, state_load, config_load, bme_dev);
#elif defined(USE_SPI_INTERFACE)
ret = bsec_iot_init(BSEC_SAMPLE_RATE_SCAN, 0.0f, SensorAPI_SPIx_Write, SensorAPI_SPIx_Read, bst_delay_us, state_load, config_load, bme_dev);
#endif
#elif defined(BME68X_OUTPUT_GAS_IAQ)
#if defined(USE_I2C_INTERFACE)
ret = bsec_iot_init(BSEC_SAMPLE_RATE_LP, 0.0f, SensorAPI_I2Cx_Write, SensorAPI_I2Cx_Read, bst_delay_us, state_load, config_load, bme_dev);
#elif defined(USE_SPI_INTERFACE)
ret = bsec_iot_init(BSEC_SAMPLE_RATE_LP, 0.0f, bus_write, bus_read, sleep_n, state_load, config_load, bme_dev);
#endif
#endif
if (ret.bme68x_status)
{
/* Could not intialize BME68x */
printf("Could not intialize BME68x,ret.bme68x_status=%d\r\n", ret.bme68x_status);
while(1);
}
else if (ret.bsec_status)
{
/* Could not intialize BSEC library */
printf("Could not intialize BSEC library,ret.bsec_status=%d\r\n", ret.bsec_status);
while(1);
}
#if defined(BME68X_OUTPUT_GAS_ESTIMATE)
/* Call to endless loop function which reads and processes data based on sensor settings */
/* State is saved every 10.000 samples, which means every 10.000 * 3 secs = 500 minutes */
bsec_iot_loop(bst_delay_us, get_timestamp_us, output_ready, state_save, 10000);
#elif defined(BME68X_OUTPUT_GAS_IAQ)
bsec_iot_loop(sleep_n, get_timestamp_us, output_iaq_ready, state_save, 10000);
#endif
}
01-12-2024 01:42 PM
static bsec_library_return_t bme68x_bsec_update_subscription(float sample_rate)
{
bsec_sensor_configuration_t requested_virtual_sensors[8];
uint8_t n_requested_virtual_sensors = 8;
uint8_t n_required_sensor_settings = BSEC_MAX_PHYSICAL_SENSOR;
bsec_library_return_t status = BSEC_OK;
/* note: Virtual sensors as desired to be added here */
requested_virtual_sensors[0].sensor_id = BSEC_OUTPUT_IAQ;
requested_virtual_sensors[0].sample_rate = sample_rate;
requested_virtual_sensors[1].sensor_id = BSEC_OUTPUT_STATIC_IAQ;
requested_virtual_sensors[1].sample_rate = sample_rate;
requested_virtual_sensors[2].sensor_id = BSEC_OUTPUT_CO2_EQUIVALENT;
requested_virtual_sensors[2].sample_rate = sample_rate;
requested_virtual_sensors[3].sensor_id = BSEC_OUTPUT_BREATH_VOC_EQUIVALENT;
requested_virtual_sensors[3].sample_rate = sample_rate;
requested_virtual_sensors[4].sensor_id = BSEC_OUTPUT_RAW_PRESSURE;
requested_virtual_sensors[4].sample_rate = sample_rate;
requested_virtual_sensors[5].sensor_id = BSEC_OUTPUT_RAW_TEMPERATURE;
requested_virtual_sensors[5].sample_rate = sample_rate;
requested_virtual_sensors[6].sensor_id = BSEC_OUTPUT_RAW_HUMIDITY;
requested_virtual_sensors[6].sample_rate = sample_rate;
requested_virtual_sensors[7].sensor_id = BSEC_OUTPUT_RAW_GAS;
requested_virtual_sensors[7].sample_rate = sample_rate;
/* Call bsec_update_subscription() to enable/disable the requested virtual sensors */
status = bsec_update_subscription(requested_virtual_sensors, n_requested_virtual_sensors, required_sensor_settings,
&n_required_sensor_settings);
return status;
}
01-15-2024 02:49 AM
Hi dimaplusplus,
Could you provide the complete software code related to BME688 for review?
01-18-2024 04:29 PM