stcc4 0.1.0

A Rust no-std driver for the Sensirion STCC4 CO2 sensor.
Documentation

STCC4 Rust Driver

A Rust no-std driver for the Sensirion STCC4 CO2 sensor with blocking and async APIs.

Crates.io Docs.rs

Description

This library provides a platform-agnostic Rust interface for the STCC4 CO2 sensor over I2C. It is designed for embedded, no-std environments and supports both blocking and async access patterns based on embedded-hal and embedded-hal-async.

Supported features

All supported features are available in both blocking and async mode.

  • Start/stop continuous measurement
  • Single-shot measurement
  • Read measurement data (CO2, temperature, humidity, status)
  • Set RHT compensation values (external sensor)
  • Set pressure compensation
  • Sleep / wake
  • Conditioning
  • Soft reset (general call)
  • Factory reset
  • Self test
  • Enable/disable testing mode
  • Forced recalibration (FRC)
  • Read product ID and serial number

Rust features

  • async (default): Enables async support using embedded-hal-async
  • defmt: Enables defmt::Format derives and adds defmt logging statements
  • serde: Enables serde support for public data types (no std features)

Dependencies

  • embedded-hal for blocking I2C and delays
  • embedded-hal-async for async I2C and delays (gated by async feature)
  • defmt and serde are optional and controlled by features

For tests, the crate uses embedded-hal-mock and a minimal async mock implementation.

Usage

Add the crate to your Cargo.toml:

[dependencies]
stcc4 = "0.1.0"

Blocking example

use stcc4::blocking::Stcc4;

# fn example<I2C, D>(i2c: I2C, delay: D)
# where
#     D: embedded_hal::delay::DelayNs,
#     I2C: embedded_hal::i2c::I2c,
# {
let mut stcc4 = Stcc4::new(delay, i2c);

stcc4.start_continuous_measurement().ok();
let measurement = stcc4.read_measurement().ok();
stcc4.stop_continuous_measurement().ok();
# }

Async example

use stcc4::asynchronous::Stcc4;

# async fn example<I2C, D>(i2c: I2C, delay: D)
# where
#     D: embedded_hal_async::delay::DelayNs,
#     I2C: embedded_hal_async::i2c::I2c,
# {
let mut stcc4 = Stcc4::new(delay, i2c);

stcc4.start_continuous_measurement().await.ok();
let measurement = stcc4.read_measurement().await.ok();
stcc4.stop_continuous_measurement().await.ok();
# }

Testing

Run unit tests:

cargo test

Generate coverage (HTML):

cargo llvm-cov --html --open

Notes

  • Default I2C address is 0x64, alternate is 0x65.
  • The exit_sleep_mode and perform_soft_reset commands are not acknowledged by the sensor, and the driver handles this accordingly.
  • Temperature and humidity values in measurements are reported by an external SHT4x sensor; use set_rht_compensation if not using the STCC4’s dedicated controller interface for SHT4x.

Links

License

This library is licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this work is dual licensed as above, without any additional terms or conditions.

Change Log

  • Version 0.1.0 - Initial release