MFRC522 RFID Reader am ESP8266 D1 Mini

von cooper.bin
veröffentlicht am 02.03.2024 aktualisiert am 01.04.2024

Der MFRC522 RFID-Reader ist ein weit verbreitetes Modul für das Auslesen von RFID-Tags. Er ist kompatibel mit Plattformen wie dem Raspberry Pi, dem Arduino und auch dem ESP8266. In diesem Tutorial liegt der Fokus darauf, den MFRC522 mit einem ESP8266 D1 Mini zu verbinden und zu programmieren. Die Programmierung beschränkt sich dabei auf das Auslesen der UID des Tags – eine Speicherung oder das Auslesen weiterer Daten auf dem Tag ist nicht vorgesehen. Ziel ist es, die Unterscheidung zwischen verschiedenen Tags, etwa zwischen Tag A und Tag B, zu demonstrieren.

Produktempfehlungen und -suche in Verbindung mit dem Amazon Partnerprogramm:

¹ Angaben ohne Gewähr. Bei einem Kauf über den Link erhalten wir eine Provision.

Zum Kapitel springen Hardware

Um dieses Tutorial nachzubauen werden die in der folgenden Liste aufgeführten Hardwarekomponenten benötigt:

Das Breadboard ist nicht unbedingt notwendig, erleichtert die Verdrahtung aber erheblich. Es ist perfekt dafür geeignet, Prototypen oder Schaltungen ohne Löten oder andere kompliziertere Methoden aufzubauen.

Zum Kapitel springen Bibliotheken installieren

Für die Nutzung des MFRC522 ist eine spezielle Bibliothek nötig. Diese enthält bereits vordefinierte Funktionen und Methoden, die den Umgang mit dem MFRC522 erheblich erleichtern. Mit der Installation hat man Zugriff auf diese Funktionen und muss die Implementierung der Grundfunktionen nicht mehr selbst vornehmen. Man kann somit also direkt damit beginnen, das eigene Projekt umzusetzen. Die Bibliothken kann direkt über die Arduino IDE installiert werden. Navigiert dazu auf folgendes Menü innerhlab der Arduino IDE:

Arduino IDE
    └───Werkzeuge
        └───Bibliotheken verwalten ...

Sucht nach dem Begriff MFRC522 und instaliert das Paket von der GithubCommunity.

MFRC522 Bibliothek - Arduino IDE ><

Zum Kapitel springen Die Verdrahtung

Um den MFRC522 mit dem D1 Mini zu verwenden, greifen wir auf das sogenannte SPI-Interface zurück. SPI steht für Serial Peripheral Interface und ist ein Bus-System welches für den Betrieb des MFRC522 benötigt wird. Der SPI-Bus ist ein weit verbreiteter Standard, und auch der ESP8266 ist mit einem solchen Interface ausgestattet. Ein genauer Blick auf das Pinout des D1 Minis zeigt, an welchen Stellen sich die entsprechenden Pins für das Interface befinden.

Produktempfehlungen und -suche in Verbindung mit dem Amazon Partnerprogramm:

¹ Angaben ohne Gewähr. Bei einem Kauf über den Link erhalten wir eine Provision.

ESP8266 D1 Mini Pinout ><

Die Bezeichnungen auf dem D1 Mini sowie dem MFRC522 erlauben schon fast eine intuitive Verdrahtung. Dennoch ist hier die Verbindung zwischen dem RFID Reader und dem ESP8266 D1 Mini nochmals aufgeführt.

MFRC522 ESP8266 D1 Mini Schaltplan ><

MFRC522 RFID Reader ESP8266 D1 Mini
RST D3
SDA D8 (SPI SS)
MOSI D7 (SPI MOSI)
MISO D6 (SPI MISO)
SCK D5 (SPI SCK)
3.3V 3V3
GND G

Nachdem die Verdrahtung abgeschlossen ist, können wir uns wieder der Arduino IDE widmen.

Wenn du mehr über das Thema SPI wissen möchtest kann ich dir die Einführung in das Serial Peripheral Interface von renax empfehlen.

Zum Kapitel springen Programmcode

Wie bei vielen anderen Modulen üblich, bietet auch der RFID-Reader eine Auswahl an Beispielprojekten, die einen ersten Einblick in die Nutzung ermöglichen. Diese Beispiele sind in der Arduino IDE unter dem folgenden Pfad zu finden:

Arduino IDE
└───Datei
    └───Beispiele
        └───MFRC522

Diese Beispiele könnt ihr gerne auf eigene Faust erkunden und durchstöbern. Unser aktuelles Ziel ist es allerdings, den RFID-Reader in seiner grundlegendsten Form funktionsfähig zu machen. Dazu habe ich einen Code vorbereitet, den ihr direkt übernehmen und als Basis für euer eigenes RFID-Projekt nutzen könnt.

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN          15         // Pin: D8
#define RST_PIN         0          // Pin: D3

long chipID;


// MFRC522-Instanz erstellen
MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(115200);

  // SPI-Bus initialisieren
  SPI.begin();

  // MFRC522 initialisieren
  mfrc522.PCD_Init();

  //Kurze Pause nach dem Initialisieren
  delay(10);
  Serial.println("");

  // Details vom MFRC522 RFID READER / WRITER ausgeben
  mfrc522.PCD_DumpVersionToSerial();

  Serial.println("RFID-Chip auflegen, um UID anzuzeigen...");
  
}


void loop() {

  // Sobald ein Chip aufgelegt wird startet diese Abfrage
  if ( mfrc522.PICC_IsNewCardPresent() ){

    // CardID resetten
    chipID = 0;

    mfrc522.PICC_ReadCardSerial();

    // Hier wird die ID des Chips in die Variable chipID geladen
    for ( byte i = 0; i < mfrc522.uid.size; i++ ){
      chipID=( ( chipID+mfrc522.uid.uidByte[i] ) * 10 );
    }

    //... und anschließend ausgegeben
    Serial.println( chipID );

    // Danach 5 Sekunden pausieren um mehrfaches Lesen / Ausführen zu verhindern
    delay( 5000 );

  }

}

Nachdem das Programm hochgeladen wurde, erscheint im seriellen Monitor folgende Ausgabe:

Firmware Version: 0x88 = (clone)
RFID-Chip auflegen, um UID anzuzeigen...

Ich lege halte nun mal drei verschiedene Chips an den Reader. Die Ausgabe sieht wie folgt aus:

Firmware Version: 0x88 = (clone)
RFID-Chip auflegen, um UID anzuzeigen...
2384830
2680600
1799100

Jeder Chip hat seine eigene ID und kann entsprechend zu anderen Chips unterschieden werden.

if(chipID == 2680600){
  Serial.println("Hallo cooper!");
}

if(chipID == 2384830){
  Serial.println("Hallo Fremder!");
}

if(chipID == 1799100){
  Serial.println("Für Erzfeinde ist der Zugriff gesperrt!");
}
2384830
Hallo Fremder!

1799100
Für Erzfeinde ist der Zugriff gesperrt!

2680600
Hallo cooper!

cooper.bin Avatar

cooper.bin

Unterstütze mich und meine Arbeit, so kann ich weiter meiner Leidenschaft nachgehen. Ich lege viel Wert auf Qualität und stecke daher sehr viel Zeit in meine Beiträge. Wenn sie dir gefallen kannst du dir gerne auch meine anderen Artikel anschauen.

Mit PayPal unterstützen

Ich bin auf dem makesmart Discord-Server aktiv. Dort bin ich auch relativ gut erreichbar.

Teile diesen Beitrag



Diese Artikel könnten dich auch interessieren

Der DS18B20 Temperatursensor am ESP8266 D1 Mini - Einfache Temperaturmessung

Lerne, wie du mit der Arduino IDE, dem ESP8266 und einem DS18B20 Temperatursensor einfache und schnelle Temperaturmessungen durchführen kannst.

cooper.bin am 05.03.2024

Der DHT22 am ESP8266 - Wie man die Temperatur und Luftfeuchtigkeit misst

In diesem Tutorial lernst du, wie du mit einem DHT22 und einem ESP8266 D1 Mini die Luftfeuchtigkeit und die Temperatur einfach messen kannst.

cooper.bin am 12.03.2024

ESP8266 Deep-Sleep - Alles was du über den Stromsparmodus wissen musst

Der Deep-Sleep Modus eines ESP8266 kann in Projekten sehr nützlich sein. Der stromsparende Deep-Sleep eignet sich bestens für batteriebetriebene Anwendungen.

cooper.bin am 30.07.2024

Der ESP8266 als nativer HomeKit Kontaktsensor

Echtes natives HomeKit-Zubehör mit dem ESP8266? In diesem Tutorial erfährst du, wie die Smarthome Zubehör mit dem ESP8266 umsetzen kannst. Ganz ohne zusätzliche Bridge.

cooper.bin am 19.03.2024

HC-SR04 und JSN-SR04T - Entfernungen messen mit Ultraschallsensoren am ESP8266

Lerne in diesem Tutorial, wie die Ultraschallsensoren HC-SR04 und JSN-SR04T mit ESP8266 D1 Mini für Distanzmessungen eingesetzt werden, die Grundlagen, Anwendungen und mehr.

cooper.bin am 09.03.2024