ESP8266 - RFID-Türschloss

Dieses Tutorial erklärt dir, wie man ein Türschloss-System mit dem ESP8266, dem RFID/NFC RC522-Modul, einem Relais, einem Solenoidschloss oder elektromagnetischem Schloss sowie optionalem LCD-Display baut. Um es dir leichter zu machen, fordert das Tutorial dich auf, das RFID-Türschloss Schritt für Schritt von einfach nach komplex aufzubauen. Im Detail werden wir Folgendes tun:

ESP8266 NodeMCU RFID-Türschloss

Wenn Sie ein Türschloss-System mit Passwort erstellen möchten, lesen Sie bitte ESP8266 - Keypad-Türschloss.

Erforderliche Hardware

1×ESP8266 NodeMCU
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×RFID Card
1×Magnetschloss
1×(Alternativ) Electromagnetic Lock
1×Relais
1×12V Netzteil
1×DC-Stromanschluss
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP8266
1×(Empfohlen) Stromverteiler für ESP8266 Typ-C

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über RFID/NFC RC522-Modul und elektromagnetische Verriegelung

Wenn Sie mit dem RFID/NFC RC522-Modul, dem elektromagnetischen Türschloss und dem Solenoid-Schloss (einschließlich Pinbelegung, Funktionsweise und Programmierung) nicht vertraut sind, können Sie mehr erfahren, indem Sie diese Tutorials befolgen:

Türschloss-Systemkomponenten

Das Türschloss-System besteht aus zwei Hauptkomponenten:

  • Türschloss: bestehend aus einem ESP8266, einem Relais, einem RFID/NFC-Leser, einem Solenoidschloss oder einem elektromagnetischen Schloss
  • Türschlüssel: RFID/NFC-Tags
ESP8266 NodeMCU RFID-Türschloss-Komponente

Wie RFID/NFC-Türschloss funktioniert

  • Der Benutzer tippt ein RFID/NFC-Tag an den RFID/NFC-Leser, der die UID vom Tag ausliest.
  • Der ESP8266 erhält dann die UID vom Lesegerät und vergleicht sie mit den im Code festgelegten UIDs.
  • Wenn die UID mit einer der vordefinierten UIDs übereinstimmt, wird der ESP8266 das Solenoidschloss entsperren und damit die Tür entriegeln.
  • Diese Tags dienen als autorisierte Schlüssel.
  • Das Relais wird vom ESP8266 aktiviert, um die Tür nach einer bestimmten Zeit zu verriegeln.

Verdrahtungsdiagramm

  • RFID RC522 Türschloss mit elektromagnetischer Verriegelung
ESP8266 NodeMCU RFID RC522 Türsolenoidschloss Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Weitere Informationen finden Sie unter ESP8266-Pinbelegung und wie man ESP8266 und andere Komponenten mit Strom versorgt.

  • RFID RC522 Türschloss mit elektromagnetischem Schloss
ESP8266 NodeMCU RFID RC522 Türschloss-System Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

※ Notiz:

Hersteller können die Reihenfolge der Pins unterschiedlich anordnen, daher ist es wichtig, sich auf die auf dem Modul aufgedruckten Bezeichnungen zu verlassen. Das oben gezeigte Pinout-Diagramm zeigt die Pin-Anordnung für Module, die vom Hersteller DIYables produziert werden.

ESP8266 Code - Eine Taste

/* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp8266/esp8266-rfid-door-lock */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN D8 // The ESP8266 pin D8 #define RST_PIN D2 // The ESP8266 pin D2 #define RELAY_PIN D1 // The ESP8266 pin connects to relay MFRC522 rfid(SS_PIN, RST_PIN); byte keyTagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door Serial.println("Tap an RFID/NFC tag on the RFID-RC522 reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); if (rfid.uid.uidByte[0] == keyTagUID[0] && rfid.uid.uidByte[1] == keyTagUID[1] && rfid.uid.uidByte[2] == keyTagUID[2] && rfid.uid.uidByte[3] == keyTagUID[3] ) { Serial.println("Access is granted"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.print("Access denied, UID:"); for (int i = 0; i < rfid.uid.size; i++) { Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(rfid.uid.uidByte[i], HEX); } Serial.println(); } rfid.PICC_HaltA(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Schnelle Schritte

Um mit dem ESP8266 in der Arduino-IDE zu beginnen, befolgen Sie diese Schritte:

  • Schau dir das Tutorial Wie man die Umgebung für ESP8266 in der Arduino-IDE einrichtet an, falls du ESP8266 zum ersten Mal verwendest.
  • Verbinde die Bauteile wie im Diagramm gezeigt.
  • Schließe das ESP8266-Board mit einem USB-Kabel an deinen Computer an.
  • Öffne die Arduino IDE auf deinem Computer.
  • Wähle das richtige ESP8266-Board, z. B. NodeMCU 1.0 (ESP-12E-Modul), und den entsprechenden COM-Port.

Um die UID eines RFID-/NFC-Tags zu bestimmen:

  • Lade den Code auf den ESP8266 hoch und öffne den seriellen Monitor.
  • Halte den Tag an das RFID-RC522-Modul; die UID wird im seriellen Monitor angezeigt.
COM6
Send
Tap RFID/NFC tag on reader Access denied for user with UID: 3A C9 6A CB
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Sobald Sie die UID haben:

  • Ändere Zeile 18 des obigen Codes, um die UID widerzugeben.
  • Zum Beispiel ersetze byte keytagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; durch byte keytagUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Lade den geänderten Code auf den ESP8266 hoch.
  • Platziere einen RFID/NFC-Tag auf dem RFID-RC522-Modul.
  • Überprüfe die Ausgabe im Seriellen Monitor.
COM6
Send
Tap RFID/NFC tag on reader Access is granted
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Vergewissern Sie sich, dass das elektromagnetische Schloss nicht verriegelt ist.
  • Halten Sie einen anderen RFID/NFC-Tag an das RFID-RC522-Modul.
  • Überprüfen Sie die Ausgabe im Serial Monitor.
COM6
Send
Tap RFID/NFC tag on reader Access is granted Access denied for user with UID: BD 1E 1D 22
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Notiz:

  • Zu Testzwecken wurde die Entsperrzeit auf 2 Sekunden festgelegt; sie sollte jedoch für den praktischen Einsatz bzw. die Demonstration erhöht werden.
  • Die Installation der MFRC522-Bibliothek ist erforderlich. Weitere Informationen finden Sie im ESP8266 - RFID/NFC RC522 Tutorial.

ESP8266-Code - Mehrere Tasten

Stellen wir uns einen Raum vor, zu dem nur der Manager und die Sekretärin Zutritt haben.

In diesem Fall sind zwei RFID-/NFC-Tags erforderlich: eines für den Manager und das andere für die Sekretärin. Die UIDs der beiden Tags müssen im Code angegeben werden.

/* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp8266/esp8266-rfid-door-lock */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN D8 // The ESP8266 pin D8 #define RST_PIN D2 // The ESP8266 pin D2 #define RELAY_PIN D1 // The ESP8266 pin connects to relay MFRC522 rfid(SS_PIN, RST_PIN); byte managerKeyUID[4] = {0x3A, 0xC9, 0x6A, 0xCB}; byte secretaryKeyUID[4] = {0x30, 0x01, 0x8B, 0x15}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door Serial.println("Tap an RFID/NFC tag on the RFID-RC522 reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); if (rfid.uid.uidByte[0] == managerKeyUID[0] && rfid.uid.uidByte[1] == managerKeyUID[1] && rfid.uid.uidByte[2] == managerKeyUID[2] && rfid.uid.uidByte[3] == managerKeyUID[3] ) { Serial.println("The access is granted to manager"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else if (rfid.uid.uidByte[0] == secretaryKeyUID[0] && rfid.uid.uidByte[1] == secretaryKeyUID[1] && rfid.uid.uidByte[2] == secretaryKeyUID[2] && rfid.uid.uidByte[3] == secretaryKeyUID[3] ) { Serial.println("The access is granted to secretary"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.print("Access denied, UID:"); for (int i = 0; i < rfid.uid.size; i++) { Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(rfid.uid.uidByte[i], HEX); } Serial.println(); } rfid.PICC_HaltA(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Wiederhole dieselben Schritte wie zuvor und lege dann jedes RFID-Tag auf das RFID-RC522-Modul. Die Ausgabe im seriellen Monitor sollte wie folgt erscheinen:

COM6
Send
Tap RFID/NFC tag on reader Access is granted for secretary Access is granted for manager
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Sie können den oben geschriebenen Code erweitern, um drei, vier oder mehr Tags einzuschließen.

Hinzufügen eines LCD-Displays zum RFID-Türschloss

Wir können optional ein LCD-Display hinzufügen, um den Benutzern den Zugangsstatus anzuzeigen (z. B. ZUGANG ERTEILT/ABGELEHNT). Weitere Informationen zu LCD finden Sie in ESP8266 - LCD tutorial.

Schaltplan - Türverriegelungssystem mit RFID, Solenoidschloss oder elektromagnetischer Verriegelung und LCD-Anzeige

ESP8266 NodeMCU RFID RC522 Türschloss LCD-Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Bitte beachten Sie, dass im obigen Schaltplan eine 5‑V-Spannung hinzugefügt wird, da der 5‑V-Pin des ESP8266 nicht genügend Strom liefern kann, um sowohl das Relais als auch das LCD gleichzeitig zu versorgen.

ESP8266-Code - Türschloss-System mit Passwort unter Verwendung eines RFID RC522-Moduls, Solenoidschloss oder elektromagnetischem Schloss und LCD-Display

/* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp8266/esp8266-rfid-door-lock */ #include <SPI.h> #include <MFRC522.h> #include <LiquidCrystal_I2C.h> #define SS_PIN D8 // The ESP8266 pin D8 #define RST_PIN D4 // The ESP8266 pin D4 #define RELAY_PIN D3 // The ESP8266 pin connects to relay MFRC522 rfid(SS_PIN, RST_PIN); LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows byte managerKeyUID[4] = {0x3A, 0xC9, 0x6A, 0xCB}; byte secretaryKeyUID[4] = {0x30, 0x01, 0x8B, 0x15}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door lcd.init(); // Initialize the LCD I2C display lcd.backlight(); Serial.println("Tap RFID/NFC Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); if (rfid.uid.uidByte[0] == managerKeyUID[0] && rfid.uid.uidByte[1] == managerKeyUID[1] && rfid.uid.uidByte[2] == managerKeyUID[2] && rfid.uid.uidByte[3] == managerKeyUID[3] ) { Serial.println("Access is granted for manager"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds lcd.clear(); lcd.setCursor(0, 0); lcd.print("CORRECT!"); lcd.setCursor(0, 1); lcd.print("DOOR UNLOCKED!"); delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door lcd.clear(); } else if (rfid.uid.uidByte[0] == secretaryKeyUID[0] && rfid.uid.uidByte[1] == secretaryKeyUID[1] && rfid.uid.uidByte[2] == secretaryKeyUID[2] && rfid.uid.uidByte[3] == secretaryKeyUID[3] ) { Serial.println("Access is granted for secretary"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds lcd.clear(); lcd.setCursor(0, 0); lcd.print("CORRECT!"); lcd.setCursor(0, 1); lcd.print("DOOR UNLOCKED!"); delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door lcd.clear(); } else { Serial.print("Access denied for user with UID:"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("INCORRECT!"); lcd.setCursor(0, 1); lcd.print("ACCESS DENIED!"); for (int i = 0; i < rfid.uid.size; i++) { Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(rfid.uid.uidByte[i], HEX); } Serial.println(); } rfid.PICC_HaltA(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

※ Notiz:

Die Adresse des LCDs kann je nach Hersteller variieren. Wir haben in unserem Code 0x27 verwendet, wie von DIYables angegeben.

Hinzufügen eines Türsensors zum RFID-Türschloss

Im zuvor erwähnten Code verriegelt der ESP8266 die Tür nach Ablauf eines Timers seit dem Entsperren. In der Praxis wird jedoch normalerweise ein Türsensor in das System integriert. Wenn der ESP8266 erkennt, dass die Tür geschlossen ist, verriegelt er die Tür sofort, anstatt auf das Timeout zu warten.

Um Sie nicht zu überfordern, haben wir den Türsensor nicht in das Verdrahtungsdiagramm und den Code aufgenommen. Stattdessen überlassen wir diesen Teil Ihrer Kreativität. Sie können sich die Tutorials ESP8266 - Türsensor und ESP8266 - Türsensor-Steuerrelais für weitere Hinweise ansehen.

Verwaltung und Speicherung gültiger RFID-Schlüssel im EEPROM

Der obige Code enthält gültige RFID-Schlüssel (UID), die im ESP8266-Code hartkodiert sind. Das bedeutet, dass Sie, wenn Sie Schlüssel hinzufügen oder entfernen möchten, Änderungen am Code vornehmen und ihn erneut auf den ESP8266 hochladen müssen, was umständlich ist.

In der Praxis ist es notwendig, RFID-Schlüssel zu verwalten, ohne den Code jedes Mal ändern und hochladen zu müssen. Um dies zu erreichen, können die RFID-Schlüssel im EEPROM gespeichert werden, statt fest im Code hinterlegt zu werden. Folglich ist eine Methode erforderlich, um die RFID-Schlüssel einfach aus dem EEPROM zu verwalten.

Es stehen zwei Methoden zur Verwaltung von RFID-Schlüsseln im EEPROM zur Verfügung:

  • RFID-Schlüssel als Master-Schlüssel
    • Durch die Verwendung eines RFID-Schlüssels als ADD-Master-Schlüssel können dem System neue Schlüssel hinzugefügt werden.
    • Sobald der ESP8266 den ADD-Master-Schlüssel erkennt, wechselt er zwischen dem ADD-Modus und dem Betriebsmodus.
    • Während des ADD-Modus fügt der ESP8266 alle neuen Schlüssel, die er erkennt, dem EEPROM hinzu.
    • Ein ähnlicher Ansatz wird für den DELETE-Master-Schlüssel und den DELETE-Modus verwendet.
  • Verwenden Sie ADD/DELETE-Befehle über Serial/Bluetooth/IR
    • Befehle werden über Serial/Bluetooth/IR übertragen, wobei Tools wie der Serial Monitor, die Bluetooth-App oder der IR-Controller verwendet werden.
    • Die Befehle bestehen aus einer Anweisung (ADD/DELETE) und der UID des RFID-Schlüssels.
    • Um die Sicherheit zu verbessern, sollte dem Befehl außerdem ein Passwort beigefügt werden. Der ESP8266 überprüft das Passwort, um festzustellen, ob der Befehl gültig ist oder nicht.

    Um eine der beiden oben genannten Methoden nutzen zu können, muss eine beträchtliche Menge ESP8266-Code hinzugefügt werden. Für Personen, die neu in der Programmierung sind, kann dies eine herausfordernde Aufgabe sein. Folglich zielt dieses Tutorial darauf ab, ein grundlegendes Verständnis des Türschloss-Systems zu vermitteln, ohne Anfänger mit komplexem Code zu überfordern. Wenn Sie dieses System aus praktischen Gründen implementieren möchten, kontaktieren Sie uns bitte über unseren kostenpflichtigen Programmierdienst.

Speichern der Zugriffshistorie auf SD-Karte

Um den Zugriffverlauf nachzuverfolgen, könnte es notwendig sein, die UID des RFID-Schlüssels, den Zugriffsstatus (GRANTED/DENIED) sowie Datum und Uhrzeit zu speichern. Da der EEPROM nicht über ausreichende Kapazität verfügt, die gesamte Historie zu speichern, kann stattdessen eine SD-Karte verwendet werden. Eine Anleitung dazu finden Sie im Tutorial ESP8266 - Daten mit Zeitstempel auf SD-Karte protokollieren.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!