scd30pi 1.0.0

Interfaces the SCD30 i2c CO2, temperature and humidity sensor from Sensirion for Raspberry Pi
Documentation

CO2 Sensor SCD30 for Rust

This is yet another implementation of a Sensirion SCD30 i2c sensor driver in pure rust. The sensor measures CO2, temperature and humidity.

The sensor documentation can be obtained directly from Sensirion: https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/9.5_CO2/Sensirion_CO2_Sensors_SCD30_Interface_Description.pdf

The target platform is a Raspberry pi so either you compile it on an rpi or use crosscompiling. It is based on Raspberry Pi Peripheral Access Library (https://crates.io/crates/rppal). The physical SCD30 connection to i2c can be done by wiring the device to the first i2c ports of the GPIO connector.

Connect to RaspberryPi GPIO:

  • pin 1 (3.3V/VCC)
  • pin 3 (SDA)
  • pin 5 (SCL)
  • pin 6 (GND).

Example

use scd30pi::i2c::SCD30;
use std::{thread, time};

fn main() {
    let mut sensor = SCD30::from_default_device().unwrap();
    let speed = sensor.get_bus_speed().unwrap();
    println!("bus Speed: {}", speed);

    sensor.start().unwrap();
    sensor.set_measure_interval(2).unwrap();

    let version = sensor.read_firmware_version().unwrap();
    println!("Current firmware version {}", version);

    while !sensor.data_available().unwrap() {
        thread::sleep(time::Duration::from_millis(200));
    }

    let temperature = sensor.temperature().unwrap();
    let co2 = sensor.co2().unwrap();
    let humidity = sensor.humidity().unwrap();

    println!(
        "co2 = {:.0} ppm, temp = {:.2} °C, humidity = {:.0} %",
        co2, temperature, humidity
    );
}

Cross Compile