Files
BME68x_manager/BME68x_manager.h
Andrey Aleksandrov 518c8a6d00 Initial commit
2026-01-06 14:05:29 +02:00

139 lines
3.6 KiB
C

#pragma once
#include <stdint.h>
#include <stdbool.h>
#include "esp_err.h"
#include "config.h"
#ifdef __cplusplus
extern "C"
{
#endif
// I2C configuration - can be overridden in config.h
#ifndef I2C_MASTER_SCL_IO
#define I2C_MASTER_SCL_IO 7 /*!< Default GPIO for I2C master clock */
#endif
#ifndef I2C_MASTER_SDA_IO
#define I2C_MASTER_SDA_IO 6 /*!< Default GPIO for I2C master data */
#endif
#ifndef I2C_MASTER_NUM
#define I2C_MASTER_NUM I2C_NUM_0 /*!< Default I2C port number */
#endif
#ifndef I2C_MASTER_FREQ_HZ
#define I2C_MASTER_FREQ_HZ 100000 /*!< Default I2C frequency */
#endif
#define I2C_MASTER_TX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
#define I2C_MASTER_RX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
#define I2C_MASTER_TIMEOUT_MS 1000
// BME68x I2C address (can be 0x76 or 0x77 depending on SDO pin)
#define BME68x_I2C_ADDR_PRIMARY 0x76
#define BME68x_I2C_ADDR_SECONDARY 0x77
// BME68x register addresses
#define BME68x_REG_CHIP_ID 0xD0
#define BME68x_CHIP_ID 0x61
#define BME68x_REG_CTRL_MEAS 0x74
#define BME68x_REG_CTRL_HUM 0x72
#define BME68x_REG_CONFIG 0x75
#define BME68x_REG_MEAS_STATUS_0 0x1D
#define BME68x_REG_PRESS_MSB 0x1F
#define BME68x_REG_TEMP_MSB 0x22
#define BME68x_REG_HUM_MSB 0x25
#define BME68x_REG_GAS_R_MSB 0x2A
#define BME68x_REG_GAS_R_LSB 0x2B
#define BME68x_REG_CTRL_GAS_1 0x71
#define BME68x_REG_GAS_WAIT_0 0x64
#define BME68x_REG_RES_HEAT_0 0x5A
// Calibration coefficient addresses
#define BME68x_COEFF_ADDR1 0x89
#define BME68x_COEFF_ADDR2 0xE1
// BME68x oversampling definitions
#define BME68x_OS_NONE 0x00
#define BME68x_OS_1X 0x01
#define BME68x_OS_2X 0x02
#define BME68x_OS_4X 0x03
#define BME68x_OS_8X 0x04
#define BME68x_OS_16X 0x05
// BME68x field bit positions
#define BME68x_OST_SEL 5
#define BME68x_OSP_SEL 2
#define BME68x_OSH_SEL 0
#define BME68x_FILTER_SEL 2
// BME68x IIR filter definitions
#define BME68x_FILTER_SIZE_3 0x02
// Gas sensor definitions
#define BME68x_DISABLE_GAS_MEAS 0x00
#define BME68x_ENABLE_GAS_MEAS 0x01
#define BME68x_RUN_GAS_SEL 4
#define BME68x_NB_CONV_SEL 0
// BME68x sensor data structure
typedef struct
{
float temperature;
float pressure;
float humidity;
float gas_resistance;
uint8_t gas_valid;
uint8_t heat_stab;
uint8_t air_quality_score;
} BME68x_data_t;
/**
* @brief Initialize I2C master interface
* @return ESP_OK on success, error code on failure
*/
esp_err_t bme68x_i2c_init(void);
/**
* @brief Perform I2C bus recovery
* @return ESP_OK on success, error code on failure
*/
esp_err_t bme68x_i2c_recovery(void);
/**
* @brief Scan I2C bus for devices
*/
void bme68x_i2c_scan(void);
/**
* @brief Test BME68x sensor connection and read chip ID
* @return ESP_OK on success, error code on failure
*/
esp_err_t bme68x_test_connection(void);
/**
* @brief Perform soft reset of BME68x sensor
* @return ESP_OK on success, error code on failure
*/
esp_err_t bme68x_soft_reset(void);
/**
* @brief Initialize BME68x sensor
* @return ESP_OK on success, error code on failure
*/
esp_err_t bme68x_init(void);
/**
* @brief Read sensor data from BME68x
* @param data Pointer to BME68x_data_t structure to store the data
* @return ESP_OK on success, error code on failure
*/
esp_err_t bme68x_read_data(BME68x_data_t *data);
/**
* @brief Get current I2C address being used
* @return Current I2C address (0x76 or 0x77)
*/
uint8_t bme68x_get_current_address(void);
#ifdef __cplusplus
}
#endif