# BMP581
A `no_std` compatible Rust driver for the Bosch BMP581 pressure and temperature sensor.
## Features
- Working but yet no full implementation of complete BMP581 register interface yet
- Supports I2C communication, SPI mode untested
- `no_std` compatible for use in embedded systems
- Example implementation for Raspberry Pi using RPPAL
## Usage
Add this to your `Cargo.toml`:
```toml
[dependencies]
bmp581 = "0.1.0" # Use the current version
```
## Examples
### Basic Reading (I2C)
```rust
use bmp581::{Bmp581, I2cAddr};
use linux_embedded_hal::I2cdev;
use rppal::hal::Delay;
fn main() {
let i2c = I2cdev::new("/dev/i2c-1").unwrap();
let mut sensor = Bmp581::new_i2c(i2c, I2cAddr::Default);
let mut delay = Delay::new();
// Initialize the sensor
sensor.init(&mut delay).unwrap();
// Read temperature and pressure
let temp = sensor.read_temperature().unwrap();
let press = sensor.read_pressure().unwrap();
println!("Temperature: {:.2}°C", temp);
println!("Pressure: {:.1} Pa", press);
}
```
### Data-Ready Interrupt Example
Run the included example that demonstrates interrupt-based data acquisition:
```bash
cargo run --example rppal-drdy-interrupt
```
This example configures the BMP581 to generate interrupts when new sensor data is available, and reads the data via interrupt handling on GPIO22.
## Hardware Compatibility
This driver has been tested with:
- Raspberry Pi with RPPAL
- STM32H743 using embassy
But should work with any platform that implements the `embedded-hal` traits.
## License
Licensed under either of:
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
## Contribution
Any contribution intentionally submitted for inclusion in the work by you shall be dual licensed as above, without any additional terms or conditions.