如何在Arduino中获取RFID的UID?
How to get the UID of RFID in Arduino?
我有一个 RFID-RC522 (MF-RC522) 模块,我正在使用 Arduino 草图程序。
为了使用这个 RFID,我下载了 Arduino MFRC522 库。
我运行库的示例代码。
这是代码。
/*
* MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT.
* The library file MFRC522.h has a wealth of useful info. Please read it.
* The functions are documented in MFRC522.cpp.
*
* Based on code Dr.Leong ( WWW.B2CQSHOP.COM )
* Created by Miguel Balboa (circuitito.com), Jan, 2012.
* Rewritten by Søren Thing Andersen (access.thing.dk), fall of 2013 (Translation to English, refactored, comments, anti collision, cascade levels.)
* Released into the public domain.
*
* Sample program showing how to read data from a PICC using a MFRC522 reader on the Arduino SPI interface.
*----------------------------------------------------------------------------- empty_skull
* Aggiunti pin per arduino Mega
* add pin configuration for arduino mega
* http://mac86project.altervista.org/
----------------------------------------------------------------------------- Nicola Coppola
* Pin layout should be as follows:
* Signal Pin Pin Pin
* Arduino Uno Arduino Mega MFRC522 board
* ------------------------------------------------------------
* Reset 9 5 RST
* SPI SS 10 53 SDA
* SPI MOSI 11 51 MOSI
* SPI MISO 12 50 MISO
* SPI SCK 13 52 SCK
*
* The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com.
*/
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
Serial.println("Scan PICC to see UID and type...");
}
void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
// Dump debug info about the card. PICC_HaltA() is automatically called.
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}
当我运行此代码并将其中一张卡放入RFID reader时,Arduino IDE 的串行监视器上显示了很多信息。像这样的东西......
(我无法 post 图片)
//
Scan PICC to see UID and type...
Card UID : 84 90 6C A7
PICC type : MIFARE 1KB
Sector Block 0 1 2 3 4 5 6 7 ...
15 63 00 00 00 00 ...
//
但是我需要的只是卡的UID。本案为84 90 6C A7.
其实我有项目。如果我放了一张 RFID 卡,我想打开 LED。为此,我需要读取卡 UID 并将其分配给 Arduino sketch 程序上的某个变量。
但我不知道在这种情况下如何获取 RFID 标签的 UID(这个库和函数对我来说很复杂)。
如果有人知道怎么做,请帮助我。
这是未经测试的代码,因为我现在没有可用的 Arduino。希望有用。
将示例中的 DumpToSerial 代码替换为类似这样的代码
if (mfrc522.uid.uidByte[0] == 0x84 &&
mfrc522.uid.uidByte[1] == 0x90 &&
mfrc522.uid.uidByte[2] == 0x6c &&
mfrc522.uid.uidByte[3] == 0xa7) {
// turn your LED on
}
这是一个 returns UID 的函数。
/**
* mfrc522.PICC_IsNewCardPresent() should be checked before
* @return the card UID
*/
unsigned long getID(){
if ( ! mfrc522.PICC_ReadCardSerial()) { //Since a PICC placed get Serial and continue
return -1;
}
unsigned long hex_num;
hex_num = mfrc522.uid.uidByte[0] << 24;
hex_num += mfrc522.uid.uidByte[1] << 16;
hex_num += mfrc522.uid.uidByte[2] << 8;
hex_num += mfrc522.uid.uidByte[3];
mfrc522.PICC_HaltA(); // Stop reading
return hex_num;
}
这样使用:
if(mfrc522.PICC_IsNewCardPresent()) {
unsigned long uid = getID();
if(uid != -1){
Serial.print("Card detected, UID: "); Serial.println(uid);
}
}
基于 Thomas Matthews 在 similar discussion.
中的回答
你可以这样做:
mfrc522.uid.uidByte
而且是一个字节[10]
我找到了另一种方法。
在图书馆 MFRC522.cpp 第 1391 行
Serial.print(F("Card UID:"));
for (byte i = 0; i < uid->size; i++)
我用这个函数调用创建了另一个函数:PICC_DumpDetailsToSerialUid(Uid *uid)
看起来像:
//This is just for read UID!
void MFRC522::PICC_DumpDetailsToSerialUid(Uid *uid){
Serial.print(F("Card JUST UID :"));
for (byte i = 0; i < uid->size; i++) {
if(uid->uidByte[i] < 0x10)
Serial.print(F(" 0"));
else
Serial.print(F(" "));
Serial.print(uid->uidByte[i], HEX);
}
Serial.println();
}
你可以把它放在任何你需要的地方,我只是把它放在大功能附近,以便知道在哪里。
添加该函数后,您需要进入 MFRC522.h 库的 行 409 并添加
void PICC_DumpDetailsToSerialUid(Uid *uid);
在该库中进行这两次编辑后,您可以在需要的地方调用该函数。
在 Arduino 中通过以下方式调用它:mfrc522.PICC_DumpDetailsToSerialUid(&(mfrc522.uid));
并且您只有一个用于 uid 的函数。
如果您需要其他功能,您可以使用其他功能来实现....祝您好运:)
我有一个 RFID-RC522 (MF-RC522) 模块,我正在使用 Arduino 草图程序。 为了使用这个 RFID,我下载了 Arduino MFRC522 库。
我运行库的示例代码。
这是代码。
/*
* MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT.
* The library file MFRC522.h has a wealth of useful info. Please read it.
* The functions are documented in MFRC522.cpp.
*
* Based on code Dr.Leong ( WWW.B2CQSHOP.COM )
* Created by Miguel Balboa (circuitito.com), Jan, 2012.
* Rewritten by Søren Thing Andersen (access.thing.dk), fall of 2013 (Translation to English, refactored, comments, anti collision, cascade levels.)
* Released into the public domain.
*
* Sample program showing how to read data from a PICC using a MFRC522 reader on the Arduino SPI interface.
*----------------------------------------------------------------------------- empty_skull
* Aggiunti pin per arduino Mega
* add pin configuration for arduino mega
* http://mac86project.altervista.org/
----------------------------------------------------------------------------- Nicola Coppola
* Pin layout should be as follows:
* Signal Pin Pin Pin
* Arduino Uno Arduino Mega MFRC522 board
* ------------------------------------------------------------
* Reset 9 5 RST
* SPI SS 10 53 SDA
* SPI MOSI 11 51 MOSI
* SPI MISO 12 50 MISO
* SPI SCK 13 52 SCK
*
* The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com.
*/
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
Serial.println("Scan PICC to see UID and type...");
}
void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
// Dump debug info about the card. PICC_HaltA() is automatically called.
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}
当我运行此代码并将其中一张卡放入RFID reader时,Arduino IDE 的串行监视器上显示了很多信息。像这样的东西...... (我无法 post 图片)
//
Scan PICC to see UID and type...
Card UID : 84 90 6C A7
PICC type : MIFARE 1KB
Sector Block 0 1 2 3 4 5 6 7 ...
15 63 00 00 00 00 ...
//
但是我需要的只是卡的UID。本案为84 90 6C A7.
其实我有项目。如果我放了一张 RFID 卡,我想打开 LED。为此,我需要读取卡 UID 并将其分配给 Arduino sketch 程序上的某个变量。
但我不知道在这种情况下如何获取 RFID 标签的 UID(这个库和函数对我来说很复杂)。
如果有人知道怎么做,请帮助我。
这是未经测试的代码,因为我现在没有可用的 Arduino。希望有用。
将示例中的 DumpToSerial 代码替换为类似这样的代码
if (mfrc522.uid.uidByte[0] == 0x84 &&
mfrc522.uid.uidByte[1] == 0x90 &&
mfrc522.uid.uidByte[2] == 0x6c &&
mfrc522.uid.uidByte[3] == 0xa7) {
// turn your LED on
}
这是一个 returns UID 的函数。
/**
* mfrc522.PICC_IsNewCardPresent() should be checked before
* @return the card UID
*/
unsigned long getID(){
if ( ! mfrc522.PICC_ReadCardSerial()) { //Since a PICC placed get Serial and continue
return -1;
}
unsigned long hex_num;
hex_num = mfrc522.uid.uidByte[0] << 24;
hex_num += mfrc522.uid.uidByte[1] << 16;
hex_num += mfrc522.uid.uidByte[2] << 8;
hex_num += mfrc522.uid.uidByte[3];
mfrc522.PICC_HaltA(); // Stop reading
return hex_num;
}
这样使用:
if(mfrc522.PICC_IsNewCardPresent()) {
unsigned long uid = getID();
if(uid != -1){
Serial.print("Card detected, UID: "); Serial.println(uid);
}
}
基于 Thomas Matthews 在 similar discussion.
中的回答你可以这样做:
mfrc522.uid.uidByte
而且是一个字节[10]
我找到了另一种方法。
在图书馆 MFRC522.cpp 第 1391 行
Serial.print(F("Card UID:"));
for (byte i = 0; i < uid->size; i++)
我用这个函数调用创建了另一个函数:PICC_DumpDetailsToSerialUid(Uid *uid)
看起来像:
//This is just for read UID!
void MFRC522::PICC_DumpDetailsToSerialUid(Uid *uid){
Serial.print(F("Card JUST UID :"));
for (byte i = 0; i < uid->size; i++) {
if(uid->uidByte[i] < 0x10)
Serial.print(F(" 0"));
else
Serial.print(F(" "));
Serial.print(uid->uidByte[i], HEX);
}
Serial.println();
}
你可以把它放在任何你需要的地方,我只是把它放在大功能附近,以便知道在哪里。
添加该函数后,您需要进入 MFRC522.h 库的 行 409 并添加
void PICC_DumpDetailsToSerialUid(Uid *uid);
在该库中进行这两次编辑后,您可以在需要的地方调用该函数。
在 Arduino 中通过以下方式调用它:mfrc522.PICC_DumpDetailsToSerialUid(&(mfrc522.uid));
并且您只有一个用于 uid 的函数。
如果您需要其他功能,您可以使用其他功能来实现....祝您好运:)