From ebf5715aba3e780cd0b19112ffad302423d1e1c4 Mon Sep 17 00:00:00 2001 From: Lady Ada Date: Sun, 29 Dec 2019 03:24:43 -0500 Subject: [PATCH] example for unified sensors --- Adafruit_BME280.cpp | 33 ++++++++++-- Adafruit_BME280.h | 9 ++-- examples/bme280_unified/bme280_unified.ino | 62 ++++++++++++++++++++++ 3 files changed, 97 insertions(+), 7 deletions(-) create mode 100644 examples/bme280_unified/bme280_unified.ino diff --git a/Adafruit_BME280.cpp b/Adafruit_BME280.cpp index 18112ce..cb4fe58 100644 --- a/Adafruit_BME280.cpp +++ b/Adafruit_BME280.cpp @@ -61,6 +61,21 @@ Adafruit_BME280::Adafruit_BME280(int8_t cspin, int8_t mosipin, int8_t misopin, int8_t sckpin) : _cs(cspin), _mosi(mosipin), _miso(misopin), _sck(sckpin) {} + + +Adafruit_BME280::~Adafruit_BME280(void) { + if (temp_sensor) { + delete temp_sensor; + } + if (pressure_sensor) { + delete pressure_sensor; + } + if (humidity_sensor) { + delete humidity_sensor; + } +} + + /*! * @brief Initialise sensor with given parameters / settings * @param addr the I2C address the device can be found on @@ -533,6 +548,10 @@ uint32_t Adafruit_BME280::sensorID(void) { return _sensorID; } @return Adafruit_Sensor pointer to temperature sensor */ Adafruit_Sensor *Adafruit_BME280::getTemperatureSensor(void) { + if (! temp_sensor) { + temp_sensor = new Adafruit_BME280_Temp(this); + } + return temp_sensor; } @@ -542,6 +561,9 @@ Adafruit_Sensor *Adafruit_BME280::getTemperatureSensor(void) { @return Adafruit_Sensor pointer to pressure sensor */ Adafruit_Sensor *Adafruit_BME280::getPressureSensor(void) { + if (! pressure_sensor) { + pressure_sensor = new Adafruit_BME280_Pressure(this); + } return pressure_sensor; } @@ -551,6 +573,9 @@ Adafruit_Sensor *Adafruit_BME280::getPressureSensor(void) { @return Adafruit_Sensor pointer to humidity sensor */ Adafruit_Sensor *Adafruit_BME280::getHumiditySensor(void) { + if (! humidity_sensor) { + humidity_sensor = new Adafruit_BME280_Humidity(this); + } return humidity_sensor; } @@ -570,8 +595,8 @@ void Adafruit_BME280_Temp::getSensor(sensor_t *sensor) { sensor->sensor_id = _sensorID; sensor->type = SENSOR_TYPE_AMBIENT_TEMPERATURE; sensor->min_delay = 0; - sensor->max_value = -40.0; /* Temperature range -40 ~ +85 C */ - sensor->min_value = +85.0; + sensor->min_value = -40.0; /* Temperature range -40 ~ +85 C */ + sensor->max_value = +85.0; sensor->resolution = 0.01; /* 0.01 C */ } @@ -610,8 +635,8 @@ void Adafruit_BME280_Pressure::getSensor(sensor_t *sensor) { sensor->sensor_id = _sensorID; sensor->type = SENSOR_TYPE_PRESSURE; sensor->min_delay = 0; - sensor->max_value = 300.0; /* 300 ~ 1100 hPa */ - sensor->min_value = 1100.0; + sensor->min_value = 300.0; /* 300 ~ 1100 hPa */ + sensor->max_value = 1100.0; sensor->resolution = 0.012; /* 0.12 hPa relative */ } diff --git a/Adafruit_BME280.h b/Adafruit_BME280.h index 203edf0..aac229a 100644 --- a/Adafruit_BME280.h +++ b/Adafruit_BME280.h @@ -131,7 +131,7 @@ public: void getSensor(sensor_t *); private: - int _sensorID = 0; + int _sensorID = 280; Adafruit_BME280 *_theBME280 = NULL; }; @@ -145,7 +145,7 @@ public: void getSensor(sensor_t *); private: - int _sensorID = 0; + int _sensorID = 280; Adafruit_BME280 *_theBME280 = NULL; }; @@ -214,7 +214,7 @@ public: Adafruit_BME280(); Adafruit_BME280(int8_t cspin, SPIClass *theSPI = &SPI); Adafruit_BME280(int8_t cspin, int8_t mosipin, int8_t misopin, int8_t sckpin); - + ~Adafruit_BME280(void); bool begin(uint8_t addr = BME280_ADDRESS, TwoWire *theWire = &Wire); bool init(); @@ -242,8 +242,11 @@ protected: TwoWire *_wire; //!< pointer to a TwoWire object SPIClass *_spi; //!< pointer to SPI object + //!< Adafruit_Sensor compat temperature sensor component Adafruit_BME280_Temp *temp_sensor = NULL; + //!< Adafruit_Sensor compat pressure sensor component Adafruit_BME280_Pressure *pressure_sensor = NULL; + //!< Adafruit_Sensor compat humidity sensor component Adafruit_BME280_Humidity *humidity_sensor = NULL; void readCoefficients(void); diff --git a/examples/bme280_unified/bme280_unified.ino b/examples/bme280_unified/bme280_unified.ino new file mode 100644 index 0000000..8a67af4 --- /dev/null +++ b/examples/bme280_unified/bme280_unified.ino @@ -0,0 +1,62 @@ +/*************************************************************************** + This is a library for the BME280 humidity, temperature & pressure sensor + This example shows how to take Sensor Events instead of direct readings + + Designed specifically to work with the Adafruit BME280 Breakout + ----> http://www.adafruit.com/products/2652 + + These sensors use I2C or SPI to communicate, 2 or 4 pins are required + to interface. + + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing products + from Adafruit! + + Written by Limor Fried & Kevin Townsend for Adafruit Industries. + BSD license, all text above must be included in any redistribution + ***************************************************************************/ + +#include +#include +#include + +Adafruit_BME280 bme; // use I2C interface +Adafruit_Sensor *bme_temp = bme.getTemperatureSensor(); +Adafruit_Sensor *bme_pressure = bme.getPressureSensor(); +Adafruit_Sensor *bme_humidity = bme.getHumiditySensor(); + +void setup() { + Serial.begin(9600); + Serial.println(F("BME280 Sensor event test")); + + if (!bme.begin()) { + Serial.println(F("Could not find a valid BME280 sensor, check wiring!")); + while (1) delay(10); + } + + bme_temp->printSensorDetails(); + bme_pressure->printSensorDetails(); + bme_humidity->printSensorDetails(); +} + +void loop() { + sensors_event_t temp_event, pressure_event, humidity_event; + bme_temp->getEvent(&temp_event); + bme_pressure->getEvent(&pressure_event); + bme_humidity->getEvent(&humidity_event); + + Serial.print(F("Temperature = ")); + Serial.print(temp_event.temperature); + Serial.println(" *C"); + + Serial.print(F("Humidity = ")); + Serial.print(humidity_event.relative_humidity); + Serial.println(" %"); + + Serial.print(F("Pressure = ")); + Serial.print(pressure_event.pressure); + Serial.println(" hPa"); + + Serial.println(); + delay(1000); +} \ No newline at end of file