Example Code for Arduino-Data Reading(with IAQ)
Last revision 2026/01/21
Function: read data from BME680 sensor and serial printing(with IAQ). At present, only [FireBeetle ESP8266 IOT Microcontroller](https://www.dfrobot.com/product-1634.html "FireBeetle ESP8266 IOT Microcontroller") can read IAQ.
Hardware Preparation
- FireBeetle ESP8266 IOT Microcontroller x1
- BME680 Environmental Sensor module x1
- 4PIN Connector x1
Software Preparation
- Arduino IDE (use version 1.8.x)
- Download and install the BME680 Library. (About how to install the library?)
- Update the SDK to 2.3.1 or above for FireBeetle ESP8266. Refer to the FireBeetle ESP8266 Wiki.
Wiring Diagram
- This product supports both IIC and SPI wiring connector. Please select suitable connector according to the wiring. There is connection diagram below for your reference.
- I2C wiring connector is recommended, since it is plug & play and easy to use.
- When using SPI connector, then you should use 3.3V controller(Both Power and IO port should be 3.3V).
I2C Connection: please pay attention to wiring order, VCC to Power, GND to Ground.

Other Preparation Work
Download and install the BME680 Library. For FireBeetle ESP8266 IOT Microcontroller,please use Arduino IDE 1.8.x. Then update the SDK to 2.3.1 or above. Refer to the FireBeetle ESP8266 Wiki. Calibration is needed for more accurate altitude measurement. Please fill in the sample code with correct local altitude value: seaLevel = bme.readSeaLevel(your correct local altitude value).
Sample Code
/*
file DFRobot_BME680_I2C.ino
@ https://github.com/DFRobot/DFRobot_BME680
connect bme680 I2C interface with your board (please reference board compatibility)
Temprature, Humidity, pressure, altitude, calibrated altitude, gas resistance and IAQ data will be printed via serial.
Copyright [DFRobot](http://www.dfrobot.com), 2016
Copyright GNU Lesser General Public License
version V1.0
date 2017-12-7
*/
#include "DFRobot_BME680_I2C.h"
#include "Wire.h"
/*use an accurate altitude to calibrate sea level air pressure*/
#define CALIBRATE_PRESSURE
DFRobot_BME680_I2C bme(0x76); //0x77 I2C address
float seaLevel;
void setup()
{
uint8_t rslt = 1;
Serial.begin(115200);
while (!Serial);
delay(1000);
Serial.println();
while (rslt != 0) {
rslt = bme.begin();
if (rslt != 0) {
Serial.println("bme begin failure");
delay(2000);
}
}
Serial.println("bme begin successful");
bme.supportIAQ();
}
void loop()
{
static uint8_t calibrated = 0;
#ifdef CALIBRATE_PRESSURE
if (calibrated == 0) {
if (bme.iaqUpdate() == 0) {
/*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);
calibrated = 1;
}
}
#else
calibrated = 1;
#endif
if (calibrated) {
uint8_t rslt = bme.iaqUpdate();
if (rslt == 0) {
Serial.println();
Serial.print("timestamp(ms) :");
Serial.println(millis());
Serial.print("temperature(C) :");
Serial.println(bme.readTemperature(), 2);
Serial.print("pressure(Pa) :");
Serial.println(bme.readPressure());
Serial.print("humidity(%rh) :");
Serial.println(bme.readHumidity(), 2);
Serial.print("altitude(m) :");
Serial.println(bme.readAltitude());
#ifdef CALIBRATE_PRESSURE
Serial.print("calibrated altitude(m) :");
Serial.println(bme.readCalibratedAltitude(seaLevel));
#endif
Serial.print("gas resistance :");
Serial.println(bme.readGasResistance());
if (bme.isIAQReady()) {
Serial.print("IAQ :");
float iaq = bme.readIAQ();
Serial.print(iaq);
if (iaq < 50) Serial.println(" good");
else if (iaq < 100) Serial.println(" average");
else if (iaq < 150) Serial.println(" little bad");
else if (iaq < 200) Serial.println(" bad");
else if (iaq < 300) Serial.println(" worse");
else Serial.println(" very bad");
} else {
Serial.print("IAQ not ready, please wait about ");
Serial.print((int)(305000 - millis()) / 1000);
Serial.println(" seconds");
}
}
}
}
Result

Additional Information
At present, only FireBeetle ESP8266 IOT Microcontroller can read IAQ. For FireBeetle ESP8266 IOT Microcontroller,please use Arduino IDE 1.8.x. Then update the SDK to 2.3.1 or above. Refer to the FireBeetle ESP8266 Wiki.
Was this article helpful?
