Считыватель RFID на примере RC522. Принцип работы, подключение Опубликовано: 23.04.2018 В этом эксперименте мы покажем, как плата Arduino получает доступ к данным RFID-карт и брелоков Mifare с помощью RFID-считывателя RC522C. Необходимые компоненты: • контроллер Arduino UNO R3 http://ali.pub/3acvpw • RFID-считыватель с картой и брелком RC522 http://ali.pub/3acvr2 • провода папа-папа http://ali.pub/3acvrg Радиочастотная идентификация (RFID) – это технология автоматической бесконтактной идентификации объектов при помощи радиочастотного канала связи. Базовая система RFID состоит из: • радиочастотной метки; • считывателя информации (ридера); • компьютера для обработки информации. Идентификация объектов производится по уникальному цифровому коду, который считывается из памяти электронной метки, прикрепляемой к объекту идентификации. Считыватель содержит в своем составе передатчик и антенну, посредством которых излучается электромагнитное поле определенной частоты. Попавшие в зону действия считывающего поля радиочастотные метки «отвечают» собственным сигналом, содержащим информацию (идентификационный номер товара, пользовательские данные и т. д.). Сигнал улавливается антенной считывателя, информация расшифровывается и передается в компьютер для обработки. Подавляющее большинство современных систем контроля доступа (СКД) использует в качестве средств доступа идентификаторы, работающие на частоте 125 кГц. Это проксимити-карты доступа (только чтение), самыми распространенными являются карты EM-Marin, а также HID, Indala. Карты этого стандарта являются удобным средством открывания дверей и турникетов. Но не более. Эти карты не обладают никакой защищенностью, легко копируются и подделываются и, соответственно, ничего не дают для защиты объекта от несанкционированного проникновения. Настоящую защиту от копирования и подделки обеспечивают такие идентификаторы, в чипах которых реализована криптографическая защита. Это бесконтактные смарт-карты, работающие на частоте 13,56 МГц, наиболее распространенными из них являются карты Mifare®. В картах этих стандартов криптозащита организована на высоком уровне, и подделка таких карт практически невозможна. Модуль RC522 – RFID-модуль 13,56 МГц с SPI-интерфейсом. В комплекте к модулю идут 2 RFID-метки – в виде карты и брелока. Основные характеристики: • основан на микросхеме MFRC522; • напряжение питания: 3,3 В; • потребляемый ток: 13–26 мА; • рабочая частота: 13,56 MГц; • дальность считывания: 0~60 мм; • интерфейс: SPI, максимальная скорость передачи 10 МБит/с; • размер: 40×60 мм; • чтение и запись RFID-меток. Напишем скетч считывания с карты и вывода в последовательный порт Arduino UID (уникальный идентификационный номер) RFID-метки (карты или брелока). При написании скетча будем использовать библиотеку MFRC522 (https://github.com/miguelbalboa/rfid). Содержимое скетча показано в листинге 28.1. // Подключение библиотек #include <SPI.h> #include <MFRC522.h> // константы подключения контактов SS и RST #define RST_PIN 9 #define SS_PIN 10 // Инициализация MFRC522 MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. void setup() { Serial.begin(9600); // инициализация последовательного порта SPI.begin(); // инициализация SPI mfrc522.PCD_Init(); // инициализация MFRC522 } void loop() { if ( ! mfrc522.PICC_IsNewCardPresent()) return; // чтение карты if ( ! mfrc522.PICC_ReadCardSerial()) return; // показать результат чтения UID и тип метки Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); Serial.print(F("PICC type: ")); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); delay(2000); } // Вывод результата чтения данных в HEX-виде void dump_byte_array(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(bufferi < 0x10 ? " 0" : " "); Serial.print(bufferi, HEX); } } Порядок подключения: 1. Подключаем модули RFID-считывателя RC522 к плате Arduino по схеме на рис. 28.1. 2. Загружаем в плату Arduino скетч из листинга 28.1. Открываем монитор последовательного порта. 3. Подносим метку (карту или брелок) к считывателю и видим вывод в последовательный порт данных метки UID и тип Метки Mirafe позволяют записывать на них информацию. В следующем скетче мы организуем на карте счетчик, который будет инкрементироваться при поднесении карты к считывателю. В последовательный порт будем выводить показания счетчика. Содержимое скетча показано в листинге 28.2. // Подключение библиотек #include <SPI.h> #include <MFRC522.h> // константы подключения контактов SS и RST #define RST_PIN 9 #define SS_PIN 10 // Инициализация MFRC522 MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. MFRC522:MIFARE_Key key; byte sector = 1; byte blockAddr = 4; byte dataBlock = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; byte trailerBlock = 7; byte status; byte buffer18; byte size = sizeof(buffer); void setup() { Serial.begin(9600); // инициализация последовательного порта SPI.begin(); // инициализация SPI mfrc522.PCD_Init(); // инициализация MFRC522 // Значение ключа (A или B) – FFFFFFFFFFFFh значение с завода for (byte i = 0; i < 6; i++) key.keyBytei = 0xFF; } void loop() { if ( ! mfrc522.PICC_IsNewCardPresent()) return; // чтение карты if ( ! mfrc522.PICC_ReadCardSerial()) return; // показать результат чтения UID и тип метки Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); Serial.print(F("PICC type: ")); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); // Чтение данных из блока 4 Serial.print(F("Reading data from block ")); Serial.print(blockAddr); Serial.println(F(" ...")); Serial.print(F("Data for count ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 2); Serial.println(); Serial.println(); for (byte i = 0; i < 16; i++) // запись в buffer dataBlocki=bufferi; // получение байт счетчика (0 и 1) int count1=(buffer0«8)+buffer1; Serial.print("count1=");Serial.println(count1); count1=count1+1; // инкремент счетчика dataBlock0=highByte(count1); dataBlock1=lowByte(count1); // Аутентификация key B Serial.println(F("Authenticating again using key B...")); // Запись данных в блок Serial.print(F("Writing data into block ")); Serial.print(blockAddr); Serial.println(F(" ...")); dump_byte_array(dataBlock, 2); Serial.println(); } // Вывод результата чтения данных в HEX-виде void dump_byte_array(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(bufferi < 0x10 ? " 0" : " "); Serial.print(bufferi, HEX); } } Порядок подключения на последнем скриншоте

Теги: Arduino RFID RC522

Теги других блогов: Arduino RFID RC522