Init
This commit is contained in:
713
managed_components/k0i05__esp_bme680/include/bme680.h
Normal file
713
managed_components/k0i05__esp_bme680/include/bme680.h
Normal file
@@ -0,0 +1,713 @@
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2024 Eric Gionet (gionet.c.eric@gmail.com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bme680.h
|
||||
* @defgroup drivers bme680
|
||||
* @{
|
||||
*
|
||||
* https://github.com/boschsensortec/BME68x_SensorAPI/blob/master/bme68x.c
|
||||
*
|
||||
* ESP-IDF driver for bme680 sensor
|
||||
*
|
||||
* Copyright (c) 2024 Eric Gionet (gionet.c.eric@gmail.com)
|
||||
*
|
||||
* MIT Licensed as described in the file LICENSE
|
||||
*/
|
||||
#ifndef __BME680_H__
|
||||
#define __BME680_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <esp_err.h>
|
||||
#include <driver/i2c_master.h>
|
||||
#include <type_utils.h>
|
||||
#include "bme680_version.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* BME680 definitions
|
||||
*/
|
||||
#define I2C_BME680_DEV_CLK_SPD UINT32_C(100000) //!< bme680 I2C default clock frequency (100KHz)
|
||||
|
||||
/*
|
||||
* supported device addresses
|
||||
*/
|
||||
#define I2C_BME680_DEV_ADDR_LO UINT8_C(0x76) //!< bme680 I2C address when ADDR pin floating/low
|
||||
|
||||
#define I2C_XFR_TIMEOUT_MS (500) //!< I2C transaction timeout in milliseconds
|
||||
|
||||
#define BME680_HEATER_TEMP_MIN UINT8_C(200) // min. 200 degree Celsius
|
||||
#define BME680_HEATER_TEMP_MAX UINT8_C(400) // max. 200 degree Celsius
|
||||
#define BME680_HEATER_PROFILE_SIZE UINT8_C(10) // max. 10 heater profiles (0..9)
|
||||
|
||||
/*
|
||||
* BME680 macros
|
||||
*/
|
||||
#define I2C_BME680_CONFIG_DEFAULT { \
|
||||
.i2c_address = I2C_BME680_DEV_ADDR_LO, \
|
||||
.i2c_clock_speed = I2C_BME680_DEV_CLK_SPD, \
|
||||
.power_mode = BME680_POWER_MODE_FORCED, \
|
||||
.iir_filter = BME680_IIR_FILTER_OFF, \
|
||||
.pressure_oversampling = BME680_PRESSURE_OVERSAMPLING_4X, \
|
||||
.temperature_oversampling = BME680_TEMPERATURE_OVERSAMPLING_4X, \
|
||||
.humidity_oversampling = BME680_HUMIDITY_OVERSAMPLING_4X, \
|
||||
.gas_enabled = true, \
|
||||
.heater_temperature = 300, \
|
||||
.heater_duration = 300, \
|
||||
.heater_profile_size = 1 \
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* BME680 enumerator and structure declarations
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @brief BME680 heater set-points enumerator.
|
||||
*/
|
||||
typedef enum bme680_heater_setpoints_e {
|
||||
BME680_HEATER_SETPOINT_0 = (0b0000),
|
||||
BME680_HEATER_SETPOINT_1 = (0b0001),
|
||||
BME680_HEATER_SETPOINT_2 = (0b0010),
|
||||
BME680_HEATER_SETPOINT_3 = (0b0011),
|
||||
BME680_HEATER_SETPOINT_4 = (0b0100),
|
||||
BME680_HEATER_SETPOINT_5 = (0b0101),
|
||||
BME680_HEATER_SETPOINT_6 = (0b0110),
|
||||
BME680_HEATER_SETPOINT_7 = (0b0111),
|
||||
BME680_HEATER_SETPOINT_8 = (0b1000),
|
||||
BME680_HEATER_SETPOINT_9 = (0b1001)
|
||||
} bme680_heater_setpoints_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 gas wait multipliers enumerator.
|
||||
*/
|
||||
typedef enum bme680_gas_wait_multipliers_e {
|
||||
BME680_GAS_WAIT_MULT_1 = (0b00),
|
||||
BME680_GAS_WAIT_MULT_4 = (0b01),
|
||||
BME680_GAS_WAIT_MULT_16 = (0b10),
|
||||
BME680_GAS_WAIT_MULT_64 = (0b11)
|
||||
} bme680_gas_wait_multipliers_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 IIR filters coefficient enumerator.
|
||||
*/
|
||||
typedef enum bme680_iir_filters_e {
|
||||
BME680_IIR_FILTER_OFF = (0b000),
|
||||
BME680_IIR_FILTER_1 = (0b001),
|
||||
BME680_IIR_FILTER_3 = (0b010),
|
||||
BME680_IIR_FILTER_7 = (0b011),
|
||||
BME680_IIR_FILTER_15 = (0b100),
|
||||
BME680_IIR_FILTER_31 = (0b101),
|
||||
BME680_IIR_FILTER_63 = (0b110),
|
||||
BME680_IIR_FILTER_127 = (0b111),
|
||||
} bme680_iir_filters_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 power modes enumerator.
|
||||
*/
|
||||
typedef enum bme680_power_modes_e {
|
||||
BME680_POWER_MODE_SLEEP = (0b00), //!< sleep mode, default after power-up
|
||||
BME680_POWER_MODE_FORCED = (0b01), //!< measurement is initiated by user
|
||||
BME680_POWER_MODE_PARALLEL = (0b10), //!< parallel mode, gas and TPH measurements are done in parallel
|
||||
BME680_POWER_MODE_SEQUENTIAL = (0b11) //!< sequential mode, gas and TPH measurements are done in sequence
|
||||
} bme680_power_modes_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 pressure oversampling enumerator.
|
||||
*/
|
||||
typedef enum bme680_pressure_oversampling_e {
|
||||
BME680_PRESSURE_OVERSAMPLING_SKIPPED = (0b000), //!< skipped, no measurement, output set to 0x80000
|
||||
BME680_PRESSURE_OVERSAMPLING_1X = (0b001), //!< ultra low power
|
||||
BME680_PRESSURE_OVERSAMPLING_2X = (0b010), //!< low power
|
||||
BME680_PRESSURE_OVERSAMPLING_4X = (0b011), //!< standard
|
||||
BME680_PRESSURE_OVERSAMPLING_8X = (0b100), //!< high resolution
|
||||
BME680_PRESSURE_OVERSAMPLING_16X = (0b101) //!< ultra high resolution
|
||||
} bme680_pressure_oversampling_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 temperature oversampling enumerator.
|
||||
*/
|
||||
typedef enum bme680_temperature_oversampling_e {
|
||||
BME680_TEMPERATURE_OVERSAMPLING_SKIPPED = (0b000), //!< skipped, no measurement, output set to 0x80000
|
||||
BME680_TEMPERATURE_OVERSAMPLING_1X = (0b001), //!< ultra low power
|
||||
BME680_TEMPERATURE_OVERSAMPLING_2X = (0b010), //!< low power
|
||||
BME680_TEMPERATURE_OVERSAMPLING_4X = (0b011), //!< standard
|
||||
BME680_TEMPERATURE_OVERSAMPLING_8X = (0b100), //!< high resolution
|
||||
BME680_TEMPERATURE_OVERSAMPLING_16X = (0b101), //!< ultra high resolution
|
||||
} bme680_temperature_oversampling_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 humidity oversampling enumerator.
|
||||
*/
|
||||
typedef enum bme680_humidity_oversampling_e {
|
||||
BME680_HUMIDITY_OVERSAMPLING_SKIPPED = (0b000), //!< skipped, no measurement, output set to 0x80000
|
||||
BME680_HUMIDITY_OVERSAMPLING_1X = (0b001), //!< ultra low power
|
||||
BME680_HUMIDITY_OVERSAMPLING_2X = (0b010), //!< low power
|
||||
BME680_HUMIDITY_OVERSAMPLING_4X = (0b011), //!< standard
|
||||
BME680_HUMIDITY_OVERSAMPLING_8X = (0b100), //!< high resolution
|
||||
BME680_HUMIDITY_OVERSAMPLING_16X = (0b101), //!< ultra high resolution
|
||||
} bme680_humidity_oversampling_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 status 0 register (0x1d) structure. The reset state is 0x00 for this register.
|
||||
* This register contains the gas measurement index, measuring status, gas measuring status, and
|
||||
* new data status.
|
||||
*/
|
||||
typedef union __attribute__((packed)) bme680_status0_register_u {
|
||||
struct {
|
||||
uint8_t gas_measurement_index:4; /*!< bme680 user can program sequence of up to 10 conversions by setting nb_conv<3:0> (bit:0-3) */
|
||||
uint8_t reserved:1; /*!< reserved (bit:4) */
|
||||
bool measuring:1; /*!< bmp680 automatically set to 1 whenever a conversion is running and back to 0 when results transferred to data registers (bit:5) */
|
||||
bool gas_measuring:1; /*!< bme680 automatically set to 1 during gas measurement and back to 0 when results transferred to data registers (bit:6) */
|
||||
bool new_data:1; /*!< bme680 measured data are stored into the data registers when true (bit:7) */
|
||||
} bits;
|
||||
uint8_t reg;
|
||||
} bme680_status0_register_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 control measurement register (0x74) structure. The reset state is 0x00 for this register.
|
||||
* This register contains the power mode, pressure and temperature oversampling settings.
|
||||
*/
|
||||
typedef union __attribute__((packed)) bme680_control_measurement_register_u {
|
||||
struct {
|
||||
bme680_power_modes_t power_mode:2; /*!< bme680 power mode of the device (bit:0-1) */
|
||||
bme680_pressure_oversampling_t pressure_oversampling:3; /*!< bme680 oversampling of pressure data (bit:2-4) */
|
||||
bme680_temperature_oversampling_t temperature_oversampling:3; /*!< bme680 oversampling of temperature data (bit:5-7) */
|
||||
} bits;
|
||||
uint8_t reg;
|
||||
} bme680_control_measurement_register_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 control measurement register (0x72) structure. The reset state is 0x00 for this register.
|
||||
* This register contains humidity oversampling and SPI interrupt settings.
|
||||
*/
|
||||
typedef union __attribute__((packed)) bme680_control_humidity_register_u {
|
||||
struct {
|
||||
bme680_humidity_oversampling_t humidity_oversampling:3; /*!< bme680 oversampling of humidity data (bit:0-2) */
|
||||
uint8_t reserved1:3; /*!< bme680 reserved (bit:3-5) */
|
||||
bool spi_irq_enabled:1; /*!< bme680 3-wire SPI interrupt enabled when true (bit:6) */
|
||||
uint8_t reserved2:1; /*!< bme680 reserved (bit:7) */
|
||||
} bits;
|
||||
uint8_t reg;
|
||||
} bme680_control_humidity_register_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 control gas 0 register (0x71) structure. The reset state is 0x00 for this register.
|
||||
* This register contains the heater set-point and gas conversion settings.
|
||||
*/
|
||||
typedef union __attribute__((packed)) bme680_control_gas1_register_u {
|
||||
struct {
|
||||
bme680_heater_setpoints_t heater_setpoint:4; /*!< bme680 (bit:0-3) */
|
||||
bool gas_conversion_enabled:1;/*!< bme680 gas conversions are started only appropriate mode when true (bit:4) */
|
||||
uint8_t reserved:3; /*!< bme680 reserved (bit:5-7) */
|
||||
} bits;
|
||||
uint8_t reg;
|
||||
} bme680_control_gas1_register_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 control gas 1 register (0x70) structure. The reset state is 0x00 for this register.
|
||||
* This register contains heater setting.
|
||||
*/
|
||||
typedef union __attribute__((packed)) bme680_control_gas0_register_u {
|
||||
struct {
|
||||
uint8_t reserved1:3; /*!< bme680 (bit:0-2) */
|
||||
bool heater_disabled:1; /*!< bme680 heater is off when true (bit:3) */
|
||||
uint8_t reserved2:4; /*!< bme680 reserved (bit:4-7) */
|
||||
} bits;
|
||||
uint8_t reg;
|
||||
} bme680_control_gas0_register_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 control gas_r_lsb register (0x2b) structure. The reset state is 0x00 for this register.
|
||||
* This register contains the gas resistance lsb, gas validation flag, heater stab, and gas range settings.
|
||||
*/
|
||||
typedef union __attribute__((packed)) bme680_gas_r_lsb_register_u {
|
||||
struct {
|
||||
uint8_t gas_range:4; /*!< bme680 adc range of measure gas sensor resistance (bit:0-3) */
|
||||
bool heater_stable:1; /*!< bme680 heater temperature stability for target heater resistance (bit:4) */
|
||||
bool gas_valid:1; /*!< bme680 gas conversion is valid when true (bit:5) */
|
||||
uint8_t gas_lsb:2; /*!< bme680 gas resistance lsb (bit:6-7) */
|
||||
} bits;
|
||||
uint8_t reg;
|
||||
} bme680_gas_lsb_register_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 configuration register (0x75) structure. The reset state is 0x00 for this register.
|
||||
* This register contains SPI and IIR filter settings.
|
||||
*/
|
||||
typedef union __attribute__((packed)) bme680_configuration_register_u {
|
||||
struct {
|
||||
bool spi_enabled:1; /*!< bme680 3-wire SPI interface enabled when true (bit:0) */
|
||||
uint8_t reserved1:1; /*!< bme680 reserved (bit:1) */
|
||||
bme680_iir_filters_t iir_filter:3; /*!< bme680 time constant of the IIR filter (bit:2-4) */
|
||||
uint8_t reserved2:3; /*!< bme680 reserved (bit:5-7) */
|
||||
} bits;
|
||||
uint8_t reg;
|
||||
} bme680_config_register_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 calibration factors structure definition.
|
||||
*/
|
||||
typedef struct bme680_cal_factors_s {
|
||||
/* temperature compensation */
|
||||
uint16_t par_T1;
|
||||
int16_t par_T2;
|
||||
int8_t par_T3;
|
||||
float temperature_fine;
|
||||
/* humidity compensation */
|
||||
uint16_t par_H1;
|
||||
uint16_t par_H2;
|
||||
int8_t par_H3;
|
||||
int8_t par_H4;
|
||||
int8_t par_H5;
|
||||
uint8_t par_H6;
|
||||
int8_t par_H7;
|
||||
/* pressure compensation */
|
||||
uint16_t par_P1;
|
||||
int16_t par_P2;
|
||||
int8_t par_P3;
|
||||
int16_t par_P4;
|
||||
int16_t par_P5;
|
||||
int8_t par_P6;
|
||||
int8_t par_P7;
|
||||
int16_t par_P8;
|
||||
int16_t par_P9;
|
||||
uint8_t par_P10;
|
||||
/* resistance heat compensation */
|
||||
int8_t par_G1;
|
||||
int16_t par_G2;
|
||||
int8_t par_G3;
|
||||
/* other */
|
||||
uint8_t res_heat_range;
|
||||
int8_t res_heat_val;
|
||||
int8_t range_switching_error;
|
||||
} bme680_cal_factors_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 data structure definition.
|
||||
*/
|
||||
typedef struct bme680_data_s {
|
||||
float dewpoint_temperature; /*!< dew-point temperature in degrees celsius */
|
||||
float air_temperature; /*!< air temperature in degrees celsius */
|
||||
float relative_humidity; /*!< relative humidity in percent */
|
||||
float barometric_pressure; /*!< barometric pressure in hecto-pascal */
|
||||
bool gas_valid; /*!< indicates that the gas measurement results are valid */
|
||||
float gas_resistance; /*!< gas resistance in ohms */
|
||||
uint8_t gas_range; /*!< gas resistance range */
|
||||
uint8_t gas_index; /*!< heater profile used (0..9) */
|
||||
bool heater_stable; /*!< indicates that the heater temperature was stable */
|
||||
uint16_t iaq_score; /*!< air quality index (0..500) */
|
||||
float temperature_score;
|
||||
float humidity_score;
|
||||
float gas_score;
|
||||
} bme680_data_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 ADC data structure definition.
|
||||
*/
|
||||
typedef struct bme680_adc_data_s {
|
||||
uint32_t temperature;
|
||||
uint16_t humidity;
|
||||
uint32_t pressure;
|
||||
uint16_t gas;
|
||||
bool gas_valid;
|
||||
uint8_t gas_range;
|
||||
uint8_t gas_index;
|
||||
bool heater_stable;
|
||||
} bme680_adc_data_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 configuration structure definition.
|
||||
*/
|
||||
typedef struct bme680_config_s {
|
||||
uint16_t i2c_address; /*!< bme680 i2c device address */
|
||||
uint32_t i2c_clock_speed; /*!< bme680 i2c device scl clock speed */
|
||||
bme680_power_modes_t power_mode; /*!< bme680 power mode */
|
||||
bme680_iir_filters_t iir_filter;
|
||||
bme680_pressure_oversampling_t pressure_oversampling;
|
||||
bme680_temperature_oversampling_t temperature_oversampling;
|
||||
bme680_humidity_oversampling_t humidity_oversampling;
|
||||
bool gas_enabled; /*!< bme680 gas measurements enabled when true */
|
||||
uint16_t heater_temperature; /*!< bme680 heater temperature for forced mode in degrees celsius */
|
||||
uint16_t heater_duration; /*!< bme680 heating duration for forced mode in milliseconds */
|
||||
uint16_t heater_temperature_profile[BME680_HEATER_PROFILE_SIZE]; /*!< bme680 heater temperature profile in degrees celsius */
|
||||
uint16_t heater_duration_profile[BME680_HEATER_PROFILE_SIZE]; /*!< bme680 heating duration profile in milliseconds */
|
||||
uint8_t heater_profile_size; /*!< bme680 size of the heating profile */
|
||||
uint16_t heater_shared_duration; /*!< bme680 heating duration for parallel mode in milliseconds */
|
||||
} bme680_config_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 context structure.
|
||||
*/
|
||||
struct bme680_context_t {
|
||||
bme680_config_t dev_config; /*!< bme680 device configuration */
|
||||
i2c_master_dev_handle_t i2c_handle; /*!< bme680 I2C device handle */
|
||||
bme680_cal_factors_t *dev_cal_factors; /*!< bme680 device calibration factors */
|
||||
uint8_t chip_id; /*!< bme680 chip identification register */
|
||||
uint16_t ambient_temperature;
|
||||
uint8_t variant_id;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief BME680 context structure definition.
|
||||
*/
|
||||
typedef struct bme680_context_t bme680_context_t;
|
||||
|
||||
/**
|
||||
* @brief BME680 handle structure definition.
|
||||
*/
|
||||
typedef struct bme680_context_t *bme680_handle_t;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Reads chip identification register from BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] reg BME680 chip identifier.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_chip_id_register(bme680_handle_t handle, uint8_t *const reg);
|
||||
|
||||
/**
|
||||
* @brief Reads variant identification register from BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] reg BME680 variant identifier.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_variant_id_register(bme680_handle_t handle, uint8_t *const reg);
|
||||
|
||||
/**
|
||||
* @brief Reads status register from BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] reg Status 0 register.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_status0_register(bme680_handle_t handle, bme680_status0_register_t *const reg);
|
||||
|
||||
/**
|
||||
* @brief Reads gas resistance LSB register from BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] reg Gas LSB register.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_gas_lsb_register(bme680_handle_t handle, bme680_gas_lsb_register_t *const reg);
|
||||
|
||||
/**
|
||||
* @brief Writes gas resistance LSB register to BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[in] reg Gas LSB register.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_set_gas_lsb_register(bme680_handle_t handle, const bme680_gas_lsb_register_t reg);
|
||||
|
||||
/**
|
||||
* @brief Reads control measurement register from BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] reg Control measurement register.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_control_measurement_register(bme680_handle_t handle, bme680_control_measurement_register_t *const reg);
|
||||
|
||||
/**
|
||||
* @brief Writes control measurement register to BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[in] reg Control measurement register.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_set_control_measurement_register(bme680_handle_t handle, const bme680_control_measurement_register_t reg);
|
||||
|
||||
/**
|
||||
* @brief Reads control humidity register from BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] reg Control humidity register.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_control_humidity_register(bme680_handle_t handle, bme680_control_humidity_register_t *const reg);
|
||||
|
||||
/**
|
||||
* @brief Writes control humidity register to BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[in] reg Control humidity register.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_set_control_humidity_register(bme680_handle_t handle, const bme680_control_humidity_register_t reg);
|
||||
|
||||
/**
|
||||
* @brief Reads control gas 0 register from BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] reg Control gas 0 register.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_control_gas0_register(bme680_handle_t handle, bme680_control_gas0_register_t *const reg);
|
||||
|
||||
/**
|
||||
* @brief Writes control gas 0 register to BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[in] reg Control gas 0 register.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_set_control_gas0_register(bme680_handle_t handle, const bme680_control_gas0_register_t reg);
|
||||
|
||||
/**
|
||||
* @brief Reads control gas 1 register from BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] reg Control gas 1 register.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_control_gas1_register(bme680_handle_t handle, bme680_control_gas1_register_t *const reg);
|
||||
|
||||
/**
|
||||
* @brief Writes control gas 1 register to BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[in] reg Control gas 1 register.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_set_control_gas1_register(bme680_handle_t handle, const bme680_control_gas1_register_t reg);
|
||||
|
||||
/**
|
||||
* @brief Reads configuration register from BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] reg Configuration register.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_configuration_register(bme680_handle_t handle, bme680_config_register_t *const reg);
|
||||
|
||||
/**
|
||||
* @brief Writes configuration register to BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[in] reg Configuration register.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_set_configuration_register(bme680_handle_t handle, const bme680_config_register_t reg);
|
||||
|
||||
/**
|
||||
* @brief Initializes an BME680 device onto the master bus.
|
||||
*
|
||||
* @param[in] master_handle I2C master bus handle.
|
||||
* @param[in] bme680_config BME680 device configuration.
|
||||
* @param[out] bme680_handle BME680 device handle.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_init(i2c_master_bus_handle_t master_handle, const bme680_config_t *bme680_config, bme680_handle_t *bme680_handle);
|
||||
|
||||
/**
|
||||
* @brief Reads humidity, temperature, and pressure ADC signals from BME680
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] data BME680 ADC data structure.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_adc_signals(bme680_handle_t handle, bme680_adc_data_t *const data);
|
||||
|
||||
/**
|
||||
* @brief Reads humidity, temperature, and pressure measurements from BME680
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] data BME680 data structure.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_data(bme680_handle_t handle, bme680_data_t *const data);
|
||||
|
||||
/**
|
||||
* @brief Reads data status of the BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] ready Data is ready when asserted to true.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_data_status(bme680_handle_t handle, bool *const ready);
|
||||
|
||||
/**
|
||||
* @brief Reads gas measurement index from the BME680.
|
||||
*
|
||||
* @param handle BME680 device handle.
|
||||
* @param index Gas measurement index (0..9).
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_gas_measurement_index(bme680_handle_t handle, uint8_t *const index);
|
||||
|
||||
/**
|
||||
* @brief Reads power mode setting from the BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] power_mode BME680 power mode setting.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_power_mode(bme680_handle_t handle, bme680_power_modes_t *const power_mode);
|
||||
|
||||
/**
|
||||
* @brief Writes power mode setting to BME680. See datasheet, section 3.6, table 10.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[in] power_mode BME680 power mode setting.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_set_power_mode(bme680_handle_t handle, const bme680_power_modes_t power_mode);
|
||||
|
||||
/**
|
||||
* @brief Reads pressure oversampling setting from BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] oversampling BME680 pressure oversampling setting.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_pressure_oversampling(bme680_handle_t handle, bme680_pressure_oversampling_t *const oversampling);
|
||||
|
||||
/**
|
||||
* @brief Writes pressure oversampling setting to BME680. See datasheet, section 3.3.1, table 4.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[in] oversampling BME680 pressure oversampling setting.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_set_pressure_oversampling(bme680_handle_t handle, const bme680_pressure_oversampling_t oversampling);
|
||||
|
||||
/**
|
||||
* @brief Reads temperature oversampling setting from BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] oversampling BME680 temperature oversampling setting.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_temperature_oversampling(bme680_handle_t handle, bme680_temperature_oversampling_t *const oversampling);
|
||||
|
||||
/**
|
||||
* @brief Writes temperature oversampling setting to BME680. See datasheet, section 3.3.1, table 4.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[in] oversampling BME680 temperature oversampling setting.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_set_temperature_oversampling(bme680_handle_t handle, const bme680_temperature_oversampling_t oversampling);
|
||||
|
||||
/**
|
||||
* @brief Reads humidity oversampling setting from BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] oversampling BME680 humidity oversampling setting.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_humidity_oversampling(bme680_handle_t handle, bme680_humidity_oversampling_t *const oversampling);
|
||||
|
||||
/**
|
||||
* @brief Writes humidity oversampling setting to BME680. See datasheet, section 3.3.1, table 4.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[in] oversampling BME680 humidity oversampling setting.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_set_humidity_oversampling(bme680_handle_t handle, const bme680_humidity_oversampling_t oversampling);
|
||||
|
||||
/**
|
||||
* @brief Reads IIR filter setting from BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[out] iir_filter BME680 IIR filter setting.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_get_iir_filter(bme680_handle_t handle, bme680_iir_filters_t *const iir_filter);
|
||||
|
||||
/**
|
||||
* @brief Writes IIR filter setting to BME680. See datasheet, section 3.4, table 7.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @param[in] iir_filter BME680 IIR filter setting.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_set_iir_filter(bme680_handle_t handle, const bme680_iir_filters_t iir_filter);
|
||||
|
||||
/**
|
||||
* @brief Issues soft-reset sensor and initializes registers for BME680.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_reset(bme680_handle_t handle);
|
||||
|
||||
/**
|
||||
* @brief Air quality as a string based on the IAQ score.
|
||||
*
|
||||
* @param iaq_score Index of air quality score.
|
||||
* @return char* Air quality as a string.
|
||||
*/
|
||||
char *bme680_air_quality_to_string(float iaq_score);
|
||||
|
||||
/**
|
||||
* @brief Removes an BME680 device from master bus.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_remove(bme680_handle_t handle);
|
||||
|
||||
/**
|
||||
* @brief Removes an BME680 device from master bus and frees handle.
|
||||
*
|
||||
* @param[in] handle BME680 device handle.
|
||||
* @return esp_err_t ESP_OK on success.
|
||||
*/
|
||||
esp_err_t bme680_delete(bme680_handle_t handle);
|
||||
|
||||
/**
|
||||
* @brief Converts BME680 firmware version numbers (major, minor, patch, build) into a string.
|
||||
*
|
||||
* @return char* BME680 firmware version as a string that is formatted as X.X.X (e.g. 4.0.0).
|
||||
*/
|
||||
const char* bme680_get_fw_version(void);
|
||||
|
||||
/**
|
||||
* @brief Converts BME680 firmware version numbers (major, minor, patch) into an integer value.
|
||||
*
|
||||
* @return int32_t BME680 firmware version number.
|
||||
*/
|
||||
int32_t bme680_get_fw_version_number(void);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/**@}*/
|
||||
|
||||
#endif // __BME680_H__
|
Reference in New Issue
Block a user