#sensor #humidity-sensor #i2c #embedded-hal

no-std bme280-rs

A crate to query BME280 sensors over I²C

2 unstable releases

0.2.0 Feb 9, 2024
0.1.0 Oct 30, 2022

#529 in Embedded development

Download history 2/week @ 2024-02-09 19/week @ 2024-02-16 28/week @ 2024-02-23 9/week @ 2024-03-01 8/week @ 2024-03-08 6/week @ 2024-03-15

56 downloads per month

MIT/Apache

80KB
1.5K SLoC

Rust BME280 Crate

Version Documentation Downloads License MSRV

A Rust crate to query temperature, pressure and humidity from sensor BME280

https://gitlab.com/claudiomattera/bme280-rs/

This crate support 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.2.0"

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)
)?;

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 .async 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?;

if let Some(temperature) = bme280.read_temperature().await? {
    println!("Temperature: {} C", temperature);
} else {
    println!("Temperature reading was disabled");
}

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

at your option.

This project is entirely original work, and it is not affiliated with nor endorsed in any way by Bosch Sensortec.

Dependencies

~46–375KB