Rust BME280 Crate ==== ![Version](https://img.shields.io/crates/v/bme280-rs) ![Documentation](https://img.shields.io/docsrs/bme280-rs/0.3.0) ![Downloads](https://img.shields.io/crates/dv/bme280-rs/0.3.0) ![License](https://img.shields.io/crates/l/bme280-rs/0.3.0) ![MSRV](https://img.shields.io/crates/msrv/bme280-rs/0.3.0) A Rust crate to query temperature, pressure and humidity from sensor [BME280] [BME280]: https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/ This crate supports both [`embedded-hal`][embedded-hal] and [`embedded-hal-async`][embedded-hal-async]. [embedded-hal]: https://crates.io/crates/embedded-hal [embedded-hal-async]: https://crates.io/crates/embedded-hal-async See the [changelog](./CHANGELOG.md) for this project. Usage ---- Add the dependency to `Cargo.toml`. ~~~~toml [dependencies.bme280-rs] version = "0.3.0" ~~~~ Optionally enable the desired features. | Feature | Description | |----------------------|------------------------------------------| | `blocking` (default) | Enable the blocking sensor `Bme280` | | `async` (default) | Enable the async sensor `AsyncBme280` | | `uom` | Use `uom` for measurement types | A `Bme280` structure can be created from an I²C interface and a delay function. The initial sampling configuration disables all measurements, so it is necessary to reconfigure the chip with the desired settings before read samples. ~~~~rust use bme280_rs::{Bme280, Configuration, Oversampling, SensorMode}; let i2c = ... let delay = ... let mut bme280 = Bme280::new(i2c, delay); bme280.init()?; bme280.set_sampling_configuration( Configuration::default() .with_temperature_oversampling(Oversampling::Oversample1) .with_pressure_oversampling(Oversampling::Oversample1) .with_humidity_oversampling(Oversampling::Oversample1) .with_sensor_mode(SensorMode::Normal) )?; delay.delay_ms(10); if let Some(temperature) = bme280.read_temperature()? { println!("Temperature: {} C", temperature); } else { println!("Temperature reading was disabled"); } ~~~~ An `AsyncBme280` structure can be used with asynchronous HALs. Its API is completely identical to `Bme280`, just with `.await` at the end of function calls. ~~~~rust use bme280_rs::{AsyncBme280, Configuration, Oversampling, SensorMode}; let i2c = ... let delay = ... let mut bme280 = AsyncBme280::new(i2c, delay); bme280.init()?; bme280.set_sampling_configuration( Configuration::default() .with_temperature_oversampling(Oversampling::Oversample1) .with_pressure_oversampling(Oversampling::Oversample1) .with_humidity_oversampling(Oversampling::Oversample1) .with_sensor_mode(SensorMode::Normal) ).await?; delay.delay_ms(10).await; if let Some(temperature) = bme280.read_temperature().await? { println!("Temperature: {} C", temperature); } else { println!("Temperature reading was disabled"); } ~~~~ See the [examples](./examples) for more information. Unit of Measurements ---- By default, this crate uses `f32` values for all the measurements temperature, pressure and humidity. When instead enabling the Cargo feature `uom`, it uses quantities from crate [uom]. Temperature measurements have type `uom::si::f32::ThermodynamicTemperature`, pressure measurements have type `uom::si::f32::Pressure`, and humidity measurements have type `uom::si::f32::Ratio`. [uom]: https://crates.io/crates/uom License ---- Copyright Claudio Mattera 2022-2024 You are free to copy, modify, and distribute this application with attribution under the terms of either * Apache License, Version 2.0 (file [`LICENSE-APACHE-2.0.txt`](./LICENSE-APACHE-2.0.txt) or ) * MIT license (file [`LICENSE-MIT.txt`](./LICENSE-MIT.txt) or ) at your option. This project is entirely original work, and it is not affiliated with nor endorsed in any way by Bosch Sensortec.