MFRC522 RFID Reader am ESP8266 D1 Mini - Tutorial



  • Der MFRC522 RFID Reader ist ein beliebtes Modul wenn es darum geht, RFID Tags am Raspberry Pi, Arduino, ESP8266 und co. auszulesen. Und genau darum soll es heute gehen. In diesem Tutorial werden wir gemeinsam einen MFRC522 RFID Reader am ESP8266 D1 Mini anschließen und programmieren. Das Programmieren beschränkt sich darauf, die UID des Chips auszulesen. Wir werden keine Daten auf den Chip speichern oder auslesen. Es geht lediglich darum zu unterscheiden, ob Chip A oder Chip B aufgelegt wurde. Aber was das genau bedeutet, erkläre ich im Laufe dieses Tutorials.

    MFRC522 RFID Reader - Verkabelung

    Bevor wir mit der Verkabelung starten, werfen wir einen Blick auf das Pinout des ESP8266 D1 Minis.


    ESP8266 D1 Mini Pinout - Pinbelegung

    Heute arbeiten wir das erste mal mit dem SPI-Interface des D1 Minis. SPI bedeutet so viel wie Serial Peripheral Interface und ist ein Bus-System welches der MFRC522 benötigt um zu funktionieren. Hier einmal die Verdrahtung des RFID Readers mit dem ESP8266 D1 Mini.

    MFRC522 - ESP8266 D1 Mini Schaltplan

    Die Pin-Bezeichnungen auf dem RFID-Reader stimmen überwiegend mit den Bezeichnung auf dem Pinout des D1 Minis überein. Hier anbei nochmal eine Tabelle, die das Verdrahten der Schaltung erleichtern sollte.

    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 mit der Einrichtung der Arduino IDE weitermachen. In der IDE muss nämlich eine Bibliothek installiert werden, damit der MFRC522 läuft.


    MFRC522 RFID Reader - Arduino IDE Bibliothek hinzufügen

    Um auf Beispiele der Community und allgemein die Funktionen des RFID-Readers zugreifen zu können, muss die Arduino Bibliothek MFRC522 installiert werden. Startet dazu die Arduino IDE und öffnet über die Werkzeuge im Menü den Bibliotheksverwalter.

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

    MFRC522 Bibliothek - Arduino IDE

    Sucht im Bibliotheksverwalter nach dem Begriff MFRC522 und installiert das Paket der GithubCommunity.


    MFRC522 RFID Reader - Beispiele

    Wie bei fast jedem anderen Modul gibt es auch für den RFID-Reader einige Beispiele, in die man reinschnuppern kann. Die Beispiele befinden sich unter folgendem Menüpunkt der IDE.

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

    MFRC522 Beispiele - Arduino IDE

    Die Beispiele könnt ihr gerne auf eigene Faust erkunden und durchstöbern. Unser Ziel ist es aber jetzt den RFID-Reader in der Basic-Form zum Laufen zu bekommen. Anbei habe ich einen Code vorbereitet, den ihr 1:1 kopieren und als Ausgangslage für euer RFID-Projekt verwenden könnt.

    MFRC522 RFID Reader - Code

    
    // Basic MFRC522 RFID Reader Code by cooper @ my.makesmart.net
    // Released under Creative Commons - CC by cooper@my.makesmart.net
    
    #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 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 so 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!
    
    

    Die Produkte, die ich für dieses Tutorial verwendet habe, habe ich euch wie immer in einen Warenkorb gepackt.

    Disclaimer

    Diese Art und Weise eine Erkennung für Zugriff durchzuführen ist alles andere als sicher! Seid euch dessen bewusst und nutzt diesen RFID-Reader nur für Projekte, die mit keinen Sicherheitsrelevanten Einrichtungen zu tun haben (Haustüre, Safe, …). Ein Umgehen der Sicherheit durch Personen die Ahnung von der Materie haben könnte möglich sein.