#scd30 #i2c #co2 #temperature-humidity #humidity-sensor #raspberry

scd30pi

将Sensirion的SCD30 i2c CO2、温度和湿度传感器与Raspberry Pi连接

4个版本

0.4.2 2021年3月6日
0.4.1 2021年3月3日
0.4.0 2021年3月2日
0.3.2 2021年3月2日

嵌入式开发中排名第1975

MIT许可证

26KB
385

Rust语言的SCD30 CO2传感器

这是Sensirion SCD30 i2c传感器驱动程序的另一个纯Rust实现。该传感器测量CO2、温度和湿度。

传感器文档可以直接从Sensirion获取:https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/9.5_CO2/Sensirion_CO2_Sensors_SCD30_Interface_Description.pdf

请注意,这是我在阅读书籍后的第一个Rust项目,因此它可能不像应该的那样“锈迹斑斑”,因为我的Java和C++背景对我的代码产生了很大的影响。

目标平台是Raspberry Pi,因此您可以在rpi上编译它或使用交叉编译。它基于Raspberry Pi外围访问库(《https://crates.io/crates/rppal》)。物理SCD30与i2c的连接可以通过将设备连接到GPIO连接器的第一个i2c端口来实现。

连接到RaspberryPi GPIO

  • 引脚1 (3.3V/VCC)
  • 引脚3 (SDA)
  • 引脚5 (SCL)
  • 引脚6 (GND)。

示例

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

fn main() {
    let mut sensor = SCD30::new().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
    );
}

交叉编译

  • 安装arm交叉编译器。您可以在《https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads》找到交叉编译器,将其内容解压缩到您选择的目录。假设它是《TARGET_DIR》,然后在使用cargo交叉编译之前导出以下变量

    export CC_armv7_unknown_linux_gnueabihf=arm-none-linux-gnueabihf-gcc export PATH=${TARGET_DIR}/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin:$PATH

  • 安装rust交叉编译目标。

    rustuptarget add armv7-unknown-linux-gnueabihf

  • 配置cargo以使用交叉编译目标。将以下内容添加到《~/.cargo/config

    [target.armv7-unknown-linux-gnueabihf]

    linker= "arm-linux-gnueabihf-gcc"

使用

cargobuild --target=armv7-unknown-linux-gnueabihf --发布版

有关交叉编译的额外资源可以在 https://github.com/japaric/rust-cross 找到

依赖项

~470KB