Trait bsec::bme::BmeSensor [−][src]
pub trait BmeSensor { type Error: Debug; fn start_measurement(
&mut self,
settings: &BmeSettingsHandle<'_>
) -> Result<Duration, Self::Error>; fn get_measurement(&mut self) -> Result<Vec<Input>, Self::Error>; }
Expand description
Trait to implement for your specific hardware to obtain measurements from the BME sensor.
Example
An rudimentary implementation for the BME680 sensor with the bme680 crate might look like this:
use bme680::{Bme680, OversamplingSetting, PowerMode, SettingsBuilder}; use bsec::{Input, InputKind}; use bsec::bme::{BmeSensor, BmeSettingsHandle}; use embedded_hal::blocking::{delay::DelayMs, i2c}; use std::fmt::Debug; use std::time::Duration; pub struct Bme680Sensor<I2C, D> where D: DelayMs<u8>, I2C: i2c::Read + i2c::Write { bme680: Bme680<I2C, D>, } impl<I2C, D> BmeSensor for Bme680Sensor<I2C, D> where D: DelayMs<u8>, I2C: i2c::Read + i2c::Write, <I2C as i2c::Read>::Error: Debug, <I2C as i2c::Write>::Error: Debug, { type Error = bme680::Error<<I2C as i2c::Read>::Error, <I2C as i2c::Write>::Error>; fn start_measurement( &mut self, settings: &BmeSettingsHandle, ) -> Result<std::time::Duration, Self::Error> { let settings = SettingsBuilder::new() .with_humidity_oversampling(OversamplingSetting::from_u8( settings.humidity_oversampling(), )) .with_temperature_oversampling(OversamplingSetting::from_u8( settings.temperature_oversampling(), )) .with_pressure_oversampling(OversamplingSetting::from_u8( settings.pressure_oversampling(), )) .with_run_gas(settings.run_gas()) .with_gas_measurement( Duration::from_millis(settings.heating_duration().into()), settings.heater_temperature(), 20, ) .build(); self.bme680 .set_sensor_settings(settings)?; let profile_duration = self.bme680.get_profile_dur(&settings.0)?; self.bme680.set_sensor_mode(PowerMode::ForcedMode)?; Ok(profile_duration) } fn get_measurement(&mut self) -> nb::Result<Vec<Input>, Self::Error> { let (data, _state) = self.bme680.get_sensor_data()?; Ok(vec![ Input { sensor: InputKind::Temperature, signal: data.temperature_celsius(), }, Input { sensor: InputKind::Pressure, signal: data.pressure_hpa(), }, Input { sensor: InputKind::Humidity, signal: data.humidity_percent(), }, Input { sensor: InputKind::GasResistor, signal: data.gas_resistance_ohm() as f32, }, ]) } }
Associated Types
Loading content...Required methods
fn start_measurement(
&mut self,
settings: &BmeSettingsHandle<'_>
) -> Result<Duration, Self::Error>
[src]
&mut self,
settings: &BmeSettingsHandle<'_>
) -> Result<Duration, Self::Error>
Expand description
Starts a sensor measurement.
Use settings
to configure your BME sensor as requested by the BSEC
algorithm.
Shoud return the duration after which the measurement will be available or an error.
fn get_measurement(&mut self) -> Result<Vec<Input>, Self::Error>
[src]
Expand description
Read a finished sensor measurement.
Returns the sensor measurements as a vector with an item for each physical sensor read.
To compensate for heat sources near the sensor, add an additional output
to the vector, using the sensor type super::InputKind::HeatSource
and the desired correction in degrees Celsius.
Implementors
impl BmeSensor for FakeBmeSensor
[src]
impl BmeSensor for FakeBmeSensor
[src]type Error = UnitError
fn start_measurement(
&mut self,
_: &BmeSettingsHandle<'_>
) -> Result<Duration, UnitError>
[src]
&mut self,
_: &BmeSettingsHandle<'_>
) -> Result<Duration, UnitError>