7个版本
0.2.1 | 2021年10月4日 |
---|---|
0.2.0 |
|
0.1.1 | 2021年8月25日 |
0.0.4 | 2021年8月10日 |
0.0.3 | 2021年7月29日 |
#624 在 嵌入式开发
173 每月下载量
用于 r-u-still-there
360KB
6.5K SLoC
mlx9064x
mlx9064x
是一个用于使用Melexis的MLX90640和MLX90641热像仪的库。它是 no_std
,但这些相机在使用时需要相当多的内存和计算能力。
此库仍在开发中,但最终API将非常接近当前的API。
lib.rs
:
一个纯Rust库,用于通过I²C访问MLX90640和MLX90641(最终!)热像仪。
这些相机有大量必须在使用前预先处理的校准数据,输出数据也需要一个相对复杂的处理过程才能转换为温度数据。此包具有两个级别的API,一个高级API,它为您处理校准数据和原始数据处理,以及一个低级API,如果您需要超出高级API所能做到的范围。
此库使用embedded-hal
I²C特质,这意味着只要有一个可用的embedded-hal
I²C实现,您应该能够使用此库在其他平台上。此库也与no_std
兼容(尽管内存需求很大)。
高级API
use std::thread::sleep;
use std::time::Duration;
use mlx9064x::Mlx90640Driver;
use linux_embedded_hal::I2cdev;
let i2c_bus = I2cdev::new("/dev/i2c-1").expect("/dev/i2c-1 needs to be an I2C controller");
// Default address for these cameras is 0x33
let mut camera = Mlx90640Driver::new(i2c_bus, 0x33)?;
// A buffer for storing the temperature "image"
let mut temperatures = vec![0f32; camera.height() * camera.width()];
camera.generate_image_if_ready(&mut temperatures)?;
// Default frame rate is 2Hz
sleep(Duration::from_millis(500));
camera.generate_image_if_ready(&mut temperatures)?;
此代码片段给出了使用MLX90640在Linux上高级API的快速示例。相机使用I²C总线#1(/dev/i2c-1
)和默认I²C地址(0x33
)。校准数据通过I²C从相机加载并保存到camera
中的Mlx90640Calibration
。创建一个目标缓冲区来存储相机温度数据,使用一个Vec
,然后两次检索温度数据,以覆盖子页面,两次访问之间有延迟,以便下一帧数据变得可用。
高级API通过CameraDriver
公开,并且使配置相机设置(如帧率或访问模式)变得很容易。如果您需要定制功能,而不仅仅是CameraDriver
提供的功能,那么低级API可能是更好的选择。
低级API
低级API是高级API的基础,在需要更定制化方法的情况下被暴露。一个常见的例子是自定义校准数据的加载方式。为了减少启动时间和内存使用,您可能想要预先处理特定摄像头的校准数据并将其存储在微控制器的闪存中。这可以通过实现 CalibrationData
来完成。由于 CameraDriver
对 CalibrationData
是泛型的,因此您可以使用自己的自定义 CalibrationData
与高级API的其他部分一起使用,几乎不需要做任何修改。
大多数低级API的用户可能会发现 common
、register
和 calculations
模块与其需求最为相关,其中包含在 mlx90640
和 mlx90641
模块中可用的针对摄像头型号的特定常量和类型。
子页面和访问模式
这些 Melexis 摄像头与其他常见热像头的显著区别在于它们更新图像数据的方式。每一帧,数据的一个 [子页面][Subpage] 被更新。对于 MLX90640,每个子页面覆盖一半的像素,[访问模式][AccessPattern] 决定了像素如何在子页面之间分配。MLX90641 的子页面覆盖 所有 像素(并且访问模式应从 interleave 保持不变)。
依赖关系
~1.4–2.2MB
~48K SLoC