wake-up-neo.net

Wie bekomme ich die UID von RFID in Arduino?

Ich habe ein RFID-RC522-Modul (MF-RC522) und verwende das Arduino-Skizzenprogramm .. Um diese RFID zu verwenden, habe ich die Arduino-Bibliothek MFRC522 heruntergeladen.

Und ich führe den Beispielcode der Bibliothek aus.

Hier ist der Code.

/*
 * 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));
}

Wenn Sie diesen Code ausführen und eine der Karten in den RFID-Leser stecken, werden auf dem seriellen Monitor der Arduino IDE viele Informationen angezeigt. So etwas ... (ich konnte die Bilder nicht posten)

//
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 ...
//

Was ich aber brauche, ist nur die Karten-UID. Dieser Fall ist 84 90 6C A7.

Eigentlich habe ich ein Projekt. Ich möchte die LED einschalten, wenn ich eine bestimmte RFID-Karte einlege. Dazu muss ich die Karten-UID lesen und diese einer Variablen des Arduino-Skizzenprogramms zuweisen.

Ich weiß jedoch nicht, wie ich die UID des RFID-Tags in diesem Fall erhalten kann (Diese Bibliothek und Funktionen sind für mich kompliziert). 

Wenn jemand weiß, wie das geht, helfen Sie mir bitte.

8
Jinha.Kim

Dies ist ungetesteter Code, da mir momentan kein Arduino zur Verfügung steht. Ich hoffe es klappt.

Ersetzen Sie den DumpToSerial-Code in Ihrem Beispiel durch etwas Ähnliches

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 }

7
Hans Kilian

Hier ist eine Funktion, die die UID zurückgibt.

/**
 * 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;
}

Verwenden Sie es so:

if(mfrc522.PICC_IsNewCardPresent()) {
  unsigned long uid = getID();
  if(uid != -1){
    Serial.print("Card detected, UID: "); Serial.println(uid);
  }
}

Basierend auf der Antwort von Thomas Matthews in einer ähnlichen Diskussion .

8
Pwdr

sie können es dadurch bekommen:

mfrc522.uid.uidByte

und es ist ein byte [10]

1
Pontios

Ich habe einen anderen Weg gefunden.

In der Bibliothek MFRC522.cpp in Zeile 1391

Serial.print(F("Card UID:"));

for (byte i = 0; i < uid->size; i++)

Ich habe eine weitere Funktion aus diesem Funktionsaufruf gemacht: PICC_DumpDetailsToSerialUid(Uid *uid) 

Es sieht aus wie: 

 //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();
 }

Sie können es überall dort ablegen, wo Sie es brauchen, ich lege es einfach in die Nähe großer Funktionen, um zu wissen, wo es ist.

Nachdem Sie diese Funktion hinzugefügt haben, müssen Sie in MFRC522.h library in Zeile 409 gehen und hinzufügen 

void PICC_DumpDetailsToSerialUid(Uid *uid);

Nach diesen beiden Bearbeitungen in dieser Bibliothek können Sie die gewünschte Funktion aufrufen. 

Rufen Sie es in Arduino mit: mfrc522.PICC_DumpDetailsToSerialUid(&(mfrc522.uid)); auf, und Sie haben nur eine Funktion für die UID. 

Sie können das mit anderen Funktionen tun, wenn Sie etwas anderes brauchen .... Viel Glück :)

0
athauf94