Bauteile · 5 Min. Lesezeit

RFID RC522 verwenden: Karten lesen mit Arduino und ein Türschloss mit Karte

Wie funktioniert das RFID-Modul RC522? 13,56-MHz-Karten und Schlüsselanhänger, SPI-Anschluss mit 3,3 V, MFRC522-Bibliothek, UID lesen, berechtigte Karten prüfen, Servo-Türschloss, ESP32 und Pico.

RFID (Radio Frequency IDentification) ist eine Technik, mit der eine Karte oder ein Schlüsselanhänger per Funk erkannt wird, ohne den Leser zu berühren. Fahrkarten, Firmenausweise, Diebstahlsicherungen im Handel und Chips bei Haustieren nutzen RFID. Der RC522 ist ein günstiges Lesemodul für 13,56 MHz, das meist mit einer weißen Karte und einem blauen Schlüsselanhänger verkauft wird. Er ist die Grundlage vieler Projekte – vom Türschloss mit Karte bis zum Anwesenheitssystem.

RC522 RFID-Lesemodul
RC522 RFID-Modul: Die Kupferbahn auf der Platine ist die Antenne des Lesers; daneben eine lesbare Karte und ein Schlüsselanhänger.

Wie funktioniert RFID?

Die Kupferantenne auf der Leserplatine erzeugt ein Magnetfeld mit 13,56 MHz. In der Karte oder im Anhänger stecken eine dünne Spule und ein winziger Chip, aber keine Batterie. Kommt die Karte ins Feld, versorgt die in der Spule induzierte Energie den Chip, und dieser sendet seine Kennung und Daten zurück, indem er das Feld ganz leicht verändert. Deshalb funktionieren Karten jahrelang ohne Aufladen – die Lesereichweite beträgt mit dem RC522 aber nur etwa 3–5 Zentimeter.

Die Karten in Bausätzen sind meist vom Typ MIFARE Classic 1K: 1 KB Speicher in 16 Sektoren, jeder Sektor aus 4 Blöcken zu 16 Byte. Jede Karte hat eine ab Werk geschriebene UID (eindeutige Kennung), meist 4 Byte lang. Die meisten einfachen Projekte erkennen eine Karte an dieser UID, statt Daten auf die Karte zu schreiben.

Technische Daten des RC522

MerkmalWert
Betriebsfrequenz13,56 MHz
Versorgung3,3 V (nicht 5 V)
Stromaufnahme13–26 mA
LesereichweiteEtwa 3–5 cm (je nach Karte)
Unterstützte KartenMIFARE Classic 1K/4K, Ultralight, NTAG (ISO 14443A)
SchnittstelleSPI (der Chip kann auch I2C und UART)

Anschluss des RC522 (SPI)

Der RC522 kommuniziert über SPI. SCK, MOSI und MISO müssen an die festen SPI-Pins des jeweiligen Boards; SDA (SS) und RST kannst du an beliebige Digitalpins legen, solange der Code passt. Die SPI-Pins deines Boards findest du im Werkzeug Pinout.

RC522-PinArduino UnoArduino MegaESP32Raspberry Pi Pico
SDA (SS)D1053GPIO 5GP17
SCKD1352GPIO 18GP18
MOSID1151GPIO 23GP19
MISOD1250GPIO 19GP16
IRQNicht verbundenNicht verbundenNicht verbundenNicht verbunden
GNDGNDGNDGNDGND
RSTD95GPIO 22GP20
3.3V3.3V3.3V3V33V3
Schließe den RC522 niemals an den 5V-Pin an; das Modul wird mit 3,3 V versorgt, und 5 V können es dauerhaft zerstören. Viele hängen ihn direkt an die 5-V-Datenpins des Uno, und meist funktioniert das, der Chip ist aber offiziell nicht 5-V-tolerant. Für dauerhaft laufende Projekte ist ein Pegelwandler sicherer; ESP32 und Pico arbeiten ohnehin mit 3,3 V und haben dieses Problem nicht.

Die MFRC522-Bibliothek und die UID einer Karte lesen

Suche im Bibliotheksverwalter nach MFRC522 und installiere die Bibliothek von GithubCommunity (miguelbalboa). Der folgende Code gibt die UID jeder vorgehaltenen Karte hexadezimal (HEX) im seriellen Monitor aus:

Arduino (C++)
1#include <SPI.h>
2#include <MFRC522.h>
3
4const int SS_PIN = 10;
5const int RST_PIN = 9;
6
7MFRC522 rfid(SS_PIN, RST_PIN);
8
9void setup() {
10  Serial.begin(9600);
11  SPI.begin();
12  rfid.PCD_Init();
13  Serial.println("Kartı okutun / scan a card");
14}
15
16void loop() {
17  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;  // kart yok / no card
18
19  Serial.print("UID:");
20  for (byte i = 0; i < rfid.uid.size; i++) {
21    Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
22    Serial.print(rfid.uid.uidByte[i], HEX);
23  }
24  Serial.println();
25
26  rfid.PICC_HaltA();        // kartı beklemeye al / halt the card
27  rfid.PCD_StopCrypto1();
28}
Notiere dir die UIDs deiner Karte und deines Anhängers; im nächsten Schritt nutzt du sie als "berechtigte Karten". Wird keine Karte gelesen, lade Datei > Beispiele > MFRC522 > DumpInfo hoch; zeigt der serielle Monitor "Firmware Version: 0x0" oder "0xFF", liegt das Problem an der Verkabelung.

Berechtigte Karten prüfen

Vergleichst du die gelesene UID mit einem gespeicherten Wert, kannst du entscheiden, ob die Karte berechtigt ist. Das Beispiel unten prüft eine einzelne berechtigte Karte; für mehrere Karten machst du das Array zweidimensional und vergleichst in einer Schleife:

Arduino (C++)
1// yukarıdaki tanımlar ve setup() aynen / definitions and setup() as above
2byte allowed[4] = {0xDE, 0xAD, 0xBE, 0xEF};   // kendi kartının UID'si / your card's UID
3
4bool isAllowed() {
5  if (rfid.uid.size != 4) return false;
6  for (byte i = 0; i < 4; i++) {
7    if (rfid.uid.uidByte[i] != allowed[i]) return false;
8  }
9  return true;
10}
11
12void loop() {
13  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
14  Serial.println(isAllowed() ? "İzin verildi / access granted" : "Reddedildi / access denied");
15  rfid.PICC_HaltA();
16  rfid.PCD_StopCrypto1();
17}

Türschloss mit Karte und Servo

Bauen wir ein Schloss, das bei einer berechtigten Karte einen Servo um 90 Grad dreht und 3 Sekunden öffnet, bei einer unberechtigten Karte aber kurz mit einem Buzzer warnt. Zum Servoanschluss siehe Was ist ein Servomotor?, zum Warnton Was ist ein Buzzer? Beim Uno nutzt die Servo-Bibliothek Timer1 und tone() Timer2, beide arbeiten also problemlos zusammen.

Arduino (C++)
1#include <SPI.h>
2#include <MFRC522.h>
3#include <Servo.h>
4
5MFRC522 rfid(10, 9);       // SS, RST
6Servo lock;
7const int BUZZER_PIN = 8;
8byte allowed[4] = {0xDE, 0xAD, 0xBE, 0xEF};
9
10void setup() {
11  SPI.begin();
12  rfid.PCD_Init();
13  lock.attach(6);
14  lock.write(0);                          // kilitli / locked
15}
16
17void loop() {
18  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
19  bool ok = rfid.uid.size == 4 && memcmp(rfid.uid.uidByte, allowed, 4) == 0;
20  if (ok) {
21    lock.write(90);                       // kilidi aç / unlock
22    delay(3000);
23    lock.write(0);                        // tekrar kilitle / lock again
24  } else {
25    tone(BUZZER_PIN, 400, 600);           // reddedildi sesi / denied beep
26  }
27  rfid.PICC_HaltA();
28  rfid.PCD_StopCrypto1();
29}
Ein Schloss, das nur die UID prüft, eignet sich für Lern- und Hobbyprojekte, bietet aber keine echte Sicherheit: UIDs von MIFARE-Classic-Karten lassen sich mit günstigen Geräten kopieren. Für eine echte Tür verlangst du zusätzlich zur Karte eine PIN oder prüfst Daten in verschlüsselten Sektoren.

RC522 mit ESP32 und Raspberry Pi Pico

Am ESP32 läuft dieselbe MFRC522-Bibliothek; nutze die VSPI-Pins und lege das Objekt als MFRC522 rfid(5, 22); an. Da der ESP32 mit 3,3 V arbeitet, passt er perfekt zum RC522, und dank WLAN kannst du gelesene Karten im Internet protokollieren. Für MicroPython auf dem Pico kopierst du eine mfrc522.py (zum Beispiel die Bibliothek von danjperron) auf den Pico und nutzt sie so:

Python
1from mfrc522 import MFRC522      # mfrc522.py Pico'da olmalı / mfrc522.py must be on the Pico
2import time
3
4reader = MFRC522(spi_id=0, sck=18, miso=16, mosi=19, cs=17, rst=20)
5
6while True:
7    reader.init()
8    stat, tag_type = reader.request(reader.REQIDL)
9    if stat == reader.OK:
10        stat, uid = reader.SelectTagSN()
11        if stat == reader.OK:
12            print("UID:", "".join("{:02X}".format(b) for b in uid))
13    time.sleep_ms(200)

RFID-Arten: Welche Karten liest der RC522?

ArtFrequenzLesereichweiteTypische Anwendung
LF-RFID125 kHzEtwa 10 cmÄltere Zugangskarten, Haustierchips (EM4100)
HF-RFID / NFC13,56 MHz1–10 cmFahrkarten, MIFARE, NFC im Smartphone
UHF-RFID860–960 MHzMehrere MeterLager-, Logistik- und Handelsetiketten

Der RC522 liest nur HF-Karten mit 13,56 MHz. Die 125-kHz-Karten, die an vielen Hauseingängen verwendet werden (oft mit "EM" beschriftet), kann der RC522 nicht lesen; dafür braucht man einen 125-kHz-Leser wie den RDM6300. NFC ist eine Form von 13,56-MHz-RFID, die Smartphones lesen können; der RC522 kann die UID von NTAG-Aufklebern lesen.

Projektideen mit RFID

  • Tür- oder Schubladenschloss mit Karte: ein Schloss, das sich mit berechtigter Karte öffnet und bei unberechtigter warnt.
  • Anwesenheitssystem: jeder Karte einen Namen zuordnen und die Ankunftszeit auf SD-Karte oder im Internet speichern.
  • Begrüßungsanzeige: beim Vorhalten einer Karte "Willkommen" und den Namen auf einem LCD zeigen; für das Display siehe I2C-LCD-Display verwenden.
  • Geschichtenbox: jeder Karte eine andere Audiodatei zuordnen und mit einem DFPlayer ein Hörspielzeug für Kinder bauen.
  • Intelligenter Futterspender: Futter ausgeben, wenn der Anhänger am Halsband eines Haustiers gelesen wird.
  • Kartenspiel: ein Quiz- oder Memory-Spiel mit Karten aufbauen.

Typische Fehler und ihre Lösungen

  • Keine Karte wird gelesen und die Version ist 0x0: Die SPI-Kabel stecken an falschen Pins; prüfe besonders MOSI und MISO.
  • Modul an 5V: Der RC522 braucht 3,3 V; 5 V können ihn zerstören.
  • 125-kHz-Karte lesen wollen: Der RC522 sieht diese Karten nicht; nimm eine 13,56-MHz-Karte.
  • Karte zu weit weg oder auf Metall: Halte die Karte auf 1–3 cm heran; Metallflächen stören das Feld.
  • Dieselbe Karte wird immer wieder gelesen: PICC_HaltA() fehlt; versetze die Karte nach dem Lesen in den Ruhezustand.
  • Lange Kabel: SPI-Signale leiden bei langen Leitungen; halte sie unter 20 cm.

RFID beantwortet die Frage "Wer bist du?" mit einer Berührung und bereichert damit Sicherheits- und Automatisierungsprojekte enorm. In der BlueGrays-App findest du Projekte zum Auslesen von RFID-Werten, einen Kartenleser mit LCD und ein RFID-Türschloss mit Servo Schritt für Schritt mit Schaltplänen und Code.

Häufige Fragen

Aus wie vielen Zentimetern liest der RC522 eine Karte?

Mit den Karten und Anhängern aus Bausätzen meist aus 3–5 cm. Kartentyp, Antennengröße und Metall in der Nähe beeinflussen die Reichweite. Für größere Entfernungen braucht man UHF-Leser, die mit anderen Frequenzen arbeiten.

Welche Karten liest der RC522? Liest er 125-kHz-Karten?

Der RC522 liest nur 13,56-MHz-Karten nach ISO 14443A, etwa MIFARE Classic 1K/4K, Ultralight und NTAG. Die an Hauseingängen verbreiteten 125-kHz-EM-Karten kann er nicht lesen; dafür nutzt man einen 125-kHz-Leser wie den RDM6300.

Funktioniert der RC522 mit 5V?

Nein, der RC522 muss mit 3,3 V versorgt werden. Am 5V-Pin kann das Modul Schaden nehmen. Die Datenpins vertragen die 5-V-Signale des Uno meistens, da der Chip aber offiziell nicht 5-V-tolerant ist, empfiehlt sich für dauerhafte Projekte ein Pegelwandler.

Kann sich die UID einer Karte ändern oder kopiert werden?

Die UID einer normalen Karte wird ab Werk geschrieben und ändert sich nicht. Es gibt aber "Magic"-Karten mit änderbarer UID, auf die MIFARE-Classic-UIDs kopiert werden können. Ein System, das nur der UID vertraut, bietet daher keine echte Sicherheit.

Kann ich mit dem RC522 Daten auf eine Karte schreiben?

Ja. Bei MIFARE-Classic-Karten ist jeder Sektor mit einem Schlüssel geschützt; bei neuen Karten lautet der Standardschlüssel FF FF FF FF FF FF. Mit dem Beispiel ReadAndWrite der MFRC522-Bibliothek schreibst du Daten in Blöcke und liest sie wieder aus. Der letzte Block jedes Sektors enthält die Schlüssel, dort solltest du keine beliebigen Daten schreiben.

Kann ich mein Smartphone wie eine Karte am RC522 nutzen?

Meist nicht zuverlässig. iPhones geben NFC nicht für Kartenemulation frei, und Android-Telefone senden bei jedem Vorhalten eine andere zufällige UID. Für ein System mit Smartphone ist es besser, mit dem Telefon einen NFC-Tag zu lesen und das Ergebnis per WLAN oder Bluetooth ans Board zu senden.

Alle Projekte ansehen
RFID-Werte lesen
#53Anfänger
Premium

RFID-Werte lesen

Projekt, das die Seriennummer im Serial Monitor ausliest, wenn die Karte oder der Schlüsselanhänger mit dem RC522 RFID-Modul angesprochen wird. Vermittelt die Grundlagen der SPI-Kommunikation und des

4.7(47)
61
ESP32 RFID-Kartenleser RC522 (mit LCD)
#123Mittel
Premium

ESP32 RFID-Kartenleser RC522 (mit LCD)

In diesem Projekt schließen wir das MFRC522-basierte RC522-RFID-Modul über SPI an den ESP32 an und lesen die UID der Karte bzw. des Tags aus. Dies bildet die Grundlage für Anwendungen wie Türschlösser, Mitgliedersysteme und Zugangskontrollen. Wir zeigen die gelesene UID auf einem LCD-Display an und geben ein Beispiel für den Abgleich mit autorisierten Karten. **ACHTUNG:** Das RC522 arbeitet nur mit **3,3 V**; bei 5 V brennt das Modul durch!

4.8(21)
38
ESP32-RFID-Türschloss (RC522 + Servo + OLED + Summer + LED)
#137Fortgeschritten
Premium

ESP32-RFID-Türschloss (RC522 + Servo + OLED + Summer + LED)

Mit dem ESP32, einem RC522-RFID-Modul, einem SG90-Servomotor, einem SSD1306-OLED-Display, einem aktiven Summer und zwei LEDs bauen wir ein intelligentes Türschloss. Wenn eine Karte eingelesen wird, wird die UID mit der Liste der autorisierten Karten verglichen, die im Code definiert ist – ist die Karte autorisiert, wird das Schloss durch Drehen des Servomotors entriegelt (grüne LED + 2 kurze Pieptöne) und nach 5 Sekunden automatisch wieder verriegelt. Bei einer nicht autorisierten Karte leuchtet

4.8(9)
15
Intelligenter elektronischer Safe
#92Fortgeschritten
Premium

Intelligenter elektronischer Safe

Smart Electronic Safe ist ein passwortgeschütztes Sicherheitssystem auf Arduino-Basis. Es schaltet den servomotorgesteuerten Schließmechanismus mit dem über die 4x4-Tastatur eingegebenen 4-stelligen P

4.7(42)
63
4x4 Tastatur LCD Display Passwort Anwendung
#64Fortgeschritten
Premium

4x4 Tastatur LCD Display Passwort Anwendung

Sicherheitsprojekt, das die Tür mit einem Servo öffnet, wenn das Passwort mit einer 4x4-Tastatur richtig eingegeben wird, und eine rote LED aufleuchtet, wenn es falsch ist. Lehrt Passwortvergleich und

4.8(57)
75
ESP32 Bewegungsalarmsystem (PIR + Buzzer + LED + Telegram)
#145Fortgeschritten
Premium

ESP32 Bewegungsalarmsystem (PIR + Buzzer + LED + Telegram)

Ein intelligentes Sicherheitsalarmsystem, das Buzzer und LED aktiviert, sobald der PIR-Sensor Bewegung erkennt, und gleichzeitig eine sofortige Benachrichtigung per Telegram an den Besitzer sendet. Ein 30-sekündiger Cooldown verhindert Fehlalarme. Geeignet für Heimsicherheit, Garagenüberwachung, Lagerräume oder Arbeitszimmer. Mit ESP32-CAM sind Foto-Benachrichtigungen möglich; mit dem klassischen ESP32 DevKit V1 werden Textbenachrichtigungen gesendet.

0.0(0)
8
ESP32-Bewegungsmelder
#140Mittel
Premium

ESP32-Bewegungsmelder

In diesem Projekt, das mit einem ESP32 und einem PIR-Sensor realisiert wurde, wird bei Bewegungserkennung ein Summer aktiviert, der einen akustischen Alarm auslöst. Es handelt sich um eine einfache und kostengünstige Sicherheitssystem-Anwendung. (Die Abbildungen dienen nur zur Veranschaulichung; bitte ordnen Sie sie den Texten zu.)

4.4(10)
15
ESP32 I2C-LCD-Display (16×2)
#119Mittel
Premium

ESP32 I2C-LCD-Display (16×2)

In diesem Projekt zeigen wir Text an, indem wir ein 16x2-Zeichen-LCD-Display über das I2C-Protokoll an den ESP32 anschließen. Dank I2C können wir das Display mit nur zwei Datenpins (SDA und SCL) steuern; die Verschwendung von 6+ Pins bei einer klassischen parallelen Verbindung entfällt. Der Code schreibt in die erste Zeile eine feste Meldung und in die zweite Zeile einen Zähler, der sich jede Sekunde erhöht. Außerdem lassen wir zu Beginn den I2C-Scanner laufen und geben die Adresse des Displays

4.9(22)
39

Lerne, wie RFID batterielose Karten liest, wie du den RC522 sicher an den Arduino anschließt, die UID einer Karte liest und ein Servo-Türschloss baust, das sich mit einer berechtigten Karte öffnet.

RFID RC522 verwenden: Karten lesen mit Arduino und ein Türschloss mit Karte | BlueGrays