Запись на RFID карту с Arduino: RC522, персонализация, фамилия и имя
Запись на RFID карту — третий урок цикла «Всё про RFID». Учимся записывать на карту MIFARE Classic 1K фамилию, имя, номер кабинета с помощью Arduino и модуля RC522. Получаем именные пропуска, брелоки, карты доступа. Работаем с секторами 1, 2, 4. Простая схема, минимум деталей. Часть цикла: теория, замок, запись, копирование. Уроки Arduino, RC522, MIFARE, запись данных, персонализация карт.
Зачем записывать информацию на 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!)
Библиотека 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);
}
В loop() проверяет, есть ли новая карта (PICC_IsNewCardPresent).
Если карта обнаружена, считывает её серийный номер (PICC_ReadCardSerial).
Выводит в Serial информацию о версии считывателя (PICC_DumpVersionToSerial) и данные карты (PICC_DumpMifareClassicToSerial).
Завершает работу с картой (PICC_HaltA) и ждёт 1 секунду перед следующей проверкой.
Подходит для диагностики и тестирования карт MFRC522.
Скетч записи на карту
#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 секунды.
Расширение
Запись 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.