Запись на RFID карту с Arduino: RC522, персонализация, фамилия и имя

Запись на RFID карту — третий урок цикла «Всё про RFID». Учимся записывать на карту MIFARE Classic 1K фамилию, имя, номер кабинета с помощью Arduino и модуля RC522. Получаем именные пропуска, брелоки, карты доступа. Работаем с секторами 1, 2, 4. Простая схема, минимум деталей. Часть цикла: теория, замок, запись, копирование. Уроки Arduino, RC522, MIFARE, запись данных, персонализация карт.

Запись на RFID карту Arduino RC522 MIFARE 1K

Зачем записывать информацию на RFID карту

Стандартная карта — пустая. Запись позволяет сделать её именной: фамилия, имя, номер кабинета, должность, срок действия. Применение: пропуска в офис, карты сотрудников, брелоки, клубные карты, контроль доступа. RC522 считывает и записывает сектора MIFARE Classic 1K. До 16 символов на блок (латиница) или 8 (кириллица — Unicode). Безопасность: записывай только свои карты. Проект для новичков: простая схема, понятный код.

Компоненты

  • Arduino Uno/Nano
  • Модуль RC522 RFID (MFRC522)
  • Карта MIFARE Classic 1K (или брелок)
  • Провода, макетная плата
  • БП 5В 1А+

Подключение RC522 к Arduino

  • SDA → D10
  • SCK → D13
  • MOSI → D11
  • MISO → D12
  • IRQ — не используется
  • GND → GND
  • RST → D9
  • 3.3V → 3.3V (не 5V!)
Подключение RC522 к Arduino схема

Библиотека MFRC522

Установка: Arduino IDE → Скетч → Подключить библиотеку → Управление библиотеками → MFRC522. Примеры: DumpInfo, WriteMifareClassic.

Скетч дампа карты

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN 9
#define SS_PIN 10

MFRC522 rfid(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
}

void loop() {
  if (!rfid.PICC_IsNewCardPresent()) return;
  if (!rfid.PICC_ReadCardSerial()) return;
  rfid.PICC_DumpVersionToSerial();
  rfid.PICC_DumpMifareClassicToSerial();
  rfid.PICC_HaltA();
  delay(1000);
}
Инициализирует считыватель RFID MFRC522 на пинах 10 (SS) и 9 (RST).
В loop() проверяет, есть ли новая карта (PICC_IsNewCardPresent).
Если карта обнаружена, считывает её серийный номер (PICC_ReadCardSerial).
Выводит в Serial информацию о версии считывателя (PICC_DumpVersionToSerial) и данные карты (PICC_DumpMifareClassicToSerial).
Завершает работу с картой (PICC_HaltA) и ждёт 1 секунду перед следующей проверкой.
Подходит для диагностики и тестирования карт MFRC522.
Сектора и блоки RFID карты MIFARE 1K

Скетч записи на карту

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN 9
#define SS_PIN 10

MFRC522 rfid(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  Serial.println("Приложите карту к ридеру...");
}

void loop() {
  // Проверка новой карты
  if (!rfid.PICC_IsNewCardPresent()) return;
  if (!rfid.PICC_ReadCardSerial()) return;

  Serial.print("UID карты: ");
  for (byte i = 0; i < rfid.uid.size; i++) {
    Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(rfid.uid.uidByte[i], HEX);
  }
  Serial.println();

  // Блок для записи
  byte block = 4; // блок данных сектора 1
  byte dataBlock[16] = { 'I','v','a','n','o','v',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ' };

  // Ключ по умолчанию
  MFRC522::MIFARE_Key key;
  for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;

  // Аутентификация
  MFRC522::StatusCode status;
  status = rfid.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(rfid.uid));
  if (status != MFRC522::STATUS_OK) {
    Serial.print("Ошибка аутентификации: ");
    Serial.println(rfid.GetStatusCodeName(status));
    rfid.PICC_HaltA();
    return;
  }

  // Запись данных
  status = rfid.MIFARE_Write(block, dataBlock, 16);
  if (status != MFRC522::STATUS_OK) {
    Serial.print("Ошибка записи: ");
    Serial.println(rfid.GetStatusCodeName(status));
  } else {
    Serial.println("Данные успешно записаны!");
  }

  rfid.PICC_HaltA();  // остановка работы с картой
  delay(2000);
}
Делает следующее:
считывает UID карты MIFARE.
выводит его в Serial.
аутентифицируется по ключу по умолчанию.
записывает фамилию "Ivanov" в блок 4 сектора 1.
останавливает карту и ждёт 2 секунды.
Дамп RFID карты после записи Пример записи на RFID карту Arduino Скетч записи на RFID карту Arduino Загрузка данных на RFID карту Ограничение ввода текста 60 секунд

Расширение

Запись UID. Редактирование секторов. OpenHAB + MQTT. Wi-Fi ESP8266. Запись на Ultralight. Время прихода/ухода. Защита ключей. Интеграция с замком.

Заключение

Запись на RFID карту — полезный навык. RC522 + Arduino: записываем фамилию, имя, номер. Простая схема, понятный процесс. Умный дом, пропуска, ключи своими руками.

FAQ — Запись на RFID карту Arduino

Карта не читается?

3.3В питание. RST → D9, SS → D10. MFRC522 библиотека. Карта MIFARE Classic 1K.

Запись не проходит?

Ключи A/B по умолчанию FFFFFF. Блок 1,2,4. # — конец ввода. Карта в зоне.

Кириллица не пишется?

Unicode — 2 байта на символ. 8 букв на блок. Латиница — 16 символов.

Ограничение времени ввода?

60 секунд. # — конец ввода. ENTER — подтверждение.

OpenHAB интеграция?

ESP8266 + MQTT. Топики /rfid. Items String. Доступ по данным карты.

Очистка карты?

Скетч WriteMifareClassic с нулями. Запись 16 байт 00.

Запись UID?

Только на совместимые карты (Gen1, Gen2). Скетч UID changer.

📁 Скачать примеры