muwerk mupplet Sensor Library
muwerk applets; mupplets: functional units that support specific hardware or reusable applications for sensors
Loading...
Searching...
No Matches
Public Types | Public Member Functions | List of all members
ustd::PressTempBMP280 Class Reference

mupplet-sensor temperature and pressure with Bosch BMP280 More...

#include <mup_presstemp_bmp280.h>

Public Types

enum  BMPSampleMode {
  ULTRA_LOW_POWER = 1 , LOW_POWER = 2 , STANDARD = 3 , HIGH_RESOLUTION = 4 ,
  ULTRA_HIGH_RESOLUTION = 5
}
 

Public Member Functions

 PressTempBMP280 (String name, FilterMode filterMode=FilterMode::MEDIUM, uint8_t i2cAddress=0x76)
 
void setReferenceAltitude (double _referenceAltitudeMeters)
 
void startRelativeAltitude ()
 
double getTemperature ()
 
double getPressure ()
 
double getPressureNN (double _pressure)
 

Detailed Description

mupplet-sensor temperature and pressure with Bosch BMP280

The mup_presstemp_bmp280 mupplet measures temperature and pressure using BMP280 sensor.

This mupplet is a fully asynchronous state-machine with no delay()s, so it never blocks.

Messages sent by presstemp_bmp280 mupplet:

messages are prefixed by omu/<hostname>:

topic message body comment
<mupplet-name>/sensor/temperature temperature in degree celsius Float value encoded as string, sent periodically as available
<mupplet-name>/sensor/pressure pressure in hPA for current altitude Float value encoded as string, sent periodically as available
<mupplet-name>/sensor/pressureNN pressure in hPA adjusted for sea level (requires setReferenceAltitude() to be called) Float value encoded as string, sent periodically as available
<mupplet-name>/sensor/calibrationdata a string with values of all internal calibration variables descriptive string
<mupplet-name>/sensor/referencealtitude altitude above sea level as set with setReferenceAltitude() Float value encoded as string
<mupplet-name>/sensor/relativealtitude current altitude in meters Current altitude in comparison to the set reference in meters, requires referencealtitude/set and relativealtitude/set msgs being sent.
<mupplet-name>/sensor/deltaaltitude current altitude in meters Current altitude delta in meters, requirements as with relativealtitude
<mupplet-name>/sensor/oversampling ULTRA_LOW_POWER, STANDARD, HIGH_RESOLUTION, ULTRA_HIGH_RESOLUTION Internal sensor oversampling mode (sensor hardware)
<mupplet-name>/sensor/mode FAST, MEDIUM, or LONGTERM Integration time for sensor values, external, additional integration

Messages received by presstemp_bmp280 mupplet:

Need to be prefixed by <hostname>/:

topic message body comment
<mupplet-name>/sensor/temperature/get - Causes current value to be sent.
<mupplet-name>/sensor/pressure/get - Causes current value to be sent.
<mupplet-name>/sensor/pressureNN/get - Causes current value to be sent.
<mupplet-name>/sensor/referencealtitude/get - Causes current value to be sent.
<mupplet-name>/sensor/referencealtitude/set float encoded as string of current altitude in meters Once the reference altitude is set, pressureNN values can be calculated.
<mupplet-name>/sensor/relativealtitude/set - Save current pressureNN values as reference, start generating relative altitude-change messages, requires reference altitude to be set
<mupplet-name>/sensor/relativealtitude/get - Get current altitude in comparison to the set reference and an altitude delta in meters
<mupplet-name>/sensor/calibrationdata/get - Causes current values to be sent.
<mupplet-name>/sensor/oversampling/get - Returns samplemode: ULTRA_LOW_POWER, LOW_POWER, STANDARD, HIGH_RESOLUTION, ULTRA_HIGH_RESOLUTION
<mupplet-name>/sensor/oversampling/set ULTRA_LOW_POWER, LOW_POWER, STANDARD, HIGH_RESOLUTION, ULTRA_HIGH_RESOLUTION Set internal sensor oversampling mode
<mupplet-name>/sensor/mode/get - Returns filterMode: FAST, MEDIUM, or LONGTERM
<mupplet-name>/sensor/mode/set FAST, MEDIUM, or LONGTERM Set external additional filter values

Sample code

For a complete examples see the muwerk/examples project.

#include "ustd_platform.h"
#include "scheduler.h"
#include "net.h"
#include "mqtt.h"
#include "mup_presstemp_bmp280.h"
void appLoop();
ustd::Scheduler sched(10, 16, 32);
ustd::Net net(LED_BUILTIN);
ustd::Mqtt mqtt;
ustd::PressTempBMP280 bmp("myBMP280");
void sensorUpdates(String topic, String msg, String originator) {
// data is in topic, msg
}
void setup() {
#ifdef USE_SERIAL_DBG
Serial.begin(115200);
#endif // USE_SERIAL_DBG
net.begin(&sched);
mqtt.begin(&sched);
ota.begin(&sched);
int tID = sched.add(appLoop, "main", 1000000);
// sensors start measuring pressure and temperature
bmp.setReferenceAltitude(518.0); // 518m above NN, now we also receive PressureNN values for sea level.
sched.subscribe(tID, "myBMP280/sensor/temperature", sensorUpdates);
}
void appLoop() {
}
// Never add code to this loop, use appLoop() instead.
void loop() {
sched.loop();
}
mupplet-sensor temperature and pressure with Bosch BMP280
Definition: mup_presstemp_bmp280.h:110
@ ULTRA_HIGH_RESOLUTION
16 samples, pressure resolution 20bit / 0.16 Pa, rec temperature oversampling: x2
Definition: mup_presstemp_bmp280.h:144

Member Enumeration Documentation

◆ BMPSampleMode

Hardware accuracy modes of BMP280, while the sensor can have different pressure- and temperature oversampling, we use same for both temp and press.

Enumerator
ULTRA_LOW_POWER 

1 samples, pressure resolution 16bit / 2.62 Pa, rec temperature oversampling: x1

LOW_POWER 

2 samples, pressure resolution 17bit / 1.31 Pa, rec temperature oversampling: x1

STANDARD 

4 samples, pressure resolution 18bit / 0.66 Pa, rec temperature oversampling: x1

HIGH_RESOLUTION 

8 samples, pressure resolution 19bit / 0.33 Pa, rec temperature oversampling: x1

ULTRA_HIGH_RESOLUTION 

16 samples, pressure resolution 20bit / 0.16 Pa, rec temperature oversampling: x2

Constructor & Destructor Documentation

◆ PressTempBMP280()

ustd::PressTempBMP280::PressTempBMP280 ( String  name,
FilterMode  filterMode = FilterMode::MEDIUM,
uint8_t  i2cAddress = 0x76 
)
inline

Instantiate an BMP sensor mupplet

Parameters
nameName used for pub/sub messages
filterModeFAST, MEDIUM or LONGTERM filtering of sensor values
i2cAddressShould always be 0x76 or 0x77 for BMP280, depending on SDO pin.

Member Function Documentation

◆ getPressure()

double ustd::PressTempBMP280::getPressure ( )
inline

Get current pressure

Returns
Pressure (in hPa)

◆ getPressureNN()

double ustd::PressTempBMP280::getPressureNN ( double  _pressure)
inline

Get current pressure at sea level (NN)

Once a reference altitude is defined (see setReferenceAltitude()), pressure at sea level NN can be calculated with this function.

Returns
Pressure at sea level (in hPa)

◆ getTemperature()

double ustd::PressTempBMP280::getTemperature ( )
inline

Get current temperature

Returns
Temperature (in degrees celsius)

◆ setReferenceAltitude()

void ustd::PressTempBMP280::setReferenceAltitude ( double  _referenceAltitudeMeters)
inline

Set the altitude at current sensor location as reference

Parameters
_referenceAltitudeMetersThe current altitude above sea level in meters

◆ startRelativeAltitude()

void ustd::PressTempBMP280::startRelativeAltitude ( )
inline

Store current pressure for a reference altitude to start relative altitude measurement

Once a reference altitude is defined (see setReferenceAltitude()), measurement of relative altitude can be started by calling this function.


The documentation for this class was generated from the following file: