Bosch Sensortec Community

    Showing results for 
    Search instead for 
    Did you mean: 

    BME680 gas sensor series design guide

    Product Overview

    The main characteristics of the BME680 are described below:

    Key features

    • 3.0 mm x 3.0 mm x 0.93 mm, metal lid LGA package
    • Digital interface I²C (up to 3.4 MHz) and SPI (3 and 4-wire, up to 10 MHz)
    • Supply voltage
      • VDD main supply voltage range: 1.71 V - 3.6 V
      • VDDIO interface voltage range: 1.2 V - 3.6 V
    • Current consumption
      • 2.1 μA at 1 Hz humidity and temperature
      • 3.1 μA at 1 Hz pressure and temperature
      • 3.7 μA at 1 Hz humidity, pressure and temperature
      • 0.09‒12 mA for p/h/T/gas depending on operation mode
      • 0,15 μA in sleep mode
    • Operating range: -40 to +85 °C, 0 - 100% r.H., 300 - 1100 hPa
    • Individual humidity, pressure and gas sensors can be operated independently
    • RoHS compliant, halogen-free, MSL1

    Furthermore here some performance parameters:

    Key parameters for gas sensor


    Response time (𝜏33−63%)

    < 1 s (for new sensors)

    Power consumption

    < 0.1 mA in ultra-low power mode

    Output data processing

    direct indoor air quality (IAQ) index output


    Key parameters for humidity sensor


    Response time (𝜏0−63%)

    ~8 s

    Accuracy tolerance

    ±3% r.H.


    ±1.5% r.H.


    Key parameters for temperature sensor


    RMS Noise

    0.12 Pa, equiv. to 1.7 cm

    Offset temperature coefficient

    ±1.3 Pa/K, equiv. to ±10.9 cm at 1 °C temperature change


    Available evaluation tools and software

    To best evaluate the product from the BME68x faminly

    Reference design

    Figure 1 shows the complete schematic for a typical use case.

    BME680 1.png

    Figure 1: Mockup reference design

    Bill of materials

    Table 2 lists the bill of necessary materials.


    Part number







    C1, C2


    4.7 kΩ



    R1, R2


    Table 2: Bill of materials

    Layout recommendations

    Landing Pattern

    For the design of the landing pattern, the dimensions shown in Figure 2 are recommended. It is important to note that areas marked in red are exposed PCB metal pads.

     In case of a solder mask defined (SMD) PCB process, the land dimensions should be defined by solder mask openings. The underlying metal pads are larger than these openings.

     In case of a non-solder mask defined (NSMD) PCB process, the land dimensions should be defined in the metal layer. The mask openings are larger than these metal pads.

    BME680 landing.png

    Figure 2: Recommended landing pattern (top view, in mm)

    Typical Layout

    Figure 3 shows the typical layout.


     Figure 3: Typical layout

    Manufacturing notes

    Table 3 lists some recommendations for the manufacture.



    PCB thickness


    Solder paste type

    3.0Ag/0.5Cu/Remain Sn

    Paste mask stencil thickness


    Peak reflow temperature


    Table 3: Manufacture recommendation

    First power-on

    After powering the sensor for the first time, the initial specs would be to test for communication with the device. This can be done simply by reading the chip identification code in the register 0xD0. See below for the expected values:


    Chip ID



    Table 5: Chip ID of the BME68x product family.

    Here is some sample code on how to perform this test, based on BME680, using the COINES software as the host.



     * @brief This internal API is used to initializes the bme680 sensor with default
     * settings like power mode and OSRS settings
     * @param[in] void
     * @return void
    static void init_bme680(void)
        int8_t rslt;
        rslt = bme680_init(&bme680Dev);
        if (rslt == BME680_OK)
            printf("BME680 Initialization Success!\n");
            printf("Chip ID 0x%x\n", bme680Dev.chip_id);  
            printf("Chip Initialization failure !\n");    




    How to test the sensor’s functionality

    The BME680 is a digital 4-in-1 sensor with gas, humidity, pressure and temperature measurement based on proven sensing principles. In order to verify the functionality of new sensors after soldering, an example self test code is available based on BME680 API.

    The self-test starts by performing a soft reset of the device. After this, Chip-ID and trimming data are read and verified. Then temperature, pressure and humidity sensor signals are measured and compared against customisable plausibility limits. For Gas sensor the heater and gas sensor resistance are checked. For more information on self test please refer to the BME680 self test application note.

    A sample code on how to perform this self-test for BME680 is available on Github. test


    The COINES installation provides sample code on how to turn on the sensor, configure it and read out the sensor data.  it can be found under the installation directory on examples\c\bme680

     Sample code

     The COINES installation includes an example code for using BSEC library with BME680.



     *  @brief Main Function where the execution getting started to test the code.
     *  @param[in] argc
     *  @param[in] argv
     *  @return status
    int main(int argc, char *argv[])
        return_values_init ret_bsec;
        int16_t rslt;
        struct coines_board_info board_info;
        signal(SIGINT, ctrl_c_sig_handler);
        rslt = coines_open_comm_intf(COINES_COMM_INTF_USB);
        if (rslt < 0)
            printf("\n Unable to connect with Application Board ! \n"
                   " 1. Check if the board is connected and powered on. \n"
                   " 2. Check if Application Board USB driver is installed. \n"
                   " 3. Check if Board is in use by another application. (Insufficient permissions to access USB) \n");
        rslt = coines_get_board_info(&board_info);
        if (rslt == COINES_SUCCESS)
            if (board_info.shuttle_id != BME680_SHUTTLE_ID)
                printf("! Warning invalid sensor shuttle. This application will not support this sensor \r\n"
                        "1.Check the sensor shuttle \r\n"
                        "2.Reset the board  \r\n");
        /* after sensor init introduce 200 msec sleep */
        /* Call to the function which initializes the BSEC library 
         * Switch on low-power mode and provide no temperature offset */
        ret_bsec = bsec_iot_init(BSEC_SAMPLE_RATE_LP, 0.0f, bus_write, bus_read, sleep, state_load, config_load);
        if (ret_bsec.bme680_status)
            /* Could not intialize BME680 */
            return (int)ret_bsec.bme680_status;
        else if (ret_bsec.bsec_status)
            /* Could not intialize BSEC library */
            return (int)ret_bsec.bsec_status;
        /* 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(sleep, get_timestamp_us, output_ready, state_save, 10000);
        return 0;



    Further reads

    Version history
    Last update:
    ‎08-02-2023 02:43 PM
    Updated by: