Как использовать RFID-RC522 с Arduino?
Я работаю над проектом для своего местного Makerspace, у нас ограниченный бюджет, поэтому я надеялся использовать дешевые считыватели RFID/NFC RFID-RC522 на eBay. Я получил пару плат на базе SPI, они работают, однако примеры кода для них ограничены.
Я нашел несколько разных библиотек и остановился на этой: https://github.com/ljos/MFRC522
Проблема в том, что весь код, доступный в Интернете, похоже, создан на основе кода Python каких-то китайцев, который люди перевели и взломали в библиотеку Arduino.
Код работает, но карты Mifare должны иметь 4, 7 или 10-байтовые UID, а пример/библиотека возвращает 5-байтовый серийный номер.
Документации нет, а техническая таблица NXP непонятна... Кроме того, кажется, что она работает с большинство карт, но не работает с картами Mastercard PayWave, соответствующими стандарту ISO 14443. Более дорогой считыватель RDM880, основанный на MFRC500, работает нормально и имеет хорошую библиотеку, но его стоимость делает реализацию невозможной.
Итак, может ли кто-нибудь помочь мне получить это устройство на базе NXP MFRC522, считывающее UID со всех карт ISO 14443?
#include <SPI.h>
#include <MFRC522.h>
#define RFID_SS 10
#define RFID_RST 5
MFRC522 rfid( RFID_SS, RFID_RST );
void setup() {
SPI.begin();
Serial.begin(115200);
rfid.begin();
}
void loop() {
byte data[MAX_LEN];
byte uid[5];
if ( rfid.requestTag( MF1_REQIDL, data ) == MI_OK ) {
if ( rfid.antiCollision( data ) == MI_OK ) {
memcpy( uid, data, 5 );
for ( int i = 0; i < 5; i++ ) {
Serial.print( uid[i], HEX );
Serial.print( ' ' );
}
Serial.println();
}
}
}
@unknowndomain, 👍11
Обсуждение1 ответ
Пятый байт из RC522 — это просто контрольная сумма.
Например, возможное возвращаемое значение (взято из https://github.com/miguelbalboa/rfid /issues/604#issuecomment-1885042556 ) — это:
8Б 65 66 Б9 31
и если вы выполните двоичное ИЛИ первых четырех чисел, вы получите именно пятое:
In [1]: hex(int("8B", 16)^int("65", 16)^int("66", 16)^int("B9", 16))[2:]
Out[1]: '31'
(Действительно, если сравнить первые четыре байта от RC522 с четырьмя байтами от другого считывателя, они должны совпасть)
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- Как остановить SoftwareSerial от получения данных и повторно включить его в какой-то другой момент?
- Использование прерываний с RC522
- Проблема совместного использования MISO с несколькими RFID-считывателями RC522
- rfid_default_keys проверить с помощью RC522
- Использование RFID-RC522 с другими контактами
- MFRC522 не сканируется карта
- Эмуляция стандартного периферийного USB-устройства Mifare с помощью RFID-RC522
Вероятно, это не проблема, но ваш массив uid имеет длину 5. Пробовали ли вы использовать массив большего размера, поскольку вам нужен результат размером 10 байт?, @asheeshr
Да, я это сделал, но это не помогло, на самом деле другая программа чтения, похоже, возвращает только 4-байтовые числа, и это другая марка с приличным примером кода, что очень сбивает с толку., @unknowndomain