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
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