3 releases (breaking)
0.3.0 | Jun 24, 2024 |
---|---|
0.2.0 | Feb 9, 2024 |
0.1.0 | Oct 30, 2022 |
#312 in Embedded development
83KB
1.5K
SLoC
Rust BME280 Crate
A Rust crate to query temperature, pressure and humidity from sensor BME280
https://gitlab.com/claudiomattera/bme280-rs/
This crate supports both embedded-hal
and embedded-hal-async
.
See the changelog for this project.
Usage
Add the dependency to Cargo.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.
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.
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 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
.
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
or https://opensource.org/licenses/Apache-2.0) - MIT license
(file
LICENSE-MIT.txt
or https://opensource.org/licenses/MIT)
at your option.
This project is entirely original work, and it is not affiliated with nor endorsed in any way by Bosch Sensortec.
Dependencies
~45–370KB