14次发布

0.2.8 2024年6月8日
0.2.7 2024年4月27日
0.2.3 2024年3月25日
0.1.4 2024年1月6日
0.1.2 2023年12月31日

#1752 in 嵌入式开发

每月21次下载

MIT/Apache

27KB
444

ENS160-AQ  

crates.io License Documentation

Rust crate,用于ScioSense ENS160空气质量传感器

https://github.com/marvinrobot42/ens160-aq.git

使用ENS160的好处是设备内部计算了综合空气质量指数,无需外部专有计算程序。

特性

  • 更新为使用嵌入式hal版本1.0.x

  • 为嵌入式使用设计(ESP32-C3、-C6和-S3)和树莓派

  • 可配置中断引脚

  • 支持0x52(默认)和0x53(二级)I2C设备地址

  • 为ENS160补偿计算设置温度和湿度

  • 读取空气质量指数、eCO2、TVOC、乙醇浓度和原始加热板电阻(欧姆)

  • 易于使用的Measurements结构体

  • 易于使用的初始化函数

  • 无_std嵌入式兼容

  • (暂不支持SPI)

注意

这是我第一个设备驱动程序项目。我受到了Alexander Hübener的优秀ENS160 crate的启发。

STM32:stm32fxx-hal crate仍然基于嵌入式hal版本0.2。为了将此ens160-aq crate用作STM32项目的依赖项,请使用版本0.1.4。例如 dependencies.ens160-aq 版本 = "0.1.4"。ens160-aq的新版本基于嵌入式hal 1.0+,不兼容,您将遇到i2c和Delay::delay特征界限构建错误。

在crate.io中检查您的硬件特定hal依赖项。版本1.0是最新版本。例如,ESP32-C3和-C6 hal是esp-idf-hal版本 "0.43.0",它表明它依赖于嵌入式hal版本 ^1。树莓派是linux-embedded-hal,版本 "0.4.0" 依赖于嵌入式hal ^1。

最近版本历史

  • 0.2.8 更新了README.md
  • 0.2.7 添加了树莓派示例
  • 0.2.6 修复了README.MD
  • 0.2.5 添加了更多文档注释
  • 0.2.2 在InterruptPinConfig中修复了小错误,添加了返回 .0 属性作为 u8 的 build() 方法。更新了 examples/airquality.rs 文件

使用

将依赖项添加到 Cargo.toml

[dependencies.ens160-aq]
version = "0.2"

从I²C接口和延迟函数创建Ens160结构体。如有必要,配置中断引脚属性。
初始化 ENS160。可以随时调用 set_temp_rh_comp() 进行温度和湿度补偿。读取 ENS160 的状态,检查是否有新的数据或组数据(如有需要)准备就绪,然后获取测量值。或者您可以单独获取 ECO2、TVOC 或空气质量指数。注意,set_operation_mode(OperationMode::Reset) 是可用的,但它会将 ENS160 重置到出厂默认设置,包括 24 小时的“烧入”模式。无需在其他任何原因下调用。

简单示例

更完整的示例在仓库 examples 路径中



use ens160_aq::data::{InterruptPinConfig, Measurements};
use ens160_aq::Ens160;
...


fn main() -> Result<()> {

  ...

  let peripherals = Peripherals::take().unwrap();
  let pins = peripherals.pins;
  let sda = pins.gpio0;
  let scl = pins.gpio1;
  let i2c = peripherals.i2c0;
  let config = I2cConfig::new().baudrate(100.kHz().into());
  let i2c_dev = I2cDriver::new(i2c, sda, scl, &config)?;

  let mut ens160 = Ens160::new(i2c_dev, Ets {});  // Ets is ESP32 IDF delay function

  ens160.initialize().unwrap();


  loop {
    if let Ok(status) = ens160.get_status() {
      if status.new_data_ready() {  // read all measurements
        let measuremnts: Measurements = ens160.get_measurements().unwrap();
        info!("measurements are : {:#?}\n\n", measuremnts);
      }    
      else {
        info!("no new data ready");
      }  
    }

    FreeRtos::delay_ms(30000);
  }

}
    

许可协议

您可以根据以下任一许可协议自由复制、修改和分发此应用程序,并注明出处:

任选其一。

此项目与 ScioSense 无关,也不受其支持。

依赖关系

~0.7–1.7MB
~23K SLoC