Включаем светодиод при совпадении UID RFID-метки
В этом разделе мы возьмём UID, который получили в предыдущей главе, и зашьём его прямо в программу. Светодиод будет включаться только тогда, когда рядом находится подходящая RFID-метка; в остальных случаях он остаётся выключенным. Если поднести RFID-метку, светодиод загорится. Если поднести другую метку, например брелок или любую другую RFID-карту, светодиод погаснет.
Так вы получите базовое ощущение «авторизован — не авторизован». Простой проверки UID недостаточно для настоящей безопасности, и в следующей главе мы подробнее разберём чтение и аутентификацию. А пока это простой и весёлый способ начать. Этот пример можно также расширить, добавив OLED-дисплей и выводя на нём сообщения «Authorized» или «Unauthorized» вместо светодиода.
Получаем UID вашей карты
Прежде чем писать логику управления светодиодом, нужно узнать UID вашей RFID-карты.
Запустите код из предыдущей главы, который выводит UID. Когда вы поднесёте карту к считывателю, вы увидите примерно такой вывод:
UID: 13 37 73 31
Это четыре байта, которые вы зададите в программе как [0x13, 0x37, 0x73, 0x31].
Логика
Логика здесь простая. По умолчанию светодиод выключен. Программа постоянно проверяет наличие RFID-метки. Когда метка обнаружена, её UID считывается и сравнивается с заданным в коде UID. Если они совпадают, светодиод включается. Если не совпадают или метки нет, светодиод остаётся выключенным.
#![allow(unused)]
fn main() {
// Замените байты UID на UID вашей метки
const TAG_UID: [u8; 4] = [0x13, 0x37, 0x73, 0x31];
let mut led = Output::new(p.PIN_25, Level::Low);
loop {
led.set_low();
if let Ok(atqa) = rfid.reqa() {
if let Ok(uid) = rfid.select(&atqa) {
if *uid.as_bytes() == TAG_UID {
led.set_high();
Timer::after_millis(500).await;
}
}
}
Timer::after_millis(100).await;
}
}
Клонируйте существующий проект
Можно клонировать проект, который я создал, и перейти в папку rfid-led.
git clone https://github.com/ImplFerris/pico2-embassy-projects
cd pico2-embassy-projects/rfid/rfid-led/
Зажигаем светодиод
Прошейте программу на Pico, как обычно:
# если вы используете отладочный зонд
# cargo flash --release
cargo embed --release
# если вы используете подход с BOOTSEL
cargo run --release
Когда программа запущена, поднесите подходящую RFID-метку к считывателю и посмотрите, как включается встроенный светодиод. Уберите метку — светодиод погаснет. Попробуйте другую карту или брелок, и вы увидите, что светодиод не загорается для UID, которые не совпадают.
Версия на rp-hal
Если вас интересует версия этого примера на rp-hal, её можно найти в репозитории ниже. Клонируйте репозиторий и перейдите в проект rfid-led:
git clone https://github.com/ImplFerris/pico2-rp-projects
cd pico2-rp-projects/rfid/rfid-led/