Barometer¶
A barometer is a scientific instrument that is used to measure air pressure in a certain environment. The absolute barometric pressure sensor can measure pressure from 300 Pascal to 1100 hPa.
MetaWear RPro and Cpro, MMR, MMC, MTR, and MetaEnvironment boards come with a Bosch barometer.
The specific barometer model varies between the boards although both barometers are nearly identical save for a few settings. Bosch barometer functions are defined in the
barometer_bosch.h header file where functions containing baro_bosch
are barometer agnostic where as functions with baro_bmp280
and baro_bme280
are for those specific barometers.
Users can programatically determine which barometer is on their board with the mbl_mw_metawearboard_lookup_module function.
gyroType = mbl_mw_metawearboard_lookup_module(board, MBL_MW_MODULE_BAROMETER)
switch gyroType {
case MODULE_BARO_TYPE_BMP280:
break
case MODULE_BARO_TYPE_BME280:
break
case MODULE_TYPE_NA:
break
default:
break
}
Sensor Configuration¶
The Bosch barometers have 3 configurable parameters:
Oversampling
Infinite impulse filter (iir) coefficient
Standby time
These operational parameters work in conjunction to control the noise, output resolution, and sampling rate. When you are done setting the configuration, call mbl_mw_baro_bosch_write_config to write the changes to the sensor.
# Set oversampling to low power mode
libmetawear.mbl_mw_baro_bosch_set_oversampling(board, BaroBoschOversampling.LOW_POWER)
# Set standby time to 500ms
libmetawear.mbl_mw_baro_bmp280_set_standby_time(board, BaroBmp280StandbyTime._500ms)
# Set iir filter coefficient
libmetawear.mbl_mw_baro_bosch_set_iir_filter(board, BaroBoschIirFilter.AVG_16)
# Write configuration to the sensor
libmetawear.mbl_mw_baro_bosch_write_config(board)
Pressure Sampling¶
Pressure data is represented as a float and is in units of Pascals. To receive pressure data, simply subscribe or log the pressure data signal and then start the sensor.
pa_data_signal = libmetawear.mbl_mw_baro_bosch_get_pressure_data_signal(board)
libmetawear.mbl_mw_datasignal_subscribe(pa_data_signal, None, sensor_data_handler)
Altitude Sampling¶
Altitude data is represented as a float and is in units of meters. To receive altitude data, simply subscribe or log the altitude data signal and then start the sensor.
def sensorDataHandler(self, context, data):
data_ptr= cast(data.contents.value, POINTER(CartesianFloat))
self.data_cartesian_float= copy.deepcopy(data_ptr.contents)
self.data = self.data_cartesian_float
sensor_data_handler= FnVoid_VoidP_DataP(self.sensorDataHandler)
libmetawear.mbl_mw_baro_bosch_set_oversampling(board, BaroBoschOversampling.LOW_POWER)
libmetawear.mbl_mw_baro_bmp280_set_standby_time(board, BaroBmp280StandbyTime._500ms)
libmetawear.mbl_mw_baro_bosch_set_iir_filter(board, BaroBoschIirFilter.AVG_16)
libmetawear.mbl_mw_baro_bosch_write_config(board)
m_data_signal= self.libmetawear.mbl_mw_baro_bosch_get_altitude_data_signal(board)
libmetawear.mbl_mw_datasignal_subscribe(m_data_signal, None, sensor_data_handler)
libmetawear.mbl_mw_baro_bosch_start(board)