#raspberry-pi #air-quality #sensor #adafruit

ccs811

用于Raspberry Pi上使用CCS811空气质量传感器的库

4 个版本

0.1.3 2020年2月5日
0.1.2 2020年1月6日
0.1.1 2020年1月5日
0.1.0 2020年1月5日

#1517硬件支持

每月 28 次下载

GPL-3.0 许可证

21KB
217

Raspberry Pi的CCS811库

由于我在学习Rust并想将其用于嵌入式编程,因此创建了此库。它受到了Marten Penning用C编写的CCS811库的启发。如果您发现我的Rust代码有问题,或者有任何改进建议或功能请求,请在此仓库中创建问题,并帮助我改进 :)

此库依赖于rppal crate进行与芯片的I2C通信。将来可能可以将此抽象化,使此库也能在其他平台上工作。

接线

CCS811 Raspberry Pi
VCC 引脚1 (3.3V)
GND 引脚6 (GND)
SCL 引脚5 (SCL & GPIO 3)
SDA 引脚3 (SDA & GPIO 2)
WAK 引脚11 (GPIO 17) 可选/可以更改

如何使用

use rppal::i2c::I2c;
use rppal::gpio::Gpio;
use std::thread::sleep;
use std::time::Duration;
use ccs811;

fn main() {
    let i2c = I2c::with_bus(1).expect("Couldn't start i2c. Is the interface enabled?");
    let wake_pin = Gpio::new().expect("Can not init gpio")
                            .get(17).expect("Could not attach to wake pin");
    wake_pin.into_output().set_low();

    let mut ccs811 = ccs811::new(i2c, None);

    match ccs811.begin() {
        Ok(()) => match ccs811.start(ccs811::MODE::Sec1) {
            Ok(()) => (),
            Err(error) => panic!("Could not start: {}", error)
        },
        Err(error) => panic!("Could not init the chip: {}", error)
    }

    println!("Chip Bootloader Version: {:x?}", ccs811.bootloader_version().unwrap());
    println!("Chip Hardware Version: {:x?}", ccs811.hardware_version().unwrap());
    println!("Chip Application Version: {:x?}", ccs811.application_version().unwrap());

    sleep(Duration::from_secs(5));

    let mut i = 0;
    loop {
        match ccs811.read() {
            Ok(data) => {
                println!("{}mins => t_voc: {}, e_co2: {}, raw: {:x?}", i, data.t_voc, data.e_co2, data.raw);
            },
            Err(error) => println!("Could not read data: {}", error)
        };

        i += 1;
        sleep(Duration::from_secs(60))
    }
}

如何烧录新固件

大多数芯片都有版本1.0.0或1.1.0。目前在我创建此readme的地方,有2.0.0和2.1.0版本。这些版本使芯片的结果对我来说更加可靠和稳定。在我之前,有一些无原因上升的值,在烧录新固件后停止了。

您可以从 ams.com 获取当前固件。只需下载zip文件,对于未使用的芯片,请选择2.0.0的二进制版本,对于已使用的芯片,请选择2.1.0的二进制版本(固件readme中所述)。

以下是一个示例代码,通过创建Rust可执行文件,将芯片连接到Raspberry Pi并执行它来烧录新固件。以下代码假定文件 CCS811_FW_App_v2-0-1.bin 在执行时与可执行文件位于同一目录中。

use rppal::i2c::I2c;
use rppal::gpio::Gpio;
use std::fs::File;
use std::io::Read;
use ccs811;

fn main() {
    let i2c = I2c::with_bus(1).expect("Couldn't start i2c. Is the interface enabled?");
    let wake_pin = Gpio::new().expect("Can not init gpio")
        .get(17).expect("Could not attach to wake pin");
    wake_pin.into_output().set_low();

    let mut ccs811 = ccs811::new(i2c, None);

    let mut file = File::open("./CCS811_FW_App_v2-0-1.bin")
        .expect("No firmware found");
    let mut data = vec![];
    let read = file.read_to_end(&mut data)
        .expect("Could not load firmware");

    println!("Firmware has size of {} bytes", read);

    ccs811.flash(data)
        .expect("Failed to flash firmware");

    println!("Flashed :)");
}

依赖项

~380KB