Если ты зашёл сюда, скорее всего, хочешь научиться читать RFID-метки — карточки пропуска безопасности, брелоки от дверей, или просто смотреть UID с выданных брелоков. MFRC522 — это дешёвый чип (обычно доллар-полтора на алиэкспрессе), который работает на частоте 13,56 МГц и умеет общаться с карточками по протоколу ISO 14443A. В этой статье я расскажу, как превратить этот чип в рабочий ридер, который выводит номер карточки в монитор порта, и дам именно ту информацию, которая нужна, чтобы не наступать на чужие грабли.
Что тебе понадобится
Ничего сверхъестественного. Минимальный набор выглядит так:
- Плата MFRC522 (модуль, не голая микросхема — с обвязкой и антенной на плате)
- Arduino Uno или Nano (подойдёт любая совместимая плата с ATmega328P)
- Соединительные провода — мама-мама или мама-папа, смотря какие у тебя колодки
- USB-кабель для Ардуино
- Компьютер с Arduino IDE или PlatformIO
По желанию: красный и зелёный светодиоды + резисторы 220 Ом для визуальной индикации результата считывания.
Подключение MFRC522 к Arduino без ошибок
Схема SPI-подключения стандартная, но есть свой нюанс: на некоторых клонах модуля распиновка нанесена зеркально по отношению к самому чипу. Если плата работает стабильно – отлично, если же постоянно возникают сбои, всегда сверяйсь с реальным репином твоей конкретной платопечатки, а не только по надписям на корпусе.
Стандартная SPI-распиновка подключения к Arduino Uno:
| MFRC522 | Arduino Uno | Примечание |
|---|---|---|
| SDA (SS) | D10 | Chip Select |
| SCK | D13 | SPI Clock |
| MOSI | D11 | Master Out Slave In |
| MISO | D12 | Master In Slave Out |
| IRQ | не подключать | прерывание, обычно не используется |
| GND | GND | обязательно! |
| RST | D9 | Reset модуля |
| 3.3V | 3.3V | ни в коем случае не 5V! |
Вот здесь уже первая боль новичков — модуль питается от 3,3 вольта. Если подать 5V на пин 3.3V, микросхема уходит в «отказ» или начинает работать нестабильно — считывание будет случайным (то работает, то нет). При подключении источника питания обязательно проверь, что на этом пине именно 3,3 В, иначе мысли о «бракованном модуле» будут напрасными.
Установка библиотеки и первый тест
В Arduino IDE идёшь в «Библиотеки» — «Управление библиотеками», вбиваешь MFRC522 и ставишь библиотеку от GitHubCommunity (или MFRC522 by GithubCommunity). Она заточена именно под этот чип и поддерживает большинство типов меток.
После установки открываешь пример: Файл → Примеры → MFRC522 → DumpInfo. Это скетч, который считывает полный дамп карточки и выводит его в монитор порта.
Перед загрузкой убедись, что в скетче правильно указаны пины:
#define RST_PIN 9
#define SS_PIN 10 Загружаешь скетч, открываешь монитор порта на скорости 9600 бод, подносишь карточку прямо к корпусу модуля – и видишь информацию о чипе. Если видишь UID в формате hex — поздравляю, ридер рабочий.
Что реально происходит при считывании
MFRC522 облучает антенну, в её поле попадает карточка (у карточки собственной батареи нет, именно поэтому она откликается только вблизи от катушки). Происходит инициализация: чтение типа метки (Tag Type), затем поиск (Request), получение серийного номера карты (Anti-collision loop) — это и есть UID, тот самый уникальный идентификатор в 4 или 7 байт. Именно его чаще всего мы видим в протоколе SPI.
Протокол ISO 14443-3 предполагает стандартную последовательность обмена кадрами: REQA → ATQA → SELECT → SAK. Пример DumpInfo делает эту последовательность «за тебя», без необходимости ручной отладки команд. Если хочешь посмотреть весь процесс обмена данными в текстовом виде, можно добавить в скетч PICC_DumpVersionToSerial(), но для начального знакомства достаточно и UID.
У бесконтактных карт MIFARE Classic 1K после считывания UID можно прочитать данные из секторов, если знаешь ключи доступа (Key A или Key B). Часто на заводе стоят стандартные ключи типа FF FF FF FF FF FF или A0 A1 A2 A3 A4 A5. Если видел упоминание утилиты для веба – знай, чуда не будет, ключи либо дефолтные, либо нужно восстанавливать их специальными методами. С точки зрения практических домашних опытов: достаточно заменить стандартные ключи на свои, и данные карты станут недоступны для перебора тупыми инструментами.
Расширяем базовый скетч: индикация и защита «пустых» пропусков
Допустим, ты не хочешь просто смотреть UID, а хочешь, чтобы ридер пищал или зажигал светодиод, когда поднесена «своя» карта. Тогда добавляем простую логику сравнения UID:
byte myCard[] = {0xDE, 0xAD, 0xBE, 0xEF}; // твой UID
if (mfrc522.uid.uidByte[i] == myCard[i]) {
// совпали все байты – зажечь зелёный
} else {
// хотя бы один байт другой – красный
} Под «своей» картой можно хранить абсолютно любой байтовый массив – от простого UID до сложной структуры. Главное — помнить, что UID публично считывается, и если ты рассчитываешь на серьёзную защиту, то одной проверкой UID не обойтись (её легко скопировать).
Частые проблемы при сборке
- «Модуль не отвечает» — в логах видна строка
MFRC522 Init failed. Сначала проверь питание (3,3 В на соответствующем пине) и отсутствие коротких замыканий по SPI-линиям. Часто проблема в том, что модуль просто не отпаяется от предыдущей прошивки. Помогает перезаливка чистого скетча DumpInfo с перезагрузкой. - Карта не считывается с расстояния — антенна на плате не резонирует с частотой 13,56 МГц. Проверь визуально целостность катушки, отсутствие перетёртых витков и качество пайки согласующего контура. В 90% случаев проблема решается перепайкой конденсаторов на модуле.
- Периодически зависает SPI-шина — слишком длинные провода (более 10–15 см) на линиях SCK/MOSI/MISO. Укороти их до минимальной длины, при необходимости добавь развязку чуть выше по коду (сделать CS высоким между передачами).
- Читается только при нажатии карты вплотную — нормальное расстояние для MFRC522 — 1–3 см. Если у тебя получается только 0–1 см,ее всего, нет резонанса или помехи от металлического корпуса. Удалите металлические предметы вокруг антенны, проверьте экранирование.
Когда MFRC522 не подходит
У этого чипа есть ограничения, которые стоит проговорить:
- Он не работает с Ultralight C или DESFire EV2 в полноценном режиме шифрования — будет только UID считываться. Если нужно взаимодействовать с DESFire EV2, берите PN532 или SRI512, но это уже другой уровень цены и сложности.
- Нет аппаратного шифрования RSA или AES — все протоколы шифрования «ручные», либо используют только стандартное шифрование MIFARE Classic устаревшего алгоритра CRYPTO1, который несложно взломать.
- Дальность считывания пассивных меток не превышает ~3 см. Хочешь 5–10 см — нужна другая частота (125 кГц) или активные метки с батарейкой.
Для домашних экспериментов, открытия двери по метке или идентификации принтерных филаментов этого хватит с головой. Для серьёзных access‑систем с контролем целостности данных — нет.
Какой Arduino и модуль брать
Проверено на практике: самый простой файл делается на Arduino Nano с пятачным питанием от USB 2.0. Arduino Mega лучше не брать — у неё аппаратный SPI на других пинах, и если не перенастроить библиотеку, то SCK/MOSI не работают. Также будьте осторожны с китайскими клонами модулей, где пины развёрнуты зеркально – всегда ориентируйтесь на реальную распечатку, а не на условные стандарты.
Нужные материалы для поиска: MFRC522 RFID module и Arduino Nano V3. Оба элемента широко доступны в розничных сетях электроники. Заказывать проще всего через маркетплейсы, где приходитный комплект – модуль + брелок + брелок‑карта. Обязательно проверьте, чтобы у модуля были выведены пины (SDA, SCK, MOSI, MISO, IRQ, GND, RST, 3.3V) – и при необходимости допаяйте колодки, если их нет.
Что дальше: три направления развития
- Визуальный сигнал открытия двери — скетч считывает UID, и если UID совпадает с записанным, замыкается реле, ведущее на электромагнитный замок. Добавляешь питание 12В на обмотку замка через транзистор и диод (обязательно диод!). Получаешь полноценный контроллер доступа. Но помни – это игрушечная защита, так как карту можно скопировать с помощью ПО типа mfcuk. Для реального доступа в помещение лучше использовать заводские решения с нымшифрованными метками.
- Логирование активности — подключаешь ESP8266 вместо Uno, заливаешь скетч с Wi-Fi, и при каждом считывании отправляешь GET-запрос на свой сервер. Логишь, кто и когда прикладывал метку. В результате получается дешёвая система учёта рабочего времени. Единственная проблема – при перезагрузке может некоторое время не быть связи, поэтому важно хранить последний UID в EEPROM и отправлять его позже.
- Клонирование для тестов — записываешь оригинальный UID на T5577-карточку на частоте 125 кГц (но! MFRC522 работает на 13,56 МГц, поэтому для полного эксперимента понадобится шилд на EM4095 или ATtiny). Цель – быстро проверить логику считывания и записи, не тратя на это оригинальную карту. На T5577 можно перезаписывать UID для тестов, но она не полноценный репликатор MFIRE, поэтому рассчитывайте только на этап отладки.
Практические советы, которые сэкономят нервы
- При разработке нового скетча всегда вставляй в начало
mfrc522.PCD_Init()и проверяй возвращаемое значение. Если инициализация не прошла, дальнейшая работа с модулем бессмысленна. - Если карточка иногда считывается, иногда нет — попробуй уменьшить время ожидания ответа (таймаут считывания) в библиотеке. Иногда помогает увеличить количество повторных попыток опроса метки.
- Не используй металлический корпус для ридера. Металл глушит электромагнитное поле, и ты получишь дальность 0–2 мм вместо нормальных 1–3 см. Лучше всего пластик или дерево.
- В скетчах с поиском UID добавляй сравнение по всем байтам (uid.size() возвращает количество байт в UID), даже если используешь только часть. Иначе разные карты могут ошибочно восприниматься как одна.
Что в итоге
Собрать RFID-ридер на MFRC522 — это 30 минут реального времени, если под руками есть Ардуино и провода. Ты получаешь стабильный инструмент для чтения бесконтактных карт на частоте 13,56 МГц, с которым можно строить свои системы учёта доступа, прототипировать устройства автоматизации, и самое главное — понять, как работает RFID вообще.
Главное, что стоит запомнить: UID — это не секрет, MFRC522 — не инструмент для серьёзной защиты, а питание платы должно быть только 3,3 В на соответствующем пине. Если нужна защищённая система — переходи на DESFire EV2 с PN532 и строй полноценную архитектуру. Если нужен дешёвый способ считывать метки, сигнализировать события и быстро отладить логику предохранителя двери — MFRC522 справится.
