diff --git a/epicardium/modules/bme680.c b/epicardium/modules/bme680.c index d98b07aa06748e35eaef83a11b6f39e784a98c02..3ba714bad7bea25b13e1845da243c988a78afe29 100644 --- a/epicardium/modules/bme680.c +++ b/epicardium/modules/bme680.c @@ -10,8 +10,8 @@ #include "modules.h" #include "modules/log.h" -#define HEATR_TEMP 320 -#define HEATR_DUR 150 +#define HEATR_TEMP 320 +#define HEATR_DUR 150 static bool initialized; static struct bme680_dev bme; @@ -33,93 +33,100 @@ static int convert_error(int8_t error) } } -int epic_bme680_init() { - int8_t result = BME680_OK; - - if (__builtin_expect(!initialized, 0)) { - - bme.dev_id = BME680_I2C_ADDR_PRIMARY; - bme.intf = BME680_I2C_INTF; - bme.read = card10_bosch_i2c_read; - bme.write = card10_bosch_i2c_write; - bme.delay_ms = card10_bosch_delay; - /* amb_temp can be set to 25 prior to configuring the gas sensor +int epic_bme680_init() +{ + int8_t result = BME680_OK; + + if (__builtin_expect(!initialized, 0)) { + bme.dev_id = BME680_I2C_ADDR_PRIMARY; + bme.intf = BME680_I2C_INTF; + bme.read = card10_bosch_i2c_read; + bme.write = card10_bosch_i2c_write; + bme.delay_ms = card10_bosch_delay; + /* amb_temp can be set to 25 prior to configuring the gas sensor * or by performing a few temperature readings without operating the gas sensor. */ - bme.amb_temp = 25; + bme.amb_temp = 25; result = bme680_init(&bme); if (result != BME680_OK) { LOG_ERR("bme680", "bme680_init error: %d\n", result); return -convert_error(result); - } + } - /* Select the power mode */ + /* Select the power mode */ /* Must be set before writing the sensor configuration */ - bme.power_mode = BME680_FORCED_MODE; - - /* Set the temperature, pressure and humidity settings */ - bme.tph_sett.os_hum = BME680_OS_2X; - bme.tph_sett.os_pres = BME680_OS_4X; - bme.tph_sett.os_temp = BME680_OS_8X; - bme.tph_sett.filter = BME680_FILTER_SIZE_3; - - /* Set the remaining gas sensor settings and link the heating profile */ - bme.gas_sett.run_gas = BME680_ENABLE_GAS_MEAS; - /* Create a ramp heat waveform in 3 steps */ - bme.gas_sett.heatr_temp = HEATR_TEMP; /* degree Celsius */ - bme.gas_sett.heatr_dur = HEATR_DUR; /* milliseconds */ - - /* Set the required sensor settings needed */ - settings_sel = BME680_OST_SEL | BME680_OSP_SEL | - BME680_OSH_SEL | BME680_FILTER_SEL | - BME680_GAS_SENSOR_SEL; - - result = bme680_set_sensor_settings(settings_sel, &bme); - if (result != BME680_OK) { - LOG_ERR("bme680", "bme680_set_sensor_settings error: %d\n", result); - return -convert_error(result); - } + bme.power_mode = BME680_FORCED_MODE; + + /* Set the temperature, pressure and humidity settings */ + bme.tph_sett.os_hum = BME680_OS_2X; + bme.tph_sett.os_pres = BME680_OS_4X; + bme.tph_sett.os_temp = BME680_OS_8X; + bme.tph_sett.filter = BME680_FILTER_SIZE_3; + + /* Set the remaining gas sensor settings and link the heating profile */ + bme.gas_sett.run_gas = BME680_ENABLE_GAS_MEAS; + /* Create a ramp heat waveform in 3 steps */ + bme.gas_sett.heatr_temp = HEATR_TEMP; /* degree Celsius */ + bme.gas_sett.heatr_dur = HEATR_DUR; /* milliseconds */ + + /* Set the required sensor settings needed */ + settings_sel = BME680_OST_SEL | BME680_OSP_SEL | + BME680_OSH_SEL | BME680_FILTER_SEL | + BME680_GAS_SENSOR_SEL; + + result = bme680_set_sensor_settings(settings_sel, &bme); + if (result != BME680_OK) { + LOG_ERR("bme680", + "bme680_set_sensor_settings error: %d\n", + result); + return -convert_error(result); + } initialized = true; } - return 0; + return 0; } int epic_bme680_read_sensors(struct bme680_sensor_data *data) { - if(!initialized) { - LOG_ERR("bme680", "bme680 sensor not initialized"); - return -1; - } + if (!initialized) { + LOG_ERR("bme680", "bme680 sensor not initialized"); + return -1; + } - int8_t result = BME680_OK; - struct bme680_field_data raw_data; + int8_t result = BME680_OK; + struct bme680_field_data raw_data; uint16_t profile_dur = 0; bme680_get_profile_dur(&profile_dur, &bme); - if (result == BME680_OK) { - - result = bme680_set_sensor_mode(&bme); /* Trigger a measurement */ - if (result != BME680_OK) { - LOG_ERR("bme680", "bme680_set_sensor_mode error: %d\n", result); - return -convert_error(result); - } + if (result == BME680_OK) { + result = bme680_set_sensor_mode( + &bme); /* Trigger a measurement */ + if (result != BME680_OK) { + LOG_ERR("bme680", + "bme680_set_sensor_mode error: %d\n", + result); + return -convert_error(result); + } - vTaskDelay(pdMS_TO_TICKS(profile_dur)); /* Wait for the measurement to complete */ + vTaskDelay(pdMS_TO_TICKS( + profile_dur)); /* Wait for the measurement to complete */ - result = bme680_get_sensor_data(&raw_data, &bme); - if (result != BME680_OK) { - LOG_ERR("bme680", "bme680_get_sensor_data error: %d\n", result); - return -convert_error(result); - } - } + result = bme680_get_sensor_data(&raw_data, &bme); + if (result != BME680_OK) { + LOG_ERR("bme680", + "bme680_get_sensor_data error: %d\n", + result); + return -convert_error(result); + } + } - data->temperature = raw_data.temperature / 100.0l; - data->humidity = raw_data.humidity / 1000.0l; - data->pressure = raw_data.pressure / 100.0l; - data->gas_resistance = raw_data.gas_resistance; + data->temperature = raw_data.temperature / 100.0l; + data->humidity = raw_data.humidity / 1000.0l; + data->pressure = raw_data.pressure / 100.0l; + data->gas_resistance = raw_data.gas_resistance; return 0; } diff --git a/pycardium/modules/bme680.c b/pycardium/modules/bme680.c index 7c2bef547a22622d4b04bebd5c350826d1fadf4f..81260f4755ef4e01b80ab65c3400a16ca5650326 100644 --- a/pycardium/modules/bme680.c +++ b/pycardium/modules/bme680.c @@ -6,26 +6,24 @@ static mp_obj_t mp_bme680_get_data() { - struct bme680_sensor_data data; - int ret = epic_bme680_read_sensors(&data); + struct bme680_sensor_data data; + int ret = epic_bme680_read_sensors(&data); if (ret < 0) { mp_raise_OSError(-ret); } - mp_obj_t values_list[] = { - mp_obj_new_float(data.temperature), - mp_obj_new_float(data.humidity), - mp_obj_new_float(data.pressure), - mp_obj_new_float(data.gas_resistance) - }; + mp_obj_t values_list[] = { mp_obj_new_float(data.temperature), + mp_obj_new_float(data.humidity), + mp_obj_new_float(data.pressure), + mp_obj_new_float(data.gas_resistance) }; return mp_obj_new_tuple(4, values_list); } static MP_DEFINE_CONST_FUN_OBJ_0(bme680_get_data_obj, mp_bme680_get_data); static mp_obj_t mp_bme680_init() { - int ret = epic_bme680_init(); + int ret = epic_bme680_init(); if (ret < 0) { mp_raise_OSError(-ret); @@ -47,6 +45,5 @@ const mp_obj_module_t bme680_module = { .globals = (mp_obj_dict_t *)&bme680_module_globals, }; - /* Register the module to make it available in Python */ MP_REGISTER_MODULE(MP_QSTR_bme680, bme680_module, MODULE_BME680_ENABLED);