7 releases (1 stable)
new 1.0.0 | Apr 5, 2025 |
---|---|
0.1.6 | Mar 8, 2025 |
0.1.2 | May 15, 2024 |
#306 in Unix APIs
156 downloads per month
24KB
348 lines
SCD30 trait implementing basic SCD30 I2C CO2 sensor operations
Operations taken from interface description
At current version 1.0.0 we support all basic operations from the interface
Basic Example
In your Cargo.toml scd30_i2c="0.1.2"
Obtaining measurements, co2, temperature and humidity
use scd30_i2c::scd30::Scd30;
use std::thread;
use std::time::Duration;
fn main() {
// Open the I2C device
let mut scd = Scd30::new().unwrap();
let mut counter = 0;
scd.trigger_cont_measurements();
scd.set_measurements_interval(2);
loop {
match scd.get_measurements() {
Ok((a, b, c)) => {
println!("Co2: {} ppm Temp: {} C RH: {} %", a, b, c);
thread::sleep(Duration::from_secs(2));
counter += 1;
println!("{}", counter);
}
Err(e) => {
println!(
"Error obtaining measurements. More details: {}. Waiting 10 seconds for recovering",
e
);
thread::sleep(Duration::from_secs(10));
}
}
}
}
Hardware
I made and tested this library using a Raspberry Pi 5 and its I2C capabilities, for other machines running Linux should work, but I don't have more devices to test
More Info
This is my first crate made with Rust, so any suggestion is more than welcome.
Special Thanks
Special thanks to RequestForCoffe for the amazing libray in Python. I used the library a lot to understand and replicate the code in Rust.
Dependencies
~2MB
~38K SLoC