Go to file
2017-05-09 14:01:36 +02:00
bme680_calculations.c Updated license, corrected overwriting of the idac, replaced BME680_INIT_VALUE with 0. 2017-05-09 14:01:36 +02:00
bme680_calculations.h Updated license, corrected overwriting of the idac, replaced BME680_INIT_VALUE with 0. 2017-05-09 14:01:36 +02:00
bme680_internal.h Updated license, corrected overwriting of the idac, replaced BME680_INIT_VALUE with 0. 2017-05-09 14:01:36 +02:00
bme680.c Updated license, corrected overwriting of the idac, replaced BME680_INIT_VALUE with 0. 2017-05-09 14:01:36 +02:00
bme680.h Updated license, corrected overwriting of the idac, replaced BME680_INIT_VALUE with 0. 2017-05-09 14:01:36 +02:00
BME680_SensorAPI_Example_Guide.pdf BME680 driver release 2016-06-22 17:53:09 +05:30
README.md Updated license, corrected overwriting of the idac, replaced BME680_INIT_VALUE with 0. 2017-05-09 14:01:36 +02:00
sensor_api_common_types.h Updated license, corrected overwriting of the idac, replaced BME680_INIT_VALUE with 0. 2017-05-09 14:01:36 +02:00

Table of Contents

Introduction

  • This package contains the Bosch Sensortec MEMS BME680 sensor driver (sensor API)
  • The sensor driver package includes below files
    • bme680.c
    • bme680.h
    • bme680_calculations.c
    • bme680_calculations.h
    • bme680_internal.h
    • sensor_api_common_types.h

Version

File Version Date
bme680.c 2.2.0 5 May 2017
bme680.h 2.2.0 5 May 2017
bme680_calculations.c 2.2.0 5 May 2017
bme680_calculations.h 2.2.0 5 May 2017
bme680_internal.h 2.2.0 5 May 2017
sensor_api_common_types.h 2.2.0 5 May 2017

Integration details

  • Integrate files bme680.c, bme680.h, bme680_calculations.c, bme680_calculations.h, bme680_internal.h and sensor_api_common_types.h into your project.
  • Include the bme680.h file in your code like below.
#include "bme680.h"
  • The BME680_SensorAPI_Example_Guide.pdf contains examples for API use cases.

Driver files information

  • bme680.h
    • This header file has the constant definitions, user data types and supported sensor driver calls declarations which is required by the user.
  • bme680.c
    • This file contains the implementation for the sensor driver APIs.
  • bme680_calculations.h
    • This header file has the internal function declaration for the sensor calculation.
  • bme680_calculations.c
    • This file contains the implementation of the sensor calculations for sensor driver APIs.
  • bme680_internal.h
    • This header file has the register address definition, internal constant definitions.
  • sensor_api_common_types.h
    • This header file has the data type definition for different compiler platform.

Supported sensor interface

  • This BME680 sensor driver supports SPI and I2C interfaces

Simple Integration Example

  • A simple example for BME680 is given below.
  • Example meant for Single BME680 sensor in Force Mode with Temperature, Pressure, Humidity and Gas Enabled
  • Please refer bme680.h to refer the API calls for the integration.
/* include bme680 main header */
#include "bme680.h"
/*!
* BME680_MAX_NO_OF_SENSOR = 2; defined in bme680.h file
* In order to interface only one sensor over SPI, user must change the value of
* BME680_MAX_NO_OF_SENSOR = 1
* Test setup: It has been assumed that <20>BME680 sensor_0<5F> interfaced over SPI with
* Native chip select line
*/
/* BME680 sensor structure instance */
struct bme680_t bme680_sensor_no[BME680_MAX_NO_OF_SENSOR];
/* BME680 sensor's compensated data structure instance */
struct bme680_comp_field_data compensate_data_sensor[BME680_MAX_NO_OF_SENSOR][3];
/* BME680 sensor's uncompensated data structure instance */
struct bme680_uncomp_field_data uncompensated_data_of_sensor[BME680_MAX_NO_OF_SENSOR][3];
/* BME680 sensor's configuration structure instance */
struct bme680_sens_conf set_conf_sensor[BME680_MAX_NO_OF_SENSOR];
/* BME680 sensor's heater configuration structure instance */
struct bme680_heater_conf set_heatr_conf_sensor[BME680_MAX_NO_OF_SENSOR];

void main(void)
{
	unsigned int i = 0;
	enum bme680_return_type com_rslt = BME680_COMM_RES_ERROR;
	
	/* Do BME680 sensor structure instance initialization*/
	/* Sensor_0 interface over SPI with native chip select line */
	/* USER defined SPI bus read function */
	bme680_sensor_no[0].bme680_bus_read = BME680_SPI_bus_read_user;
	/* USER defined SPI bus write function */
	bme680_sensor_no[0].bme680_bus_write = BME680_SPI_bus_write_user;
	/* USER defined SPI burst read function */
	bme680_sensor_no[0].bme680_burst_read = BME680_SPI_bus_read_user;
	/* USER defined delay function */
	bme680_sensor_no[0].delay_msec = BME680_delay_msec_user;
	/* Mention communication interface */
	bme680_sensor_no[0].interface = BME680_SPI_INTERFACE;
	
	/* get chip id and calibration parameter */
	com_rslt = bme680_init(&bme680_sensor_no[0]);
	
	/* Do Sensor initialization */
	for (i=0;i<BME680_MAX_NO_OF_SENSOR;i++) {
		/* Check Device-ID before next steps of sensor operations */
		if (BME680_CHIP_ID == bme680_sensor_no[i].chip_id) {
			/* Select sensor configuration parameters */
			set_conf_sensor[i].heatr_ctrl = BME680_HEATR_CTRL_ENABLE;
			set_conf_sensor[i].run_gas = BME680_RUN_GAS_ENABLE;
			set_conf_sensor[i].nb_conv = 0x00;
			set_conf_sensor[i].osrs_hum = BME680_OSRS_1X;
			set_conf_sensor[i].osrs_pres = BME680_OSRS_1X;
			set_conf_sensor[i].osrs_temp = BME680_OSRS_1X;
			
			/* activate sensor configuration */
			com_rslt += bme680_set_sensor_config(&set_conf_sensor[i],
			&bme680_sensor_no[i]);
			
			/* Select Heater configuration parameters */
			set_heatr_conf_sensor[i].heater_temp[0] = 300;
			set_heatr_conf_sensor[i].heatr_idacv[0] = 1;
			set_heatr_conf_sensor[i].heatr_dur[0] = 137;
			set_heatr_conf_sensor[i].profile_cnt = 1;
			
			/* activate heater configuration */
			com_rslt += bme680_set_gas_heater_config(&set_heatr_conf_sensor[i],
			&bme680_sensor_no[i]);
			
			/* Set power mode as forced mode */
			com_rslt += bme680_set_power_mode(BME680_FORCED_MODE,&bme680_sensor_no[i]);
			
			if (BME680_COMM_RES_OK == com_rslt) {
				/*Get the uncompensated T+P+G+H data*/
				bme680_get_uncomp_data(uncompensated_data_of_sensor[i], 1, BME680_ALL,
				&bme680_sensor_no[i]);
				
				/*Get the compensated T+P+G+H data*/
				bme680_compensate_data(uncompensated_data_of_sensor[i],
				compensate_data_sensor[i], 1,
				BME680_ALL, &bme680_sensor_no[i]);
				
				/* put sensor into sleep mode explicitly */
				bme680_set_power_mode(BME680_SLEEP_MODE, &bme680_sensor_no[i]);
				
				/* call user define delay function(duration millisecond) */
				User_define_delay(100);
			}
		}
	}
}