Expand description
Platform agnostic Rust driver for Sensirion SGP40 device with
gas, temperature and humidity sensors based on
the embedded-hal
traits.
§Sensirion SGP40
Sensirion SGP40 is a low-power accurate gas sensor for air quality application. The sensor has different sampling rates to optimize power-consumption per application bases as well as ability save and set the baseline for faster start-up accuracy. The sensor uses I²C interface and measures TVOC (Total Volatile Organic Compounds)
Datasheet: https://www.sensirion.com/file/datasheet_sgp40
§Usage
§Instantiating
Import this crate and an embedded_hal
implementation, then instantiate
the device:
use linux_embedded_hal as hal;
use hal::{Delay, I2cdev};
use sgp40::Sgp40;
let dev = I2cdev::new("/dev/i2c-1").unwrap();
let mut sgp = Sgp40::new(dev, 0x59, Delay);
§Doing Measurements
The device is doing measurements independently of the driver and calls to the device will just fetch the latest information making the usage easy.
use linux_embedded_hal as hal;
use hal::{Delay, I2cdev};
use std::time::Duration;
use std::thread;
use sgp40::Sgp40;
let dev = I2cdev::new("/dev/i2c-1").unwrap();
let mut sensor = Sgp40::new(dev, 0x59, Delay);
// Discard the first 45 samples as the algorithm is just warming up.
for _ in 1..45 {
sensor.measure_voc_index().unwrap();
}
loop {
if let Ok(result) = sensor.measure_voc_index() {
println!("VOC index: {}", result);
}
else {
println!("Failed I2C reading");
}
thread::sleep(Duration::new(1_u64, 0));
}
§VOC Index calculation
VOC index calculation is not no-std proof right now so if this is a problem for you, then you want to turn the feature off by turning “the defaults off”. Work for no-std index calculation will start soon.
Structs§
- Sgp40
- Sgp40 driver instance
Enums§
- Error
- Sgp40 errors