comments and low energy sampling
This commit is contained in:
parent
db1750ef53
commit
e2f57bad76
5 changed files with 67 additions and 19 deletions
|
|
@ -2,15 +2,20 @@
|
||||||
#include <sensors/BmpSensor.h>
|
#include <sensors/BmpSensor.h>
|
||||||
|
|
||||||
#define SLEEP_TIME 2
|
#define SLEEP_TIME 2
|
||||||
|
#define BAUD_RATE 112500
|
||||||
|
|
||||||
Sensor *bmpSensor;
|
Sensor *bmpSensor;
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
|
Serial.begin(BAUD_RATE);
|
||||||
bmpSensor = new BmpSensor();
|
bmpSensor = new BmpSensor();
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
bmpSensor->sample();
|
sensor_data_t sample = ((BmpSensor *) bmpSensor)->sampleLowEnergy();
|
||||||
bmpSensor->enableStandbyMode();
|
Serial.printf("Temperature: %f | Pressure: %f \n",
|
||||||
|
sample.temperature,
|
||||||
|
sample.pressure
|
||||||
|
);
|
||||||
delay(SLEEP_TIME * 1000);
|
delay(SLEEP_TIME * 1000);
|
||||||
}
|
}
|
||||||
|
|
@ -3,28 +3,33 @@
|
||||||
#include <Adafruit_BMP280.h>
|
#include <Adafruit_BMP280.h>
|
||||||
#include "BmpSensor.h"
|
#include "BmpSensor.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new BMP Sensor and initializes it
|
||||||
|
*/
|
||||||
BmpSensor::BmpSensor() {
|
BmpSensor::BmpSensor() {
|
||||||
this->BmpSensor::sensor_setup();
|
this->BmpSensor::sensor_setup();
|
||||||
this->state = SensorState::ASLEEP;
|
this->state = SensorState::ASLEEP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function responsible for setting up the sensor and the I2C connection
|
||||||
|
*/
|
||||||
void BmpSensor::sensor_setup() {
|
void BmpSensor::sensor_setup() {
|
||||||
Serial.begin(112500);
|
|
||||||
while (!Serial) delay(100); // wait for native usb
|
while (!Serial) delay(100); // wait for native usb
|
||||||
|
|
||||||
unsigned status;
|
unsigned status = this->bmp.begin(0x76); //set the correct I2C port
|
||||||
status = this->bmp.begin(0x76); //set the correct I2C port
|
|
||||||
|
|
||||||
//query status and reboot the board if no sensor is detected
|
//query status and reboot the board if no sensor is detected
|
||||||
if (!status) {
|
if (!status)
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
|
|
||||||
}
|
//put sensor to standby mode
|
||||||
|
|
||||||
/* Default settings from datasheet. */
|
|
||||||
this->enableStandbyMode();
|
this->enableStandbyMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to wake sensor up from standby mode
|
||||||
|
*/
|
||||||
void BmpSensor::wakeUp() {
|
void BmpSensor::wakeUp() {
|
||||||
this->bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
|
this->bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
|
||||||
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
|
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
|
||||||
|
|
@ -34,6 +39,9 @@ void BmpSensor::wakeUp() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to put sensor to standby mode
|
||||||
|
*/
|
||||||
void BmpSensor::enableStandbyMode() {
|
void BmpSensor::enableStandbyMode() {
|
||||||
this->bmp.setSampling(Adafruit_BMP280::MODE_SLEEP, /* Operating Mode. */
|
this->bmp.setSampling(Adafruit_BMP280::MODE_SLEEP, /* Operating Mode. */
|
||||||
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
|
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
|
||||||
|
|
@ -43,22 +51,38 @@ void BmpSensor::enableStandbyMode() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BmpSensor::sample() {
|
/**
|
||||||
|
* read a sample from the sensor
|
||||||
|
* @return a struct containing all necessary sensor data
|
||||||
|
*/
|
||||||
|
sensor_data_t BmpSensor::sample() {
|
||||||
//wake sensor up if it is in standby mode
|
//wake sensor up if it is in standby mode
|
||||||
if (this->state == SensorState::ASLEEP)
|
if (this->state == SensorState::ASLEEP)
|
||||||
this->wakeUp();
|
this->wakeUp();
|
||||||
|
|
||||||
|
//sample pressure and temperature
|
||||||
sensors_event_t temp_event, pressure_event;
|
sensors_event_t temp_event, pressure_event;
|
||||||
this->bmp_temp->getEvent(&temp_event);
|
this->bmp_temp->getEvent(&temp_event);
|
||||||
bmp_pressure->getEvent(&pressure_event);
|
this->bmp_pressure->getEvent(&pressure_event);
|
||||||
|
|
||||||
Serial.print(F("Temperature = "));
|
|
||||||
Serial.print(temp_event.temperature);
|
|
||||||
Serial.print(" °C | ");
|
|
||||||
|
|
||||||
Serial.print(F("Pressure = "));
|
return sensor_data_t
|
||||||
Serial.print(pressure_event.pressure);
|
{
|
||||||
Serial.println(" hPa");
|
temp_event.temperature,
|
||||||
|
pressure_event.pressure
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read a sample and put sensor to standby mode
|
||||||
|
* @return the sample read
|
||||||
|
*/
|
||||||
|
sensor_data_t BmpSensor::sampleLowEnergy() {
|
||||||
|
//read sample
|
||||||
|
sensor_data_t sampledData = this->sample();
|
||||||
|
//put sensor to standby
|
||||||
|
this->enableStandbyMode();
|
||||||
|
return sampledData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,8 @@ private:
|
||||||
public:
|
public:
|
||||||
BmpSensor();
|
BmpSensor();
|
||||||
|
|
||||||
void sample() override;
|
sensor_data_t sample() override;
|
||||||
|
sensor_data_t sampleLowEnergy();
|
||||||
|
|
||||||
void enableStandbyMode() override;
|
void enableStandbyMode() override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,15 @@
|
||||||
#ifndef NEW_CLIMTE_GO_SENSOR_H
|
#ifndef NEW_CLIMTE_GO_SENSOR_H
|
||||||
#define NEW_CLIMTE_GO_SENSOR_H
|
#define NEW_CLIMTE_GO_SENSOR_H
|
||||||
|
|
||||||
|
#include <sensors/sensor_data_t.h>
|
||||||
|
|
||||||
enum class SensorState : unsigned short {
|
enum class SensorState : unsigned short {
|
||||||
AWAKE, ASLEEP
|
AWAKE, ASLEEP
|
||||||
};
|
};
|
||||||
|
|
||||||
class Sensor {
|
class Sensor {
|
||||||
public:
|
public:
|
||||||
virtual void sample() = 0;
|
virtual sensor_data_t sample() = 0;
|
||||||
|
|
||||||
virtual void wakeUp() = 0;
|
virtual void wakeUp() = 0;
|
||||||
|
|
||||||
|
|
|
||||||
16
src/sensors/sensor_data_t.h
Normal file
16
src/sensors/sensor_data_t.h
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
#ifndef NEW_CLIMTE_GO_SENSOR_DATA_T_H
|
||||||
|
#define NEW_CLIMTE_GO_SENSOR_DATA_T_H
|
||||||
|
|
||||||
|
#include <types.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This struct represents data read from any sensor.
|
||||||
|
* This implies, reading temperature from e.g. the CO2 Sensor
|
||||||
|
* does not make any sense
|
||||||
|
*/
|
||||||
|
struct sensor_data_t {
|
||||||
|
float temperature;
|
||||||
|
float pressure;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
Loading…
Add table
Add a link
Reference in a new issue