Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

ESP32 mit RFID-RC522 (MFRC522) Modul

Posted on 1. Juni 202210. März 2024 by Stefan Draeger

In diesem Beitrag möchte ich dir zeigen, wie du ein RFID Modul vom Typ MFRC522 am ESP32 per SPI programmierst.

Programmieren & Anschluss eines RFID-Moduls am ESP32
Programmieren & Anschluss eines RFID-Moduls am ESP32

Das RFID Modul habe ich dir bereits für die Mikrocontroller der Arduino-Familie in folgenden Beiträgen gezeigt:

  • Arduino Lektion 20 – Teil 1: RFID RC522 – Kartenleser
  • RFID Kartenleser RC522 am Arduino betreiben (Update 29.07.2021)
  • Arduino Projekt: PIR & RFID Alarmanlage

  • Benötigte Ressourcen für dieses Projekt
  • ESP32 auf einem Breadboard
  • RFID-RC522 Modul als Set
  • Aufbau der Schaltung
  • Programmieren
  • Schritt 1 – auslesen der RFID Karten
  • Schritt 2 – erzeugen eines Arrays mit zulässigen RFID-IDs
  • Schritt 3 – LEDs zum optischen Signalisieren einer zulässigen RFID-ID
  • Download des fertigen Programmes

Benötigte Ressourcen für dieses Projekt

Wenn du das nachfolgende Beispiel nachbauen möchtest, dann benötigst du:

  • einen ESP32 zbsp. ESP32-WROOM-32*,
  • ein Micro-USB Datenkabel*,
  • ein RFID Modul Typ MFRC522*,
  • ein paar Breadboardkabel*,
  • ein 170 Pin Breadboard*

* Leider hat nicht jeder ESP32 alle Pins nach außen geführt und somit empfehle ich dir den ESP32-WROOM-32 von

  • LILYGO® TTGO T-Call V1.4 ESP32 Wireless Module SIM Antenna SIM Card SIM800L Module
  • ESP32-WROOM-32*, DevKit C4 WROOM32*

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Für die optische Signalisierung einer gültigen RFID Karte nutze ich zwei 5 mm LEDs (rot & grün). Diese beiden LEDs benötigen noch zusätzlich einen 220 Ohm Vorwiderstand und natürlich Breadboardkabel.

ESP32 auf einem Breadboard

Normalerweise verwende ich für die Schaltungen immer ein Breadboard (400 Pin oder 720 Pin), jedoch ist der ESP32 für das „normale“ 400 Pin Breadboard zu breit und man kann lediglich nur eine Pinleiste mit Breadboardkabel abgreifen. Aus dem Conrad Adventskalender sowie einem Franzis Bausatz habe ich zwei 270 Pin Breadboards* welche zusammengesteckt werden können und der ESP32 sehr gut darauf passt.

ESP32 auf 400 Pin Breadboard
ESP32 auf 400 Pin Breadboard
ESP32 auf 2 gesteckte Breadboards
ESP32 auf 2 gesteckte Breadboards

Alternativ kannst du auch mit Breadboardkabel (männlich – weiblich) direkt an die Pins des ESPs gehen.

RFID-RC522 Modul als Set

Das in diesem Beitrag verwendete RFID-RC522 Modul erhältst du als Set mit einer Karte sowie einem Schlüsselanhänger.

RFID-RC522 Modul mit Karte & Schlüsselanhänger
RFID-RC522 Modul mit Karte & Schlüsselanhänger

Aufbau der Schaltung

Das RFID Modul wird per SPI angeschlossen und die Schaltung sieht wie folgt aus:

Schaltung - RFID Modul am ESP32 (inkl. LEDs)
Schaltung – RFID Modul am ESP32 (inkl. LEDs)

Wie bereits erwähnt habe ich den ESP32 auf zwei 270 Pin Breadboards gesteckt und kann die LEDs sowie das RFID Modul auf den freien Platz des Breadboard stecken.

Aufbau der Schaltung "ESP32 mit RFID-Modul Typ MFRC522 & LEDs"
Aufbau der Schaltung „ESP32 mit RFID-Modul Typ MFRC522 & LEDs“

Programmieren

Für die Programmierung des RFID Moduls verwende ich die Bibliothek „MFRC522 by GithubCommunity“ welche du im Bibliotheksverwalter der Arduino IDE herunterladen kannst.

Im Bibliotheksverwalter suchst du zunächst nach „rc522“ und betätigst dann die Schaltfläche „Installieren“ im Suchergebnis „MFRC522 by GithubCommunity“.

Wenn die Installation abgeschlossen wurde, kann das Fenster über die Schaltfläche „Schließen“ geschlossen werden und mit der Programmierung begonnen werden.

In den folgenden Schritten werde ich dir zeigen, wie du ein kleines Programm erstellst, welches eine RFID-ID zulässt und eine nicht.

Schritt 1 – auslesen der RFID Karten

Damit wir eine RFID Karte einen Zugang gewähren können, müssen wir die IDs zunächst auslesen. Dazu können wir entweder das Beispielprogramm „Beispiele“ > „MFRC522“ > „DumpInfo“ oder das nachfolgende kleine Programm.

//einbinden der Bibliotheken für das
//ansteuern des MFRC522 Moduls
#include <SPI.h>
#include <MFRC522.h>

//definieren der Pins  RST & SDA für den ESP32
#define RST_PIN     22
#define SS_PIN      21

//erzeugen einer Objektinstanz
MFRC522 mfrc522(SS_PIN, RST_PIN);

//Variable zum speichern der bereits gelesenen RFID-ID
String lastRfid = "";

void setup() {
  //beginn der seriellen Kommunikation mit 115200 Baud
  Serial.begin(115200);
  //eine kleine Pause von 50ms.
  delay(50);
  //begin der SPI Kommunikation
  SPI.begin();
  //initialisieren der Kommunikation mit dem RFID Modul
  mfrc522.PCD_Init();
}

void loop() {
  //Wenn keine neue Karte vorgehalten wurde oder die serielle Kommunikation
  //nicht gegeben ist, dann...
  if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  String newRfidId = "";
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    // !! Achtung es wird ein Leerzeichen vor der ID gesetzt !!
    newRfidId.concat(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    newRfidId.concat(String(mfrc522.uid.uidByte[i], HEX));
  }

  //alle Buchstaben in Großbuchstaben umwandeln
  newRfidId.toUpperCase();

  //Wenn die neue gelesene RFID-ID ungleich der bereits zuvor gelesenen ist,
  //dann soll diese auf der seriellen Schnittstelle ausgegeben werden.
  if (!newRfidId.equals(lastRfid)) {
    //überschreiben der alten ID mit der neuen
    lastRfid = newRfidId;
    Serial.print(" gelesene RFID-ID :");
    Serial.println(newRfidId);
    Serial.println();
  }
}

Wenn man nun eine RFID-Karte vor das RFID-Modul hält, dann wird diese ID auf der seriellen Schnittstelle ausgegeben. Da im Programm die letzte, erfolgreich, gelesene ID zwischengespeichert wird, erfolgt bei erneutem Vorlegen der Karte keine neue Ausgabe.

Ausgabe des Programmes zum lesen einer RFID-ID am ESP32
Ausgabe des Programmes zum lesen einer RFID-ID am ESP32

Schritt 2 – erzeugen eines Arrays mit zulässigen RFID-IDs

Wie erwähnt liegen dem Set des RFID Moduls bereits zwei RFID Karten, bei welche wir im ersten Schritt ausgelesen haben.

//Anzahl der zulässigen RFID-IDs im Array
const int NUM_RFIDS = 1;
//Array mit RFID-IDs welche zulässig sind
String rfids[NUM_RFIDS] = {"39 42 FF 97"};

void loop() {
 ...
 bool zugangOk = false;
  for (int i = 0; i < NUM_RFIDS; i++) {
    if (rfids[i].equals(newRfidId)) {
      zugangOk = true;
      break;
    }
  }

Schritt 3 – LEDs zum optischen Signalisieren einer zulässigen RFID-ID

Im nächsten Schritt wollen wir nun die rote LED blinken lassen, wenn der Zugang nicht gewährt wird, bzw. die RFID-ID nicht im Array vorhanden ist und die grüne LED soll blinken, wenn der Zugang gewährt werden soll.

Des Weiteren soll auf der seriellen Schnittstelle eine entsprechende Ausgabe erfolgen.

//einbinden der Bibliotheken für das
//ansteuern des MFRC522 Moduls
#include <SPI.h>
#include <MFRC522.h>

//definieren der Pins  RST & SDA für den ESP32
#define RST_PIN     22
#define SS_PIN      21

#define ledRot 32
#define ledGruen 33

//erzeugen einer Objektinstanz
MFRC522 mfrc522(SS_PIN, RST_PIN);

//Variable zum speichern der bereits gelesenen RFID-ID
String lastRfid = "";

//Anzahl der zulässigen RFID-IDs im Array
const int NUM_RFIDS = 1;
//Array mit RFID-IDs welche zulässig sind
String rfids[NUM_RFIDS] = {" 39 42 FF 97"};

void setup() {
  //beginn der seriellen Kommunikation mit 115200 Baud
  Serial.begin(115200);
  //eine kleine Pause von 50ms.
  delay(50);

  pinMode(ledRot, OUTPUT);
  pinMode(ledGruen, OUTPUT);

  //begin der SPI Kommunikation
  SPI.begin();
  //initialisieren der Kommunikation mit dem RFID Modul
  mfrc522.PCD_Init();
}

void loop() {
  //Wenn keine neue Karte vorgehalten wurde oder die serielle Kommunikation
  //nicht gegeben ist, dann...
  if ( !mfrc522.PICC_IsNewCardPresent()) {
    //Serial.println("!PICC_IsNewCardPresent");
    return;
  }

  if (!mfrc522.PICC_ReadCardSerial()) {
    //Serial.println("!PICC_ReadCardSerial");
    return;
  }


  String newRfidId = "";
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    newRfidId.concat(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    newRfidId.concat(String(mfrc522.uid.uidByte[i], HEX));
  }

  //alle Buchstaben in Großbuchstaben umwandeln
  newRfidId.toUpperCase();

  //Wenn die neue gelesene RFID-ID ungleich der bereits zuvor gelesenen ist,
  //dann soll diese auf der seriellen Schnittstelle ausgegeben werden.
  if (!newRfidId.equals(lastRfid)) {
    //überschreiben der alten ID mit der neuen
    lastRfid = newRfidId;
  }


  bool zugangOk = false;
  //prüfen ob die gelesene RFID-ID im Array mit bereits gespeicherten IDs vorhanden ist
  for (int i = 0; i < NUM_RFIDS; i++) {
    //wenn die ID an der Stelle "i" im Array "rfids" mit dem gelesenen übereinstimmt, dann
    if (rfids[i].equals(newRfidId)) {
      zugangOk = true;
      //Schleife verlassen
      break;
    }
  }

  //Wenn die Variable "zugangOk" auf True ist, dann...
  if (zugangOk) {
    blinkLed(ledGruen);
    Serial.println("RFID-ID [" + newRfidId + "] OK!, Zugang wird gewährt");
  } else {
    //Wenn nicht dann...
    blinkLed(ledRot);
    Serial.println("RFID-ID [" + newRfidId + "] nicht OK!, Zugang wird nicht gewährt");
  }

  Serial.println();
}

//Blinken einer LED am Pin "pin"
void blinkLed(int pin) {
  //Schleife von 0 bis 5
  for (int a = 0; a < 5; a++) {
    //LED aktivieren
    digitalWrite(pin, HIGH);
    //eine Pause von 125 ms.
    delay(125);
    //LED deaktivieren
    digitalWrite(pin, LOW);
    //eine Pause von 125 ms.
    delay(125);
  }
}

Download des fertigen Programmes

Hier nun ein Link zum Herunterladen des fertigen Programmes.

ESP32 mit RFID-Modul RC522 & LEDsHerunterladen

4 thoughts on “ESP32 mit RFID-RC522 (MFRC522) Modul”

  1. Xane sagt:
    26. Juli 2022 um 15:41 Uhr

    Obligatorischer Sicherheitshinweis: das System ist nicht(!) sicher. Die UID lässt sich leicht kopieren oder emulieren. Also gerne gleich versuchen das System zu „hacken“ 😉

    Antworten
  2. Peppe sagt:
    1. Mai 2023 um 17:08 Uhr

    Hallo,

    Sobald eine ID nicht erkannt wurde, bzw. diese nicht im Array hinterlegt ist, leuchtet zwar meine LED rot aber ich kann im Anschluss keine weitere Überprüfung machen. das Programm scheint nach einer fehlgeschlagenen (zutrittOK=false) Verifizierung aufzuhören.

    woran kann das liegen?

    Bin noch relativ neu in der Materie, hoffe mein Problem ist verständlich.

    Vielen Dank schonmal!

    Antworten
    1. MrPython sagt:
      11. Juli 2023 um 21:35 Uhr

      Denke mal das du ein Programmierfehler erzeugt hast. Es hört sich so an als wenn du aus der Schleife nicht mehr rauskommst. Kann das vielleicht so gewollt sein?
      Achso ich kenne deinen Code nicht.

      Antworten
  3. Pingback: ESP32 mit RGB Stripe - Technik Blog

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}