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.