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::PressTempHumBME280 Class Reference

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

#include <mup_presstemphum_bme280.h>

Public Types

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

Public Member Functions

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

Detailed Description

mupplet-sensor temperature and pressure with Bosch BME280

The mup_presstemphum_bme280 mupplet measures temperature, pressure, and humity using the BME280 sensor.

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

Messages sent by presstemphum_bme280 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/humidity humidity in percent [0.0 - 100.0%] 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 presstemphum_bme280 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/humidity/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_presstemphum_bme280.h"
void appLoop();
ustd::Scheduler sched(10, 16, 32);
ustd::Net net(LED_BUILTIN);
ustd::Mqtt mqtt;
ustd::PressTempHumBME280 bme("myBME280");
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
bme.setReferenceAltitude(518.0); // 518m above NN, now we also receive PressureNN values for sea level.
bme.begin(&sched);
sched.subscribe(tID, "myBME280/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 BME280
Definition: mup_presstemphum_bme280.h:112

Member Enumeration Documentation

◆ BMESampleMode

Hardware accuracy modes of BME280, 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

◆ PressTempHumBME280()

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

Instantiate an BME sensor mupplet

Parameters
nameName used for pub/sub messages
filterModeFAST, MEDIUM or LONGTERM filtering of sensor values
i2cAddressShould always be 0x76 or 0x77 for BME280, depending address config.

Member Function Documentation

◆ getHumidity()

double ustd::PressTempHumBME280::getHumidity ( )
inline

Get current humidity

Returns
Humidity (in %)

◆ getPressure()

double ustd::PressTempHumBME280::getPressure ( )
inline

Get current pressure

Returns
Pressure (in hPa)

◆ getPressureNN()

double ustd::PressTempHumBME280::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::PressTempHumBME280::getTemperature ( )
inline

Get current temperature

Returns
Temperature (in degrees celsius)

◆ setReferenceAltitude()

void ustd::PressTempHumBME280::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::PressTempHumBME280::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: