#embedded-hal #arducam #embedded-hal-driver #computer-vision #spi-driver #ov2640

no-std arducam-legacy

基于嵌入式-hal的Arducam旧款相机驱动程序

3个版本

0.1.2 2023年7月31日
0.1.1 2023年7月29日
0.1.0 2023年7月20日

#642 in 嵌入式开发

Download history 9/week @ 2024-07-05 114/week @ 2024-07-26

每月123次下载

Apache-2.0

18KB
273 代码行

arducam-legacy

这个Rust库为嵌入式-hal提供了对例如ArduCAM MINI 2MP Plus等基于SPI的旧款Arducam相机的支持。它已经从原始的C语言编写的Arducam库进行了重写。

里程碑

  • 支持OV2640
  • 支持JPEG图像
  • 不同分辨率
  • 更多传感器型号支持
  • DMA API

模型支持

目前,此库仅与Arducam Mini 2MP Plus型号进行了测试。欢迎为其他型号做出贡献!

MCU支持

任何具有嵌入式-hal支持的微控制器HAL都应该与该驱动程序一起工作

用法

将此行添加到项目下的Cargo.toml文件中的[dependencies]

[dependencies]
arducam-legacy = "0.1.0"

示例

此示例演示了如何捕获图像并将其存储在数组缓冲区中

#![no_std]
#![no_main]

use stm32_hal2::{pac, gpio::{Pin, Port, PinMode, OutputType}, spi::{Spi, BaudRate}, i2c::I2c, timer::Timer};
use cortex_m::delay::Delay;

use arducam_legacy::Arducam;

fn main() -> ! {
    let cp = cortex_m::Peripherals::take().unwrap();
    let dp = pac::Peripherals::take().unwrap();

    // Clocks setup
    let clock_cfg = stm32_hal2::clocks::Clocks::default();
    clock_cfg.setup().unwrap();
    let mut delay = Delay::new(cp.SYST, clock_cfg.systick());
    let mut mono_timer = Timer::new_tim2(dp.TIM2, 100.0, Default::default(), &clock_cfg);

    // Example pinout configuration
    // Adapt to your HAL crate
    let _arducam_spi_mosi = Pin::new(Port::D, 4, PinMode::Alt(5));
    let _arducam_spi_miso = Pin::new(Port::D, 3, PinMode::Alt(5));
    let _arducam_spi_sck = Pin::new(Port::D, 1, PinMode::Alt(5));
    let arducam_cs = Pin::new(Port::D, 0, PinMode::Output);
    let arducam_spi = Spi::new(dp.SPI2, Default::default(), BaudRate::Div32);
    let mut arducam_i2c_sda = Pin::new(Port::F, 0, PinMode::Alt(4));
    arducam_i2c_sda.output_type(OutputType::OpenDrain);
    let mut arducam_i2c_scl = Pin::new(Port::F, 1, PinMode::Alt(4));
    arducam_i2c_scl.output_type(OutputType::OpenDrain);
    let arducam_i2c = I2c::new(dp.I2C2, Default::default(), &clock_cfg);

    let mut arducam = Arducam::new(
        arducam_spi,
        arducam_i2c,
        arducam_cs,
        arducam_legacy::Resolution::Res320x240, arducam_legacy::ImageFormat::JPEG
        );
    arducam.init(&mut delay).unwrap();

    arducam.start_capture().unwrap();
    while !arducam.is_capture_done().unwrap() { delay.delay_ms(1) }
    let mut image = [0; 8192];
    let length = arducam.get_fifo_length().unwrap();
    let final_length = arducam.read_captured_image(&mut image).unwrap();

    loop {}
}

依赖项

~69–250KB