🍪 Privacy & Transparency

We and our partners use cookies to Store and/or access information on a device. We and our partners use data for Personalised ads and content, ad and content measurement, audience insights and product development. An example of data being processed may be a unique identifier stored in a cookie. Some of our partners may process your data as a part of their legitimate business interest without asking for consent. To view the purposes they believe they have legitimate interest for, or to object to this data processing use the vendor list link below. The consent submitted will only be used for data processing originating from this website. If you would like to change your settings or withdraw consent at any time, the link to do so is in our privacy policy accessible from our home page..

Vendor List | Privacy Policy
Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry PI

Menu
  • Projekte
    • LED’s
    • Servo & Schrittmotoren
    • Sound
    • LCD’s
    • Kommunikation
    • Sicherheit
    • Weekend Project
  • Arduino
    • Tutorials
    • ProMini
      • Anschließen & Programmieren
    • Nano
      • Arduino Nano – Übersicht
    • UNO
      • Übersicht
    • MEGA 2560
      • Übersicht
    • Leonardo
      • Übersicht
    • NodeMCU
      • NodeMCU – “Einer für (fast) Alles!”
    • Lilypad
      • Arduino: Lilypad “Jetzt Geht’s Rund!”
    • WEMOS
      • WEMOS D1 – Arduino UNO kompatibles Board mit ESP8266 Chip
      • WEMOS D1 Mini – Übersicht
      • Wemos D1 mini Shields
    • STM32x
      • STM32F103C8T6 – Übersicht
    • Maker UNO
      • Maker UNO – Überblick und Test
    • ATTiny85
      • Mini Arduino mit ATTiny85 Chip
      • ATtiny85 mit dem Arduino UNO beschreiben
  • Android
  • Über mich
  • DeutschDeutsch
  • EnglishEnglish
Menu

ESP32 mit RFID-RC522 (MFRC522) Modul

Posted on 1. Juni 202215. August 2023 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

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

3 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

Schreibe einen Kommentar Antworten abbrechen

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

Kategorien

Tools

  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator
  • Widerstandsrechner
  • Rechner für Strom & Widerstände
  • ASCII Tabelle

Meta

  • Videothek
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Kontakt
  • Cookie-Richtlinie (EU)

Links

Blogverzeichnis Bloggerei.de Blogverzeichnis TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com
©2023 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb