#sensor #driver #i2c #low-pass

no-std sths34pf80

ST STHS34PF80 驱动程序

9个版本

0.1.8 2024年6月8日
0.1.7 2024年4月27日

#1383 in 嵌入式开发

每月 23次下载

MIT/Apache

63KB
988

STHS34PF80  

crates.io License Documentation

用于STMicroelectronics STHS34PF80存在和运动检测传感器的Rust库

https://github.com/marvinrobot42/stsh34pf80.git

STHS34PF80传感器检测红外存在,意味着一个温暖的“身体”静止物体。它还可以进行环境冲击温度检测(过度的热量变化)和运动检测。

许多可配置的检测阈值、数据输出速率、中断引脚、低通滤波器、灵敏度设置。

功能

  • 更新为使用嵌入式-hal版本1.0.x
  • 为嵌入式使用(ESP32-C3、-C6和-S3)和树莓派设计
  • 可配置的中断引脚
  • 基于存在、运动和环境冲击测量的数据就绪状态读取
  • 如果需要,则配置低通滤波器
  • 滞后获取器和设置器
  • 灵敏度获取器和设置器
  • 增益获取器和设置器
  • 数据输出速率、平均调整获取器和设置器
  • 易于使用的Measurements结构体
  • 易于使用的初始化函数
  • 易于使用的get_measurement_blocking和get_measurement_timeout(带有超时参数)
  • 与no_std嵌入式兼容

注意

此驱动程序基于Sparkfun Arduino STHS34PF80驱动程序。用于此驱动程序开发的Sparkfun STHS34PF80 https://www.sparkfun.com/products/22494 传感器板。

不幸的是,github仓库名称拼写不正确,但现在陷入了困境。正确的设备和库名称是sths34pf80,而拼写错误的仓库名称是stsh34pf80。

近期版本历史

  • 0.1.8 更新README.md
  • 0.1.7 修复了下面的示例,添加了树莓派示例
  • 0.1.5 在链接中修复了github仓库名称
  • 0.1.4 文档改进。
  • 0.1.0 初始发布。

用法


将依赖关系添加到Cargo.toml

[dependencies.sths34pf80]
version = "0.1"

创建一个硬件特定的I²C驱动程序接口和延迟函数。从I²C接口和延迟函数创建Sths34pf80结构。如果需要,配置中断引脚属性。
初始化Sths34pf80(initialize() fn设置“标准”调整和ODR参数)。仅在需要更广泛的/更少的检测范围时设置存在、运动或环境冲击阈值。读取STHS34PF80状态并检查是否有新数据就绪,然后get_func_status并匹配返回的FUNC_STATUS枚举以查看哪个值发生了变化,然后获取这些值。

简单示例

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



use sths34pf80::{Sths34pf80};

...


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 sths34pf80 = Sths34pf80::new(i2c_dev, Ets{});  // Ets is ESP32 IDF delay function

  sths34pf80.initialize().unwrap();  

  loop {

    if let Ok(measurements) = sths34pf80.get_measurements_timeout(10) {
      match measurements.presence_value {
        Some(presence_value) => info!("presence detected, value is {}", presence_value),
        _ => (),
      }
      match measurements.motion_value {
        Some(motion_value) => info!("motion detected, value is {}", motion_value),
        _ => (),
      }
      match measurements.ambient_shock_value {
        Some(abmient_shock_value) => info!("ambient shock temp detected, value is {}", abmient_shock_value),
        _ => (),
      }
    } else {
      info!("timeout with get_measurements_timeout call");
    }

    FreeRtos::delay_ms(10000);
  }

}
    

许可证


您可以根据以下任一条款自由复制、修改和分发此应用程序

任由您选择。

本项目与STMicroelectronics或Sparkfun没有任何关联,也不获得任何形式的认可。

依赖项

~0.3–1.3MB
~14K SLoC