5个版本

0.1.4 2024年4月8日
0.1.3 2023年12月15日
0.1.2 2022年6月18日
0.1.1 2022年6月18日
0.1.0 2022年6月18日

#343 in 嵌入式开发

Apache-2.0

34KB
625

LTR-303ALS

Build status Crates.io Version Crates.io Downloads No Std

这是一个使用embedded-hal traits的跨平台Rust驱动程序,用于LTR-303环境光传感器。

支持的设备

与以下传感器测试

状态

  • 开始测量,可配置增益积分时间测量率。见:start_measurement()
  • 轮询新数据。见:data_ready()
  • 检查最新的测量状态。见:get_status()
  • 读取最新的照度值(单位:勒克斯)。见:get_lux_data()
  • 将传感器置于待机状态。见:standby()
  • 读取部分ID和生产商ID。见:get_part_id()get_mfc_id()
  • 可选地将延迟函数传递给驱动程序。类似于opt300x驱动程序
  • 错误情况下进行传感器复位。
  • 冷启动(100ms)后触发测量之前,等待传感器启动
  • 中断

示例

在Linux上使用i2cdev

use linux_embedded_hal::I2cdev;
use ltr303::{LTR303, LTR303Config};

fn main() {
    let dev = I2cdev::new("/dev/i2c-1").unwrap();
    let mut sensor = LTR303::init(dev);
    let config = LTR303Config::default();
    sensor.start_measurement(&config).unwrap();

    loop {
        while sensor.data_ready().unwrap() != true {
            // Wait for measurement ready
        }

        let lux_val = sensor.get_lux_data().unwrap();
        println!("LTR303 current lux phys: {}", lux_val.lux_phys);
    }
}

在基于ESP32的开发板上

use embedded_hal::prelude::*;
use esp_idf_sys as _;
use esp_idf_hal::{delay::FreeRtos, i2c};
use esp_idf_hal::peripherals::Peripherals;
use ltr303::{LTR303, LTR303Config};

fn main() {
    esp_idf_sys::link_patches();

    let _peripherals = Peripherals::take().unwrap();
    // The i2c pins
    let sda = _peripherals.pins.gpio4.into_input_output().unwrap();
    let scl = _peripherals.pins.gpio6.into_output().unwrap();

    let _cfg = i2c::config::MasterConfig::new().baudrate(10000.into());
    let _i2c = i2c::Master::new(_peripherals.i2c0, i2c::MasterPins { sda, scl }, _cfg).unwrap();

    let mut ltr303 = LTR303::init(_i2c);
    let ltr303_config =
        LTR303Config::default().with_integration_time(ltr303::IntegrationTime::Ms400);
    ltr303.start_measurement(&ltr303_config).unwrap();

    loop {
        while ltr303.data_ready().unwrap() != true {
            // Wait for measurement ready
        }

        let lux_val = ltr303.get_lux_data().unwrap();
        println!("LTR303 current lux phys: {}", lux_val.lux_phys);

        FreeRtos.delay_ms(3000_u32);
    }
}

开发

为了便于开发,提供了一个flake.nix文件。请确保已安装Nix,以及已启用flake命令(例如,通过将experimental-features = nix-command flakes添加到~/.config/nix/nix.conf),然后只需运行

nix develop

在项目文件夹中,可以构建一个完整的构建和开发环境,包括为 ltr303-rs 所需的所有依赖。

依赖项

约2MB
约46K SLoC