Инструменты пользователя

Инструменты сайта


rc522

Информация

RFID (Radio Frequency IDentification, радиочастотная идентификация) – способ бесконтактного распознавания устройств, обмена данными. Например, RFID можно использовать для того, чтобы идентифицировать людей, входивших и выходивших из помещения.

Подключение

SS 10 пин (меняется программно) SCK 13 пин MOSI 11 пин MISO 12 пин IRQ не подключен GND GND RST 9 пин (меняется программно, подключается к выводам с ШИМ) VCC 3.3V

Библиотека:

rfid-master.zip

Код

При обнаружении метки ваша Arduino отправит в последовательный порт её адрес.

#include <SPI.h>
#include <RFID.h>

#define SS_PIN 10
#define RST_PIN 9

RFID rfid(SS_PIN, RST_PIN); 
 
int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;
 
void setup()
{ 
  Serial.begin(9600);
  SPI.begin(); 
  rfid.init();
}
 
void loop()
{
    // Если обнаружена карта
    if (rfid.isCard()) {
        // Считываем адрес
        if (rfid.readCardSerial()) {
          // Выводим его в порт в десятичном представлении
          Serial.println("Card number:");
          Serial.print(rfid.serNum[0],DEC);
          Serial.print(", ");
        Serial.print(rfid.serNum[1],DEC);
          Serial.print(", ");
        Serial.print(rfid.serNum[2],DEC);
          Serial.print(", ");
        Serial.print(rfid.serNum[3],DEC);
          Serial.print(", ");
        Serial.print(rfid.serNum[4],DEC);
          Serial.println(" "); 
        }       
    }
    rfid.halt();
}

Для получения типа метки и ее UID (уникального идентификатора)

//  Скетч к обзору модуля RFID RC522
 
//  Вывод UID и типа метки
 
//  3d-diy.ru
 
 
 
// Подключение библиотек
 
#include <SPI.h>

#include <MFRC522.h>

// контакты
 
const int reset    9
 
const int ss    10
 
// Создание экземпляра объекта MFRC522
 
MFRC522 rider(reset, ss);
 
 
 
void setup() {
 
// запуск Serial
 
Serial.begin(9600);
 
// запуск SPI
 
SPI.begin();
 
// инициализация MFRC522
 
rider.PCD_Init();
 
}
 
void loop() {
 
// Ожидание
 
if ( ! rider.PICC_IsNewCardPresent())
 
return;
 
// чтение
 
if ( ! rider.PICC_ReadCardSerial())
 
return;
 
// вывод данных
 
Serial.print("UID=");
 
view_data(rider.uid.uidByte,rider.uid.size);
 
Serial.println();
 
Serial.print("type=");
 
byte piccType = rider.PICC_GetType(rider.uid.sak);
 
Serial.print(rider.PICC_GetTypeName(piccType));
 
Serial.println();
 
delay(1000);
 
}
 
// преобразование в HEX
 
void view_data (byte *buf, byte size) {
 
for (byte j = 0; j < size; j++) {
 
Serial.print(buf [j]);
 
Serial.print(buf [j], HEX);
 
}
 
}

После загрузки скетча открываем монитор последовательного порта и видим вывод данных о типе и UID подносимой к считывателю метки

Для чтения и вывода в последовательный порт дампа памяти метки метки

//  Скетч к обзору модуля RFID RC522
 
//  Дамп памяти метки
 
//  3d-diy.ru
 
 
 
// Подключение библиотек
 
#include <SPI.h>

#include <MFRC522.h>

// контакты
 
const int reset    9
 
const int ss    10
 
// Создание экземпляра объекта MFRC522
 
MFRC522 rider(reset, ss);
 
 
 
void setup() {
 
// запуск Serial
 
Serial.begin(9600);
 
// запуск SPI
 
SPI.begin();
 
// инициализация MFRC522
 
rider.PCD_Init();
 
Serial.println("Start...");
 
}
 
 
 
void loop() {
 
// Ожидание
 
if ( ! rider.PICC_IsNewCardPresent())
 
return;
 
// чтение
 
if ( ! rider.PICC_ReadCardSerial())
 
return;
 
// Вывод данных дампа памяти метки
 
rider.PICC_DumpToSerial(&(rider.uid));
 
}
 
 
 
void viewData() {
 
// Версия по для MFRC522
 
byte v = rider.PCD_ReadRegister(rider.VersionReg);
 
Serial.print(F("Version Software: 0x"));
 
Serial.print(v, HEX);
 
}

Запись информации на метку. Считывание данных с метки и запись данных на метку производится поблочно. Разные метки имеют разный размер блока. Для Ultralight C размер блока 4 байта. Скетч 3 – запись данных в память метки в первые два байта 15 блока. Получаем данные по последовательному порту и записываем в метку. Затем выводим содержимое блока в последовательный порт.

//  Скетч к обзору модуля RFID RC522
 
//  Запись данных на метку Ultralight C
 
//  3d-diy.ru
 
 
 
// Подключение библиотек
 
#include <SPI.h>

#include <MFRC522.h>

// контакты
 
const int reset    9
 
const int ss    10
 
// Создание экземпляра объекта MFRC522
 
MFRC522 rider(reset, ss);
 
 
 
// для последовательного порта
 
String inStr0 = "";
 
boolean strComplete0 = false;
 
unsigned int page_serial;
 
unsigned int data_serial;
 
 
 
void setup() {
 
// запуск Serial
 
Serial.begin(9600);
 
// запуск SPI
 
SPI.begin();
 
// инициализация MFRC522
 
rider.PCD_Init();
 
inStr0.reserve(200);
 
}
 
 
 
void loop() {
 
//
 
if (strComplete0) {
 
Serial.println(inStr0);
 
if(!parse_string0())
 
{Serial.print("ERROR1");Serial.println(inStr0);}
 
else {
 
page_serial=max(min(15,page_serial),7);
 
data_serial=min(1000,data_serial);
 
}
 
// очистить строку
 
inStr0 = "";
 
strComplete0 = false;
 
}
 
// Ожидание метки:
 
if (rider.PICC_IsNewCardPresent()) {
 
// чтение карты
 
if (rider.PICC_ReadCardSerial()) {
 
if(data_serial>0 && page_serial>0) {
 
byte buf[] = {0, 0, 0, 0};
 
buf[0]=highByte(data_serial);
 
buf[1]=lowByte(data_serial);
 
//Запись на карту на страницы 8,9 или 10 - 4 байта
 
Serial.println(rider.GetStatusCodeName(
 
rider.MIFARE_Ultralight_Write(page_serial, buf, 4)));
 
// Вывод дампа данных
 
rider.PICC_DumpToSerial(&(rider.uid));
 
}
 
}
 
}
 
delay(2000);
 
 
 
}
 
// SerialEvent
 
void serialEvent() {
 
while (Serial.available()) {
 
// получить очередной байт:
 
char data = (char)Serial.read();
 
// /n - конец передачи
 
if (data == '#')
 
strComplete0 = true;
 
else
 
// добавить в строку
 
inStr0 += data;
 
}
 
}
 
 
 
// парсинг строки последовательного порта Serial
 
boolean parse_string0() {
 
int s1,s2;
 
int length1= inStr0.length();
 
 
 
if(inStr0.charAt(0)!='*')
 
return false;
 
if(inStr0.charAt(length1-1)!=';')
 
return false;
 
//
 
for(int i=1;i<length1;i++)
 
{if(inStr0.charAt(i)==';')
 
{s1=i;break;}
 
}
 
page_serial= inStr0.substring(1,s1).toInt();
 
// action
 
for(int i=s1+1;i<length1;i++)
 
{if(inStr0.charAt(i)==';')
 
{s2=i;break;}
 
}
 
data_serial= inStr0.substring(s1+1,s2).toInt();
 
return true;
 
}

И смотрим запись на карту данных из последовательного порта

rc522.txt · Последнее изменение: 2020/12/17 20:00 — admin

Инструменты страницы