Zugangsbeschränkung  zu Geräten per Contactless Card mit der NodeMCU und dem RC522 Modul - AZ-Delivery

In questa serie multi-part siamo dedicati alle possibilità di limitare l'accesso a dispositivi o sistemi con schede senza contatto della serie MiFare utilizzando il modulo RFID relativamente ben sviluppato RC522.

Nella prima parte di questa serie guardiamo a quali componenti abbiamo bisogno, a che cosa assomiglia il nostro interruttore di base hardware e programmare una prima applicazione di carta.In questa applicazione, un relè è è acceso e spento da una scheda autorizzata specificata nel codice del programma.Un LED multicolore indica se la lettura della scheda è (era) autorizzata a attivare o meno il relè.Il relè consente di accendere i consumatori potenzialmente liberi.Esso si applica:

Attenzione!Quando si scambiano carichi su 30 Volt a o 230 Volta tensione, c'è uno shock elettrico che minaccia la vita.Si prega di garantire l'isolamento adeguato e le norme di protezione iniziale e operative in conformità con DIN VDE 0105.

In particolare, le cinque norme di sicurezza applicabili ai sensi: https://de.wikipedia.org/wiki/F%C3%BCnf_Sicherheitsregeln per essere letto.

Torniamo ora al nostro progetto e alla nostra lista di parti.Le parti seguenti sono necessarie:

1x NodeMcu

Rilex 2-fold relè

1x RC522 CardReader + Mifare Classic Card

Adattatore di potenza 1x

modulo LED RGB 1x

Note:

Il pacchetto di lettori di carte RC522 contiene già carte MiFare Classic, che sono completamente sufficienti per il nostro progetto.Non è quindi necessario ordinare carte RfId separate.

Il modulo KY-016 LED RGB contiene già i pre-resistenti per il funzionamento diretto sui perni.Pertanto, non vengono più utilizzati separatamente.Se si preferisce lavorare senza modulo RGB, il LED RGB con comune catodo 3x 220 Ohm resistenze sono necessari.

La mappatura del pin del LED RGB è:

NodeMcU output

Colore LED

D2

(B)lau

D3

(G)Verde

D4

(R)

Su una tavola di pane, i componenti sono ora collegati come segue:

Costruito sembra un circuito allora:

Nella foto si vede chiaramente la domanda corrente del circuito con relè attivato.Questo è circa 190 mA alla tensione di alimentazione di 8 Volt.Senza relè attivato, la domanda corrente è circa 110 mA.È quindi essenziale collegare una fonte di energia esterna e non affidarsi all'alimentazione USB.

Dopo aver costruito tutti i componenti insieme, convertiamo il nostro Arduino DIE per supportare il chip ESP8266, selezionare il modulo ESP8266 Generico da Strumenti > Board.Dopo di che scegliamo tra gli strumenti Porto il porto COM a cui il nostro NodeMcu è collegato.Inseriamo ora il seguente codice:

 

«35; comprende <SPI.h>
«35; comprende <MFRC522.h>

35; definire PIN RST     5   // SPI Reset Pin (output D1)
35; definire PIN DI RELISI  16  // Relais (output D0) [BASSA Active]- Anche LED interno vicino alla porta USB
35; definire PIN SS-U      15  // slavo SPI Seleziona Pin

35; definire RGBLED R    2   // Rosso (uscita D4) 
35; definire RGBLED G    0   // Verde (output D3) Anche i LED interni sul modulo ESP
35; definire RGBLED B    4   // Blu (uscita D2)

35; definire BUILTIN LED 16
35; definire PIN WIRE SDA 4 
35; definire PIN WIRE SCL 5 
 
MFRC522 mrc522(PIN SS-U, PIN RST);   // Crea istanza MFRC522
MFRC522::Chiave MIFARE chiave;

scambio myValidaCardUID[4] = {0x00,0x00,0x00,0x00}; // Qui leggere l'interfaccia seriale                                                 // Inserisci UID per cui il processo di lettura sarà                                                 // deve essere valido e il relè deve essere acceso                                                  // dovrebbe.
vuoto setComment() {   pinMode(PIN RST,PRODUZIONE);   pinMode(PIN DI RELISI,PRODUZIONE);   pinMode(RGBLED R,PRODUZIONE);   pinMode(RGBLED G,PRODUZIONE);   pinMode(RGBLED B,PRODUZIONE);   digitalacWrite(PIN DI RELISI,ALTA);    Relais inattivo   digitalacWrite(PIN RST,ALTA);   digitalacWrite(RGBLED R,BASSA);       //Membro dell'AUS   digitalacWrite(RGBLED_G,BASSO);   digitalWrite(RGBLED_B,BASSO);   Seriale.inizio(9600);               // Serielle Kommunikation mit dem PC initialisieren   Seriale.println("Ser. Komm. OK.");    SPI.inizio();                      // Initialisiere SPI Kommunikation   digitalWrite(RST_PIN,BASSO);   ritardo(300);   digitalWrite(RST_PIN,ALTA);   mfrc522.PCD_Reset();   mfrc522.PCD_Init();               // Initialisiere MFRC522 Lesemodul   mfrc522.PCD_AntennaOn();   dare la precedenza();   digitalWrite(RGBLED_R,ALTA);     // Led Farbe Lila - Initialisierung abgeschlossen   digitalWrite(RGBLED_G,BASSO);   digitalWrite(RGBLED_B,ALTA);
}
 
vuoto ciclo continuo()   {   Se (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial() )   // PICC = scheda del circuito integrato di prossimità                                                                                                                                            // kontaktlose Chipkarte   {     Seriale.Stampa("UID PICC:");     per (byte io = 0; io < mfrc522.uid.taglia; io++)      {       Seriale.Stampa(mfrc522.uid.uidByte[io] < 0x10 ? " 0" : " ");       Seriale.Stampa(mfrc522.uid.uidByte[io], ESADECIMALE);     } 
 bool È valido = vero;    per (byte io = 0; io < taglia di(myValidCardUID); io++)      {     Se (mfrc522.uid.uidByte[io] != myValidCardUID[io]) { È valido = falso; }        }    Se (È valido)    {       bool PinState= digitalRead(RELAIS_PIN);       PinState = !PinState;       digitalWrite(RELAIS_PIN, PinState);            digitalWrite(RGBLED_R,BASSO);     // Led Grün       digitalWrite(RGBLED_G,ALTA);       digitalWrite(RGBLED_B,BASSO);       Seriale.Stampa("Gültig.");       ritardo(2000);       digitalWrite(RGBLED_R,BASSO);     // Led Farbe Blau Leser è a Grundzustand       digitalWrite(RGBLED_G,BASSO);       digitalWrite(RGBLED_B,ALTA);     } altro    {        digitalWrite(RGBLED_R,ALTA);     // Led Rot - Letzte Karte war ungültig       digitalWrite(RGBLED_G,BASSO);       digitalWrite(RGBLED_B,BASSO);       Seriale.Stampa("ungültig.");       ritardo(2000);       }      Seriale.println();      mfrc522.PICC_HaltA();       // Versetzt die aktuelle Karte in einen Ruhemodus.     ritardo(1000);   }   dare la precedenza(); // interno ESP8266 Funktionen aufrufen
}

 

Wir kompilieren den Code e caricato Ihn auf unsere NodeMcu hoch. Während des Hochladens des Sketches rimane senza RGB LED „rot“. Nach erfolgreichem Upload wechselt die Farbe der LED auf "lila". Durch den Wechsel der Farbe wird angezeigt, das der Upload Vorgang erfolgreich war.

Accidenti a Hochladen auf die NodeMcu funktioniert, muss während der Kompiliervorganges der Taster „Flash“ auf der NodeMcu gedrückt werden und gedrückt gehalten werden.

Wenn der Upload -Vorgang erfolgreich abgeschlossen wurde, startir wir in IDE unser Serielles Terminal and stellen die Übertragungsgeschwindigkeit auf 9600 Baud ein.

Nun is unser Leser bereit die erste Karte einzulesen. Diese wird natürlich nicht als zugangsberechtigt angesehen, da unser Leser ja Ihre ID noch nicht kennt. Die Ausgabe im Terminal sollte dann wie folgt aussehen:

Dies ist eine erwartete Ausgabe. Dannazione di Karte von unserem Leser zukünftig als gültig akzeptiert wird, ändern wir nun die Zeile „byte myValidCardUID [4] = {0x00,0x00,0x00,0x00};“ in „byte myValidCardUID [4] = {0x16,0x15x8 0x05}; “Kompilieren neu und laden unseren Code auf die Node MCU hoch. Danach wird diese Karte als gültig erkannt und man kann das Relais durch vorhalten der gültigen Karte umschalten. Muore in un secondo tempo grazie alle luci LED a LED.

Falls eine ungültige Karte vorgehalten wird, schaltet die LED auf dauerhaft „rot“. Esst somit erkennbar, ob in der Vergangenheit ein Fehlversuch durine eine nicht autorisierte Karte erfolgte.

Der Aufmerksame Leser wird sich sicherlich fragen, warum wir für diese Aufgabe eine NodeMcu verwenden, da diese Aufgabe z.B. auch durch einen Arduino Uno erfüllt werden könnte. Dies ist zwar prinzipiell richtig, jedoch wollen wir unseren Kartenleser um komfort Konfigurationsmöglichkeiten per Netzwerk erweitern sowie Sicherheitsfunktionen ergänzen. Tutto ciò che riguarda Teil der kommenden Teile dieser Reihe.

L'autore raccomanda di non utilizzare il sistema qui descritto come controllo di accesso per sistemi di porte o altri sistemi critici per la sicurezza, poiché il PICC "Mifare Classic" su cui si basa il sistema è già stato violato e quindi classificato come non sicuro.

Divertiti a copiare e fino al prossimo post :) Tobias Kuch

 

Esp-8266Projekte für fortgeschrittene

8 commenti

Harald

Harald

Hallo,
Einer von vielen sehr hilfreichen Artikeln. Allerdings auch mit einer Frage. hat sich schon mal jemand daran getraut diesen Card Reader per I2C anzusprechen. Angeblich kann das Funktionieren und würde mir viele Eingänge bringen.

Frank Carius

Frank Carius

Schaut euch vielleicht mal https://github.com/esprfid/esp-rfid) an. Das ist quasi eine fertige Firmware wie Tasmota, ESPEasy, ESPurna nur mit dem Fokus auf RFID.
Läuft vermutlich out of the Box mit eurem Hardware setup

Interessant wäre es natürlich mal, wie man z.B. eine EC-Karte/Kreditkarte mit dem RC522 nicht nur liest, sondern vielleicht einen Challenge sendet und den REsponse liest. Dann wäre es sicherer als einfach nur “Seriennummer lesen”

Michael

Michael

Hallo zusammen,
cooles Projekt. Ich versuche die Sensitivität des RC522 durch die Ergänzung der Initialisierung PCD_WriteRegister(RFCfgReg, (0×07<<4)); im File MRFC522.cpp zu erhöhen.
Leider ohne Erfolg.
Habt jemand schon mal erfolgreich die Reichweite des RC522 erhöht?
Die Reichweite ist für mein Projekt zu gering :-(.

Vielen Dank für alle Hinweise

Jörg

Jörg

Hallo,
toller Artikel, der Aufbau funktioniert nach einigem Hin und Her
(LED leuchtet lila), aber die LED reagiert nicht, wenn ich eine RFID-Karte davor halte.
Im seriellen Monitor gibt es keine Reaktion.
Ich habe es mit zwei unterschiedlichen Cardreadern und Karten versucht.
Was kann ich noch machen?

Vielen Dank und Grüße
Jörg

Paul

Paul

Ein super Projekt.

Hat auf Anhieb funktioniert. (Nur das kopieren des Codes muss man manuell machen, über den Button kommen die ein anderer schon schreibt Fehler rein.)
Ich gehe direkt zum Teil 2.

Heiko

Heiko

Hallo zusammen,
die Fehlermeldung ist geklärt.
Durch das Kopieren von der Internetseite werden statt Leerzeichen im Code Sonderzeichen eingetragen.
Die habe ich dann alle ersetzt durch Leerzeichen und schon läufts.

Danke trotzdem

Weiter so, ist ein Super Blog. Sehr interessant und leicht zu verstehen.

Heiko

Heiko

Hallo zusammen,
tolles Projekt.
Habe alles aufgebaut.
Ich bekomme die Fehlermeldung stray ‘\302’ in program
Alle Librarys sind installiert (meiner Meinung nach).
Der Reader ist in Ordnung, liest die Karten ordnungsgemäß ein.
Ist getestet mit einem anderen Programm.

Kann mir jemand erklären was es mit dieser Fehlermeldung auf sich hat?

Vielen Dank im voraus

Mathias Päzolt

Mathias Päzolt

Hallo,
sehr interessanter Artikel, aber ich wäre nicht ich, wenn ich nicht was zu meckern hätte :-)
Da ich ein anderes RFID-Modul verwende (VMA405 von Velleman, fand sich noch in der Bastelkiste) wäre ein mapping für alle Kontakte sehr sinnvoll, da sich mein Modul in der Beschaltung unterscheidet.

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione