#esp-hal #rfid #embedded-hal-async #debugging #dump #card #mfrc522

esp-hal-mfrc522

为 esp-hal 简单的 mfrc522 库(可在实现 embedded-hal-async 的任何 hal 上使用)

1 个不稳定版本

0.1.0 2024年7月22日

#337硬件支持

Download history 106/week @ 2024-07-21 3/week @ 2024-07-28

109 每月下载量

MIT 许可证

59KB
1.5K SLoC

esp-hal-MFRC522

esp-hal 的非阻塞 RFID 库(可能适用于未来的其他 hal)。此项目只是 此 Arduino 库 的“移植”。

crates.io MIT license

示例

let dma = Dma::new(peripherals.dma);
let dma_chan = dma.channel0;
let (descriptors, rx_descriptors) = dma_descriptors!(32000);
let dma_chan = dma_chan.configure_for_async(false, esp_hal::dma::DmaPriority::Priority0);

let cs = Output::new(io.pins.gpio5, Level::High);
let spi = Spi::new(peripherals.SPI3, 5.MHz(), SpiMode::Mode0, &clocks);
let spi: Spi<SPI3, FullDuplexMode> = spi.with_sck(io.pins.gpio4).with_miso(io.pins.gpio2).with_mosi(io.pins.gpio3);
let spi: SpiDma<SPI3, _, FullDuplexMode, Async> =
    spi.with_dma(dma_chan, descriptors, rx_descriptors);

//mfrc522_esp_hal::MFRC522::new(spi, cs, || esp_hal::time::current_time().ticks());
let mut mfrc522 = mfrc522_esp_hal::MFRC522::new(spi, cs); // embassy-time feature is enabled,
                                                          // so no need to pass current_time
                                                          // function

_ = mfrc522.pcd_init().await;
_ = mfrc522.pcd_selftest().await;
log::debug!("PCD ver: {:?}", mfrc522.pcd_get_version().await);

if !mfrc522.pcd_is_init().await {
    log::error!("MFRC522 init failed! Try to power cycle to module!");
}

loop {
    if mfrc522.picc_is_new_card_present().await.is_ok() {
        let card = mfrc522.get_card(UidSize::Four).await;
        if let Ok(card) = card {
            log::info!("Card UID: {}", card.get_number());

            // this function dumps card blocks using log::debug
            // use mfrc522_esp_hal::debug::MFRC522Debug;
            //
            //_ = mfrc522.debug_dump_card(&card).await;
        }

        _ = mfrc522.picc_halta().await;
    }

    Timer::after(Duration::from_millis(1)).await;
}

待办事项

  • 修改一些函数以使其更“Rust 风格”
  • 代码中的文档
  • Crates.io 发布

依赖项

~0.6–0.8MB
~15K SLoC