In deze multi-part series, wij wijden ons aan de mogelijkheden van toegang tot beperking van apparaten of installaties met contactloze kaarten van MiFare-serie met behulp van de relatief ver verbeiteteten RFID-RC522 module.
In het eerste deel van deze serie kijken we naar wat onderdelen die we nodig hebben, hoe onze hardware circuit eruit ziet en om het programma een eerste kaart van de toepassing. In deze toepassing, een Relais van een programma code die bevoegd kaart wordt in-en uitgeschakeld. Door middel van een multi-gekleurde LED wordt weergegeven, als de kaart lezen, gerechtigd is (was) om het Relais te schakelen op of niet. Het Relais potentiaalvrij aangesloten verbruikers. Het is:
WAARSCHUWING!! Het is bij het Schakelen van lasten over een 30-Volt of 230 Volt netspanning levensgevaar door een elektrische schok. Let op de juiste isolatie en pakkende veiligheidsvoorschriften en de operationele voorschriften volgens DIN VDE 0105.
In het bijzonder, zijn altijd de 5 veiligheidsregels worden toegepast, wordt het https://de.wikipedia.org/wiki/F%C3%BCnf_Sicherheitsregeln gevonden.
Maar nu komen we terug aan ons project en onze onderdelen lijst. U moet de volgende onderdelen:
1x RC522 kaartlezer + Mifare Classic Kaart
opmerkingen:
In de RC522 card reader pakket zijn de MiFare Classic kaarten, die voor ons project is volledig voldoende. Het is dus niet noodzakelijk om een aparte RfId-kaarten.
In de KY-016 RGB LED-module vorwieder staat voor de directe bediening van de poort pennen zijn reeds opgenomen. Daarom worden deze niet afzonderlijk worden gebruikt. Als u dat wilt, zonder de RGB-module wordt gewerkt, zijn nodig, naast de RGB-Led met common kathode met 3x 220 Ohm weerstanden.
De Pin-Toewijzing voor de RGB-LED ' s:
output NodeMcU |
kleur van LED |
D2 |
(B)lau |
D3 |
(G)reen |
D4 |
(R)ot |
Op een Breadboard de componenten als volgt aangesloten:
Gebouwd ziet het circuit als dit:
Op het beeld van de goed te detecteren en de voeding van de schakeling met een Relais geactiveerd. Dit is de 8 Volt voedingsspanning is ongeveer 190 mA. Zonder Relais ingeschakeld in de behoeften van de huidige circa 110 mA. Het is dus belangrijk dat u niet per se een externe spanningsbron en niet te vertrouwen op de USB-voeding.
Na hebben we alle onderdelen samen, we zetten onze Arduino om DE Ondersteuning van de ESP8266 Chips, kies tools - > Boord van de "Generieke ESP8266 module". Vervolgens selecteren we onder' de COM-Poort, voor onze NodeMcu is aangesloten. Nu voegen we de volgende Code:
#include <SPI.h> #include <MFRC522.h> #define RST_PIN 5 / SPI/ Reset Pin (D1-uitgang) #define RELAIS_PIN 16 // Relais (D0-uitgang) [LAAG Actief] - Ook interne LED sluiten op de USB-Poort #define SS_PIN 15 // SPI Slave Select Pin #define RGBLED_R 2 // Rood (D4, output) #define RGBLED_G 0 // Groen (D3, output) - Ook interne LED op de ESP-module #define RGBLED_B 4 // Blue (D2 uitgang) #define LED_BUILTIN 16 #define PIN_WIRE_SDA 4 #define PIN_WIRE_SCL 5 MFRC522 mfrc522(SS_PIN, RST_PIN); // instantie van de MFRC522 kan genereren MFRC522::MIFARE_Key toets; byte myValidCardUID[4] = {0x00,0x00,0x00,0x00}; // Hier de seriële interface lezen // UID invoeren, voor het lezen van de bediening, in de toekomst, // geldig zou moeten zijn, en zal het Relais worden geschakeld // om. void setup() { pinMode(RST_PIN,OUTPUT); pinMode(RELAIS_PIN,OUTPUT); pinMode(RGBLED_R,OUTPUT); pinMode(RGBLED_G,OUTPUT); pinMode(RGBLED_B,OUTPUT); digitalWrite(RELAIS_PIN,HIGH); // Relais inactief digitalWrite(RST_PIN,, HOGE); digitalWrite(RGBLED_R,LAGE); //Led UIT digitalWrite(RGBLED_G,LAGE); digitalWrite(RGBLED_B,LAGE); Seriële.beginnen(9600); // Seriële communicatie met de PC initialiseren Seriële.println("Ser. Kom op. OK."); SPI -.beginnen(); // initialiseren van de SPI communicatie digitalWrite(RST_PIN,- LAGE); vertraging(300); digitalWrite(RST_PIN,, HOGE); mfrc522.PCD_Reset(); mfrc522.PCD_Init(); // initialiseren MF rc522 reader module MF rc522.PCD_AntennaOn(); opbrengst(); digitalWrite(RGBLED_R,HIGH); //Led-kleur Paars - de initialisatie is voltooid digitalWrite(RGBLED_G,LAGE); digitalWrite(RGBLED_B,HOGE); } void loop() { als (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial() ) // PICC = nabijheid integrated circuit card // kontaktlose Chipkarte { Serieel.afdrukken("PICC UID:"); voor (byte ik = 0; ik < mfrc522.uid.maat; ik++) { Serieel.afdrukken(mfrc522.uid.uidByte[ik] < 0x10 ? " 0" : " "); Serieel.afdrukken(mfrc522.uid.uidByte[ik], HEX); } bool IsValid = ware; voor (byte ik = 0; ik < sizeof(myValidCardUID); ik++) { als (mfrc522.uid.uidByte[ik] != myValidCardUID[ik]) { IsValid = false; } } als (IsValid) { bool PinState= digitalRead(RELAIS_PIN); PinState = !PinState; digitalWrite(RELAIS_PIN, PinState); digitalWrite(RGBLED_R,LAGE); //Led Grün digitalWrite(RGBLED_G,HOGE); digitalWrite(RGBLED_B,LAGE); Serieel.afdrukken(" gültig."); vertraging(2000); digitalWrite(RGBLED_R,LAGE); //Led Kleur Blau Leser ist in Grundzustand digitalWrite(RGBLED_G,LAGE); digitalWrite(RGBLED_B,HOGE); } anders { digitalWrite(RGBLED_R,HIGH); //Led-Rot - Letzte Karte oorlog ungültig digitalWrite(RGBLED_G,LAGE); digitalWrite(RGBLED_B,LAGE); Serieel.afdrukken(" ungültig."); vertraging(2000); } Seriële.println(); mfrc522.PICC_HaltA(); // Versetzt sterven aktuelle Karte in einen Ruhemodus. vertraging(1000); } opbrengst(); // interne ESP8266 Funktionen aufrufen }
Wir kompilieren den Code und beladen Ihn auf unsere NodeMcu hoch. Während des Hochladens des Schetsen leuchtet unsere RGB Led "rot". Nach erfolgreichem Uploaden wechselt sterven Farbe der LED-auf "lila". Durch den Wechsel der Farbe wird angezeigt, das der Uploaden Vorgang erfolgreich oorlog.
Damit ein Hochladen auf die NodeMcu funktioniert, muss während der Kompiliervorganges der Voorproefje "Flash" auf der NodeMcu gedrückt werden und gedrückt gehalten werden.
Wenn der Upload -Vorgang erfolgreich abgeschlossen wurde, starten wir in der IDE unser Serielles Terminal und stellen sterven Übertragungsgeschwindigkeit auf 9600 Baud ein.
Nun ist unser Leser ready sterven erste Karte einzulesen. Diese wird natürlich nicht als zugangsberechtigt angesehen, da unser Leser ja Ihre ID noch nicht kennt. Sterven Ausgabe im Terminal sollte dann wie folgt uitzien:
Dies ist eine erwartete Ausgabe. Damit diese Karte von unserem Leser zukünftig als gültig akzeptiert wird, ändern wir nun sterven Zeile "byte myValidCardUID[4] = {0x00,0x00,0x00,0x00};" in de "byte myValidCardUID[4] = {0x16,0x15,0x8D,0x05};" kompilieren neu und beladen unseren Code auf die Node MCU hoch. Danach wird diese Karte als gültig und erkannt man kann das Relais durch vorhalten der gültigen Karte umschalten. Sterft wird durch ein 2 sekündiges grünes leuchten der LED bestätigt.
Valt eine ungültige Karte vorgehalten wird, schaltet sterven LED auf dauerhaft "rot". Es ist somit erkennbar, ob in der Vergangenheit ein Fehlversuch durch 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 kan. Dies ist zwar prinzipiell richtig, jedoch wollen wir unseren Kartenleser um komfortable Konfigurationsmöglichkeiten per Netzwerk voor de vereisten blijven toevoegen sowie Sicherheitsfunktionen ergänzen. Alle das ist aber Teil der kommenden Teile dieser Reihe.
Der Autor empfiehlt das hier beschriebene Systemen nicht als Zugangskontrolle für Türsysteme oder anderen sicherheitskritischen Systemen einzusetzen, da u.een sterven dem Systeem zugrundeliegende PICC "Mifare Classic" bereits geknackt wurde und daher als unsicher eingestuft wurde.
Viel Spaß beim Nachbauen und bis zum nächsten Beitrag :) Tobias Kuch
8 Reacties
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
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
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
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
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
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
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
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.