3个不稳定版本
0.2.0 | 2024年6月25日 |
---|---|
0.1.0 | 2024年3月17日 |
#108 in 嵌入式开发
每月146次下载
185KB
2.5K SLoC
包含(压缩文件,66KB) sketch/ft232h.fzz
Rust SCD4x Crate
一个Rust crate,用于从传感器SCD4x查询CO₂浓度、温度和湿度
https://gitlab.com/claudiomattera/scd4x-rs/
此crate同时支持embedded-hal
和embedded-hal-async
。
查看此项目的变更日志。
用法
将依赖项添加到Cargo.toml
。
[dependencies.scd4x-rs]
version = "0.2.0"
可选地启用所需的特性。
特性 | 描述 |
---|---|
blocking (默认) |
启用阻塞式传感器Scd4x |
async (默认) |
启用异步传感器AsyncScd4x |
std |
为错误实现std::error::Error |
uom |
使用uom 进行测量类型 |
可以从I²C接口和延迟函数创建一个Scd4x
结构。
use scd4x_rs::Scd4x;
let i2c = ...
let delay = ...
let sensor = Scd4x::new(i2c, delay);
let mut sensor = sensor.stop_periodic_measurement()?;
sensor.reinit()?;
let serial_number = sensor.get_serial_number()?;
println!("Serial number: 0x{serial_number:x}");
let mut sensor = sensor.start_periodic_measurement()?;
for _ in 0..5 {
println!("Waiting before next measurement");
delay.delay_ms(5_000);
let sample = sensor.read_measurement()?;
println!("Sample: ┳ CO₂: {} ppm", sample.co2);
println!(" ┣ Temperature: {} C", sample.temperature);
println!(" ┗ Humidity: {} %", sample.humidity);
Ok(sample)
}
let sensor = sensor.stop_periodic_measurement()?;
可以使用异步HALs使用AsyncScd4x
结构。其API与Scd4x
完全相同,只是在函数调用末尾添加了.await
。
use scd4x_rs::AsyncScd4x;
let i2c = ...
let delay = ...
let sensor = AsyncScd4x::new(i2c, delay);
let mut sensor = sensor.stop_periodic_measurement().await?;
sensor.reinit().await?;
let serial_number = sensor.get_serial_number().await?;
println!("Serial number: 0x{serial_number:x}");
let mut sensor = sensor.start_periodic_measurement().await?;
for _ in 0..5 {
println!("Waiting before next measurement");
delay.delay_ms(5_000);
let sample = sensor.read_measurement().await?;
println!("Sample: ┳ CO₂: {} ppm", sample.co2);
println!(" ┣ Temperature: {} C", sample.temperature);
println!(" ┗ Humidity: {} %", sample.humidity);
Ok(sample)
}
let sensor = sensor.stop_periodic_measurement().await?;
示例
目录examples
中的示例展示了如何使用此crate与Adafruit FT232H板一起使用。
将板子按如下方式连接到传感器(是的,D1和D2必须短接才能使I²C工作)。
Adafruit FT232H | SCD4x |
---|---|
3v | VIN |
Gnd | GND |
D0 | SCL |
D1和D2 | SDA |
然后运行示例
just run-example continuous
just run-example low-power
传感器状态
该传感器采用类型状态模式实现,即其状态是类型的一部分Scd4x<..., State>
。传感器可以处于两种状态:空闲或测量。只能在传感器空闲时执行的功能仅在类型Scd4x<..., Idle>
上实现,只能在传感器积极测量时执行的功能仅在类型Scd4x<..., Measuring>
上实现。
传感器通常使用Scd4d::new()
在空闲状态下创建。调用start_periodic_measurement()
、start_low_power_periodic_measurement()
、measure_single_shot()
或measure_single_shot_rht_only()
函数将消耗变量并返回类型为Scd4x<..., Measuring>
的新变量。函数stop_periodic_measurement()
将再次消耗变量并返回类型为Scd4x<..., Idle>
的新变量。
或者,可以使用Scd4d::new_in_measuring()
直接在测量状态下创建传感器。这在传感器在控制器休眠时被留下进行测量时非常有用。当控制器再次唤醒时,它不应再次调用start_periodic_measurement()
,而应直接在测量状态下创建传感器并开始读取样本。
测量单位
默认情况下,此crate使用所有测量值(CO₂浓度、温度和湿度,以及运行量高度和压力)的f32
值。当启用Cargo功能uom
时,它使用来自crate uom的量。CO₂浓度值的类型为uom::si::f32::Ratio
,温度值的类型为uom::si::f32::ThermodynamicTemperature
,湿度值的类型为uom::si::f32::Ratio
,高度值的类型为uom::si::f32::Length
,压力值的类型为uom::si::f32::Pressure
。
许可证
版权所有 Claudio Mattera 2024
您可以在以下任一许可证的条款下自由复制、修改和分发此应用程序:带有归属
- Apache License,版本 2.0(文件
LICENSE-APACHE-2.0.txt
或 https://opensource.org/licenses/Apache-2.0) - MIT许可证(文件
LICENSE-MIT.txt
或 https://opensource.org/licenses/MIT)
任选其一。
本项目完全是原创作品,与Sensirion无关,也不受其任何形式的赞助或支持。