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

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

#include <mup_presstemp_bmp180.h>

Public Types

enum  BMPSampleMode { ULTRA_LOW_POWER = 0 , STANDARD = 1 , HIGH_RESOLUTION = 2 , ULTRA_HIGH_RESOLUTION = 3 }
 

Public Member Functions

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

Detailed Description

mupplet-sensor temperature and pressure with Bosch BMP180

The mup_presstemp_bmp180 mupplet measures temperature and pressure using a or BMP180 sensor. It should also work with the outdated BMP085.

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

Messages sent by presstemp_bmp180 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_bmp180 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, STANDARD, HIGH_RESOLUTION, ULTRA_HIGH_RESOLUTION
<mupplet-name>/sensor/oversampling/set ULTRA_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.

```cpp #include "ustd_platform.h" #include "scheduler.h" #include "net.h" #include "mqtt.h"

#include "mup_presstemp_bmp180.h"

void appLoop();

ustd::Scheduler sched(10, 16, 32); ustd::Net net(LED_BUILTIN); ustd::Mqtt mqtt;

ustd::PressTempBMP180 bmp("myBMP180");

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. bmp.begin(&sched, ustd::PressTempBMP180::BMPSampleMode::ULTRA_HIGH_RESOLUTION);

sched.subscribe(tID, "myBMP180/sensor/temperature", sensorUpdates); }

void appLoop() { }

Never add code to this loop, use appLoop() instead. void loop() { sched.loop(); } ```

Member Enumeration Documentation

◆ BMPSampleMode

Hardware accuracy modes of BMP180

Enumerator
ULTRA_LOW_POWER 

1 samples, 4.5ms conversion time, 3uA current at 1 sample/sec, 0.06 RMS noise typ. [hPA]

STANDARD 

2 samples, 7.5ms conversion time, 5uA current at 1 sample/sec, 0.05 RMS noise typ. [hPA]

HIGH_RESOLUTION 

4 samples, 13.5ms conversion time, 7uA current at 1 sample/sec, 0.04 RMS noise typ. [hPA]

ULTRA_HIGH_RESOLUTION 

8 samples, 25.5ms conversion time, 12uA current at 1 sample/sec, 0.03 RMS noise typ. [hPA]

Constructor & Destructor Documentation

◆ PressTempBMP180()

ustd::PressTempBMP180::PressTempBMP180 ( String  name,
FilterMode  filterMode = FilterMode::MEDIUM,
uint8_t  i2cAddress = 0x77 
)
inline

Instantiate an BMP sensor mupplet

Parameters
nameName used for pub/sub messages
filterModeFAST, MEDIUM or LONGTERM filtering of sensor values
i2cAddressShould always be 0x77 for BMP180, cannot be changed.

Member Function Documentation

◆ getPressure()

double ustd::PressTempBMP180::getPressure ( )
inline

Get current pressure

Returns
Pressure (in hPa)

◆ getPressureNN()

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

Get current temperature

Returns
Temperature (in degrees celsius)

◆ setReferenceAltitude()

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