3个稳定版本
使用旧的 Rust 2015
1.2.0 | 2019年7月1日 |
---|---|
1.1.0 | 2018年10月25日 |
1.0.0 | 2018年10月24日 |
#1597 in 硬件支持
540KB
13K SLoC
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_CC
和VL53L1X_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