Example Code for Arduino-Reading data without IAQ index

Reads sensor data and prints the values to the serial port. (IAQ data not included)

Hardware Preparation

Software Preparation

Wiring Diagram

  • This product supports both I2C and SPI interfaces. Select the appropriate wiring method based on your chosen communication interface.
  • The I2C interface is recommended for plug-and-play usage and easier integration.
  • When using the SPI interface, the module must be powered by 3.3V.

I2C Diagram

Make sure to follow the correct wiring sequence: connect VCC to 5V and GND to ground.

Other Preparation Work

Calibration is required for accurate altitude measurement. Before uploading the code, enter the altitude of your region into the following statement in the sample code:

seaLevel = bme.readSeaLevel(<altitude_in_meters>);

Sample Code

This sample code uses the I2C interface. For SPI examples, see the reference files.

Use setGasHeater() to set the heating layer to 320°C for 100 ms, then wait for 20–30 ms for the heater to reach the target temperature.
After the waiting period, call readGasResistance() to obtain the gas resistance value.

/*!
 * @file DFRobot_BME68x_I2C.ino
 * @brief connect bme68x I2C interface with your board (please reference board compatibility)
 * @n Temprature, Humidity, pressure, altitude, calibrate altitude and gas resistance data will print on serial window.
 *
 * @copyright   Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @license     The MIT License (MIT)
 * @author [Frank]([email protected])
 * @maintainer [GDuang]([email protected])
 * @version  V2.0
 * @date  2024-04-25
 * @url https://github.com/DFRobot/DFRobot_BME68x
 */

#include "DFRobot_BME68x_I2C.h"
#include "Wire.h"

/*use an accurate altitude to calibrate sea level air pressure*/
#define CALIBRATE_PRESSURE

DFRobot_BME68x_I2C bme(0x77);  //0x77 I2C address

float seaLevel; 
void setup()
{
  uint8_t rslt = 1;
  Serial.begin(9600);
  while(!Serial);
  delay(5000);
  Serial.println();
  while(rslt != 0) {
    rslt = bme.begin();
    if(rslt != 0) {
      Serial.println("bme begin failure");
      delay(2000);
    }
  }
  Serial.println("bme begin successful");
  #ifdef CALIBRATE_PRESSURE
  bme.startConvert();
  delay(1000);
  bme.update();
  /*You can use an accurate altitude to calibrate sea level air pressure. 
   *And then use this calibrated sea level pressure as a reference to obtain the calibrated altitude.
   *In this case,525.0m is chendu accurate altitude.
   */
  seaLevel = bme.readSeaLevel(525.0);
  Serial.print("seaLevel :");
  Serial.println(seaLevel);
  #endif

  // At initialization, the default heating layer target temperature is 320 and the duration is 150ms
  bool res = bme.setGasHeater(360, 100);
  
  Serial.print("Set the target temperature of the heating layer and the heating time: ");
  if(res == true){
    Serial.println("set successful!");
  }else{
    Serial.println("set failure!");
  }
}

void loop()
{
  bme.setGasHeater(320, 100);
  delay(30);
  bme.startConvert();
  delay(1000);
  bme.update();
  Serial.println();
  Serial.print("temperature(C) :");
  Serial.println(bme.readTemperature() / 100, 2);
  Serial.print("pressure(Pa) :");
  Serial.println(bme.readPressure());
  Serial.print("humidity(%rh) :");
  Serial.println(bme.readHumidity() / 1000, 2);
  Serial.print("gas resistance(ohm) :");
  Serial.println(bme.readGasResistance());
  Serial.print("altitude(m) :");
  Serial.println(bme.readAltitude());
  #ifdef CALIBRATE_PRESSURE
  Serial.print("calibrated altitude(m) :");
  Serial.println(bme.readCalibratedAltitude(seaLevel));
  #endif
}

Result

Was this article helpful?

TOP