Библиотека MFRC522
- В менеджере библиотек
- MFRC522 by GithubCommunity
- Версия
- 1.4.12 · всего 30 версий, первая — 1.1.2
- Платы
- AVR — UNO, Nano, Mega, Pro Mini, Nano Every, UNO WiFi Rev2, STM32F1, ESP8266, ESP32, SAMD — Zero, MKR, Nano 33 IoT, Raspberry Pi Pico и ещё 2
Архивы — копии из официального индекса Arduino, контрольная сумма совпадает. Сверено 19.10.2026.
Считыватель RC522: читает UID карт и брелоков Mifare, пишет в блоки памяти карты.
RC522 работает по SPI и читает карты Mifare Classic и Ultralight на частоте 13,56 МГц: проездные, брелоки домофонов, метки из набора. Библиотека находит карту в поле, читает её уникальный номер UID — по нему обычно и открывают замок — и умеет читать и писать блоки памяти карты с ключами доступа.
Для большинства проектов хватает трёх вызовов: карта появилась, карта прочитана, вот её UID. Работа с блоками нужна, когда на карту надо что-то записать.
Как скачать и установить
- Через менеджер — самый простой путь. В Arduino IDE: Инструменты → Управлять библиотеками (Ctrl+Shift+I). Введите
MFRC522и найдите в списке строку «MFRC522 by GithubCommunity» — одноимённых библиотек бывает несколько, отличаются они автором. Нажмите «Установить». - Конкретная версия — если в чужом проекте указана не последняя. В той же карточке менеджера рядом с кнопкой есть выпадающий список версий: выберите нужную и нажмите «Установить».
- Из архива — если нет интернета на рабочем компьютере или менеджер не открывается. Скачайте ZIP выше, затем Скетч → Подключить библиотеку → Добавить .ZIP библиотеку и укажите файл. Распаковывать не нужно.
Файл MFRC522.h отдельно не скачивают: он внутри библиотеки и появляется после установки. Если среда пишет MFRC522.h: No such file or directory — библиотека не установлена или установлена не та. Как устроен менеджер и куда складываются файлы — в общей статье про библиотеки.
Строка подключения:
#include <SPI.h>
#include <MFRC522.h>Создание объекта — обычно до setup():
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
SPI.begin(); // в setup()
rfid.PCD_Init();Методы
Только то, что нужно в обычном скетче. Сигнатуры сверены с версией 1.4.12.
PCD_Init()- Инициализировать считыватель. После SPI.begin().
PICC_IsNewCardPresent()- true, если в поле появилась новая карта.
PICC_ReadCardSerial()- Прочитать UID карты в rfid.uid. Вызывать после IsNewCardPresent().
uid.uidByte[i], uid.size- Байты UID и их количество — 4 или 7.
PICC_GetType(uid.sak)- Тип карты: Mifare 1K, Ultralight и т. д.
PCD_Authenticate(cmd, block, &key, &uid)- Авторизоваться в секторе карты ключом (по умолчанию шесть байт 0xFF). Нужно перед чтением и записью блоков.
MIFARE_Read(byte block, byte* buf, byte* size)- Прочитать блок 16 байт; буфер — 18 байт.
MIFARE_Write(byte block, byte* buf, byte size)- Записать 16 байт в блок. Не трогайте блоки-трейлеры (3, 7, 11…): в них ключи.
PICC_HaltA()- Отпустить карту, чтобы она не читалась повторно, пока лежит на считывателе.
PCD_StopCrypto1()- Завершить шифрованную сессию после работы с блоками.
PICC_DumpToSerial(&uid)- Вывести всю память карты в монитор — для изучения.
Пример
#include <SPI.h>
#include <MFRC522.h>
MFRC522 rfid(10, 9); // SS, RST
byte master[4] = {0xDE, 0xAD, 0xBE, 0xEF}; // UID «своей» карты
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
}
void loop() {
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
bool ok = rfid.uid.size == 4;
for (byte i = 0; i < 4 && ok; i++) ok = rfid.uid.uidByte[i] == master[i];
Serial.print("UID:");
for (byte i = 0; i < rfid.uid.size; i++) {
Serial.print(' '); Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println(ok ? " — доступ разрешён" : " — чужая карта");
rfid.PICC_HaltA();
}Первый запуск — просто смотреть UID в мониторе и вписать свои в код. Так делают простейший замок.
На чём попадаются
Карта не читается вообще
Модуль питается от 3,3 В, не от 5. Провода SPI: SDA модуля — это SS. И проверьте, что RST подключён к указанному выводу.
Читается через раз
Длинные провода к SPI или помехи от питания. Держите провода короче 15 см и добавьте PICC_HaltA() после чтения.
Записал и карта «умерла»
Перезаписан трейлер сектора с ключами. Пишите только в блоки данных: в Mifare 1K это все, кроме каждого четвёртого.
На плате, где вывод 10 занят
SS можно назначить любой; RST тоже. Меняйте в конструкторе, но 11, 12, 13 остаются за шиной.