muwerk mupplet Sensor Library
muwerk applets; mupplets: functional units that support specific hardware or reusable applications for sensors
|
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) |
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 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 |
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 |
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(); } ```
Hardware accuracy modes of BMP180
|
inline |
Instantiate an BMP sensor mupplet
name | Name used for pub/sub messages |
filterMode | FAST, MEDIUM or LONGTERM filtering of sensor values |
i2cAddress | Should always be 0x77 for BMP180, cannot be changed. |
|
inline |
Get current 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.
|
inline |
Get current temperature
|
inline |
Set the altitude at current sensor location as reference
_referenceAltitudeMeters | The current altitude above sea level in meters |
|
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.