3个稳定版本

使用旧的 Rust 2015

1.2.0 2019年7月1日
1.1.0 2018年10月25日
1.0.0 2018年10月24日

#1597 in 硬件支持

MIT 协议

540KB
13K SLoC

C 13K SLoC // 0.2% comments Rust 319 SLoC // 0.0% comments

Linux上的Rust VL53L1X库 最新版本 文档

Rust的VL53L1x脉冲测距传感器库。同时也为在Linux上使用VL53L1X而不需要Rust提供了一个共享库。

用法

extern crate vl53l1x;

pub fn main() {
    let mut vl = vl53l1x::Vl53l1x::new(1, None).unwrap();
    vl.init().unwrap();
    vl.start_ranging(vl53l1x::DistanceMode::Long).unwrap();
    loop {
        println!("Sample: {:?}", vl.read_sample());
    }
}

查看 examples/scan.rs 以获得更详细的示例。

注意,如果您使用2.8伏特(而不是默认的1.8伏)的传感器,您应该启用 cargo 功能 i2c-2v8-mode,有关更多信息,请参阅数据手册(第5.2节)。大多数现有的分线板都运行在2.8伏特(甚至3.3伏)下,所以您可能想要这样做。您可以通过在您的 Cargo.toml 中添加以下内容来实现:

[dependencies.vl53l1x]
version = "1"
features = ["i2c-2v8-mode"]

功能

  • 设置距离模式(短、中、长)。
  • 设置时间预算和测量间隔。
  • 更改设备的I2C地址。
  • 获取/设置感兴趣区域以调整视野。
  • Makefile可用于生成不带Rust的静态或动态库。
  • 已通过valgrind验证ST库和添加的代码没有内存泄漏。

方法

此工具编译一个C库,然后通过crate将此库静态链接到您的Rust程序。C库基于官方ST C API。它们的头文件方便地将特定平台的i2c实现抽象到 vl53l1_platform.c 中,我已使用它来实现Linux i2c接口(linux/i2c-dev.h)。

这种方法与VL53L1X_Arduino_Library不同,后者重新实现了官方库,主要重放了i2c数据流捕获。这种方法的结果是内存占用更小(对Arduino有利),但功能较少且更脆弱。例如,我观察到它们库和官方库之间的距离测量存在差异。他们辛勤的工作是ST没有发布该设备的官方i2c寄存器数据表的直接结果。

这种方法与vl53l1x-python类似。然而,它依赖于Python提供i2c函数。这个库使用C实现了i2c适配器,并且完全自包含,这使得它非常适合作为共享库libvl53l1x发布。

交叉编译

使用VL53L1X_CCVL53L1X_AR环境参数指定自定义C编译器和归档工具。例如

VL53L1X_CC=arm-linux-gnueabihf-gccVL53L1X_AR=arm-linux-gnueabihf-ar cargo build

平台

该库仅在Raspberry Pi 3 B+上进行了测试。

注意:动态链接库

在某个时候,将发布不带Rust的动态链接库到自己的仓库。现在,您可以从仓库的根目录运行以下命令

make libvl53l1x_api.so

库将在build目录中。

待办事项

  • 发布适用于非Rust、Linux的libvl53l1x

资源

许可证

ST的库采用BSD许可证和他们的专有许可证双重许可。其余内容采用MIT许可证。

依赖关系

~2MB
~45K SLoC