Example Code for Arduino-BMV080 Continuous Measurement Reading

The article guides users to communicate with BMV080 via the I2C interface of ESP32-E, configure balanced measurement algorithm, obstruction detection and vibration filtering, enable continuous measurement mode, poll for PM1.0/PM2.5/PM10 concentration as well as obstruction and out-of-range alarm status, and print data through serial port.

Hardware Preparation

Software Preparation

Wiring Diagram

SEN0662-I2C Wiring Diagram

Connection Description:

Sensor Pin: VCC Connect to Main Controller Pin: 3.3V
Sensor Pin: GND Connect to Main Controller Pin: GND
Sensor Pin: C Connect to Main Controller Pin: 22/SCL
Sensor Pin: D Connect to Main Controller Pin: 21/SDA
  • DIP switch configuration for the sensor: Set communication mode to I2C, and set the I2C address to 0x57 (A0=1, A1=1, factory default address).

Sample Code

#include "DFRobot_BMV080_Gravity.h"
// I2C device address, A0 and A1 pins pulled high for 0x57
const uint8_t I2C_ADDR = 0x57;
DFRobot_BMV080_Gravity_I2C sensor(&Wire, I2C_ADDR);

void setup()
{
  delay(2000);
  // Initialize serial port at baud rate 115200
  Serial.begin(115200);
  while (!Serial) {
    delay(100);
  }

  // Sensor I2C initialization, loop until initialization succeeds
  while (!sensor.begin()) {
    Serial.println("Sensor init failed, please check wiring and I2C address!");
    delay(1000);
  }
  Serial.println("BMV080 sensor init succeeded");

  /**
   * Set measurement algorithm mode:
   * eFastResponse    Fast response mode
   * eBalanced        Balanced mode (balance speed and accuracy, default)
   * eHighPrecision   High precision mode
   */
  sensor.setMeasurementAlgorithm(DFRobot_BMV080_Gravity::eBalanced);
  Serial.print("Current measurement algorithm: ");
  Serial.println(sensor.getMeasurementAlgorithm());

  // Enable obstruction detection
  sensor.setObstructionDetection(true);
  Serial.print("Obstruction detection: ");
  Serial.println(sensor.getObstructionDetection() ? "Enabled" : "Disabled");

  // Enable vibration filtering
  sensor.setVibrationFiltering(true);
  Serial.print("Vibration filtering: ");
  Serial.println(sensor.getVibrationFiltering() ? "Enabled" : "Disabled");

  // Start continuous measurement mode
  if (sensor.setMeasureMode(DFRobot_BMV080_Gravity::eContinuousMode) == 0) {
    Serial.println("Continuous measurement mode enabled");
  } else {
    Serial.println("Failed to start continuous measurement!");
  }
}

void loop()
{
  DFRobot_BMV080_Gravity::sData_t data;

  // Read sensor measurement data, return true only when new data is ready
  if (sensor.getData(&data)) {
    Serial.print("PM1.0: ");
    Serial.print(data.PM1);
    Serial.print(" ug/m3 | PM2.5: ");
    Serial.print(data.PM2_5);
    Serial.print(" ug/m3 | PM10: ");
    Serial.print(data.PM10);
    Serial.print(" ug/m3");

    // Print status warning messages
    if (data.isObstructed) {
      Serial.print("  [WARNING: Sensor filter obstructed]");
    }
    if (data.isOutsideMeasurementRange) {
      Serial.print("  [WARNING: Measured value out of range]");
    }
    Serial.println();
  }

  delay(100);
}

Result

SEN0662-I2C Result

Was this article helpful?

TOP