SparkFun Air Quality PM1/PM2.5/PM10 Sensor - BMV080  v1.0.0-15-g8f97a54
Library for the SparkFun Air Quality PM1/PM2.5/PM10 Sensor - BMV080r
Loading...
Searching...
No Matches
sfDevBMV080.h
Go to the documentation of this file.
1
19#pragma once
20
21#if __has_include("bmv080.h")
22#include "bmv080.h"
23#include "bmv080_defs.h"
24#else
25#error \
26 "BOSCH BMV080 SDK Must be installed. See instructions at www.github.com/sparkfun/SparkFun_BMV080_Arduino_Library - ERROR: bmv080.h not found"
27
28#endif
29
30// Include the platform independent layer of the SparkFun Toolkit
31#include <sfTk/sfTkIBus.h>
32#include <sfTk/sfToolkit.h>
33#include <stdint.h>
34
35#define SF_BMV080_DEFAULT_ADDRESS 0x57
36#define SF_BMV080_DEFAULT_IRQ_PIN 14
37
38#define SF_BMV080_MODE_CONTINUOUS 0
39#define SF_BMV080_MODE_DUTY_CYCLE 1
40
42{
43 public:
45 sfDevBMV080() : _theBus{nullptr}
46 {
47 }
48
65 sfTkError_t begin(sfTkIBus *theBus = nullptr);
66
87 bool init(void);
88
105 bool driverVersion(uint16_t &major, uint16_t &minor, uint16_t &patch);
106
121 bool open(void);
122
131 bool close(void);
132
149 bool reset(void);
150
160 static const size_t kBMV800IDLength = 13;
178 bool ID(char idOut[kBMV800IDLength]);
179
200 bool setMode(uint8_t mode);
201
217 float PM10(void);
218
234 float PM25(void);
235
251 float PM1(void);
252
268 bool isObstructed();
269
286 void setSensorValue(bmv080_output_t bmv080_output);
287
306 bool readSensor(bmv080_output_t *bmv080_output = nullptr);
307
322 uint16_t dutyCyclingPeriod();
323
341 bool setDutyCyclingPeriod(uint16_t duty_cycling_period);
342
356 float volumetricMassDensity();
357
374 bool setVolumetricMassDensity(float volumetric_mass_density);
375
388 float integrationTime();
389
405 bool setIntegrationTime(float integration_time);
406
420 uint32_t distributionId();
421
438 bool setDistributionId(uint32_t distribution_id);
439
454
471 bool setDoObstructionDetection(bool do_obstruction_detection);
472
487
505 bool setDoVibrationFiltering(bool do_vibration_filtering);
506
519 uint8_t measurementAlgorithm();
520
536 bool setMeasurementAlgorithm(uint8_t measurement_algorithm);
537
538 private:
539 // bosch bmv080 library callback functions (static methods to be used as callbacks)
559 static int8_t device_read_16bit_CB(bmv080_sercom_handle_t, uint16_t, uint16_t *, uint16_t);
560
580 static int8_t device_write_16bit_CB(bmv080_sercom_handle_t, uint16_t, const uint16_t *, uint16_t);
581
599 static int8_t device_delay_CB(uint32_t);
600
616 static void set_sensor_value(bmv080_output_t, void *);
617
634 bool sensorServiceRoutine(void);
635
636 // BMV080 sensor handle - used when referencing the sensor using the Bosch API
637 bmv080_handle_t _bmv080_handle_class = NULL;
638
639 // Internal flag to track if new sensor data is available
640 bool _dataAvailable = false;
641
642 // Internal cache for the latest sensor values
643 bmv080_output_t _sensorValue;
644
645 protected:
646 // Pointer to the SparkFun Toolkit bus interface used for communication
647 sfTkIBus *_theBus;
648};
Definition: sfDevBMV080.h:42
void setSensorValue(bmv080_output_t bmv080_output)
Internal method to set sensor values from callback.
Definition: sfDevBMV080.cpp:168
bool setMode(uint8_t mode)
Sets the operational mode of the BMV080 sensor.
Definition: sfDevBMV080.cpp:195
float PM10(void)
Gets the PM10 (particulate matter ≤10 µm) concentration.
Definition: sfDevBMV080.cpp:144
bool close(void)
Closes communication with the BMV080 sensor.
Definition: sfDevBMV080.cpp:264
bool isObstructed()
Checks if the BMV080 sensor is obstructed.
Definition: sfDevBMV080.cpp:162
static const size_t kBMV800IDLength
Length of the BMV080 sensor ID string buffer.
Definition: sfDevBMV080.h:160
bool ID(char idOut[kBMV800IDLength])
Gets the unique identifier of the BMV080 sensor.
Definition: sfDevBMV080.cpp:297
bool init(void)
Initializes the BMV080 sensor.
Definition: sfDevBMV080.cpp:232
bool driverVersion(uint16_t &major, uint16_t &minor, uint16_t &patch)
Gets the version information of the BMV080 sensor driver.
Definition: sfDevBMV080.cpp:284
bool setMeasurementAlgorithm(uint8_t measurement_algorithm)
Sets the measurement algorithm for particle analysis.
Definition: sfDevBMV080.cpp:431
bool setDistributionId(uint32_t distribution_id)
Sets the distribution ID for particle size classification.
Definition: sfDevBMV080.cpp:374
bool open(void)
Opens and initializes communication with the BMV080 sensor.
Definition: sfDevBMV080.cpp:248
sfTkIBus * _theBus
Definition: sfDevBMV080.h:647
bool setDoObstructionDetection(bool do_obstruction_detection)
Enables or disables the sensor's obstruction detection feature.
Definition: sfDevBMV080.cpp:393
bool setVolumetricMassDensity(float volumetric_mass_density)
Sets the volumetric mass density for particle concentration calculations.
Definition: sfDevBMV080.cpp:335
float PM1(void)
Gets the PM1 (particulate matter ≤1.0 µm) concentration.
Definition: sfDevBMV080.cpp:156
uint16_t dutyCyclingPeriod()
Gets the current duty cycling period setting.
Definition: sfDevBMV080.cpp:306
bool setDoVibrationFiltering(bool do_vibration_filtering)
Enables or disables vibration filtering.
Definition: sfDevBMV080.cpp:412
float PM25(void)
Gets the PM2.5 (particulate matter ≤2.5 µm) concentration.
Definition: sfDevBMV080.cpp:150
uint8_t measurementAlgorithm()
Gets the current measurement algorithm setting.
Definition: sfDevBMV080.cpp:421
bool doVibrationFiltering()
Gets the vibration filtering setting.
Definition: sfDevBMV080.cpp:402
sfDevBMV080()
Default constructor.
Definition: sfDevBMV080.h:45
sfTkError_t begin(sfTkIBus *theBus=nullptr)
Begins communication with the BMV080 sensor.
Definition: sfDevBMV080.cpp:131
float integrationTime()
Gets the sensor's integration time setting.
Definition: sfDevBMV080.cpp:344
bool setDutyCyclingPeriod(uint16_t duty_cycling_period)
Sets the time interval between measurements in duty cycle mode.
Definition: sfDevBMV080.cpp:316
float volumetricMassDensity()
Gets the volumetric mass density setting.
Definition: sfDevBMV080.cpp:325
bool doObstructionDetection()
Gets the obstruction detection setting.
Definition: sfDevBMV080.cpp:383
uint32_t distributionId()
Gets the current distribution ID setting.
Definition: sfDevBMV080.cpp:363
bool setIntegrationTime(float integration_time)
Sets the sensor's integration time for measurements.
Definition: sfDevBMV080.cpp:354
bool readSensor(bmv080_output_t *bmv080_output=nullptr)
Reads the latest sensor values from the BMV080.
Definition: sfDevBMV080.cpp:182
bool reset(void)
Resets the BMV080 sensor to its default state.
Definition: sfDevBMV080.cpp:277