6 releases (3 breaking)
0.3.1 | Jun 1, 2024 |
---|---|
0.3.0 | Apr 16, 2024 |
0.2.1 | Apr 11, 2024 |
0.1.0 | Apr 10, 2024 |
0.0.0 | Mar 28, 2024 |
#232 in Embedded development
87KB
1K
SLoC
Lib SCD
LibSCD is s Rust driver implementation for SCD30, SCD40 and SCD41 sensors
using the embedded-hal
and embedded-hal-async
interfaces.
Usage
Add the crate as a dependency in Cargo.toml
and select the required features:
[dependencies.libscd]
version = "0.3"
features = ["defmt", "sync", "scd40"]
Then we can start consuming data from SCD40 using blocking I2C communication:
#[embassy_executor::main]
async fn main(_spawner: Spawner) {
let p = embassy_stm32::init(Default::default());
let i2c = I2c::new(
p.I2C2,
p.PB10,
p.PB3,
Irqs,
NoDma,
NoDma,
Hertz(100_000),
Default::default(),
);
let mut scd = Scd40::new(i2c, Delay);
// When re-programming, the controller will be restarted,
// but not the sensor. We try to stop it in order to
// prevent the rest of the commands failing.
_ = scd.stop_periodic_measurement();
info!("Sensor serial number: {:?}", scd.serial_number());
if let Err(e) = scd.start_periodic_measurement() {
defmt::panic!("Failed to start periodic measurement: {:?}", e);
}
loop {
if scd.data_ready().unwrap() {
let m = scd.read_measurement().unwrap();
info!("CO2: {}\nHumidity: {}\nTemperature: {}", m.co2, m.humidity, m.temperature)
}
Delay.delay_ms(1000)
}
}
Crate Feature Flags
The support for each sensor and sync/async mode is controlled by a feature:
Feature | Description |
---|---|
sync | Enables the blocking driver implementation for the selected sensors |
async | Enables the async driver implementation for the selected sensors |
scd30 | Enables the driver for the SCD30 sensor |
scd40 | Enables the driver for the SCD40 sensor |
scd41 | Enables the driver for the SCD41 sensor |
defmt | Derive defmt::Format for the error type |
License
The project is dual licensed under MIT or APACHE-2.0
Dependencies
~175KB