RFID Reader - Arduino Ethernet RC522

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • hismastersvoice
    Supermoderator
    • 25.08.2015
    • 6916

    RFID Reader - Arduino Ethernet RC522

    Auf mehrfachen Wunsch erstelle ich hier mal ein kurzes HowTo zu meinem RFID-Reader.

    Hardware
    1 x Arduino Nano
    1 x Ethernet W5100
    1 x RC522
    1-4 x RGB LEDs
    1 x Buzzer (Summer)
    1 x Platine (universal)

    Elektrische Verbindungen (Schaltung)
    Ethernet zu Arduino
    MO -> Pin 11
    MI -> Pin 12
    SCK -> Pin 13
    SS -> Pin 10
    5v -> 5V
    GND -> GND

    RC522 zu Arduino
    MO -> Pin 11
    MI -> Pin 12
    SCK -> Pin 13
    SDA -> Pin 9
    5v -> 5V
    GND -> GND

    RGB-LEDs und Buzzer
    Grün -> Pin7
    Blau -> Pin 6
    Rot -> Pin 5
    Buzzer -> Pin 4
    !! LEDs brauchen einen Vorwiderstand bitte passend dazu einbauen !!

    Stromversorgung
    5V -> VIN
    GND -> GND

    Arduino Code
    Code:
    // RFID 2 Loxone Miniserver
    // DHCP Version
    
    //Bibliotheken die benoetigt werden
    #include <SPI.h>
    #include <Ethernet.h>
    #include <EthernetUdp.h>
    #include <MFRC522.h>
    
    // Definition Befehle
    #define LED_ON HIGH
    #define LED_OFF LOW
    #define BUZZER_ON HIGH
    #define BUZZER_OFF LOW
    
    // Definition Pins
    #define greenLed 7 // Farbe gruen RGB LED
    #define blueLed 6 // Farbe blau RGB LED
    #define redLed 5 // Farbe rot RGB LED
    #define buzzer 4 // Buzzer/Summer
    
    // Definition Pins fuer RC522
    #define SS_PIN 9 // SS-Pin fuer RC522
    #define RST_PIN 8 //RST-Pin fuer RC522
    
    // MFRC522 Instanz eroeffnen
    MFRC522 mfrc522(SS_PIN, RST_PIN);
    
    // Variablen
    byte readCard[4];
    String uID;
    
    // Netzwerk Einstellungen
    // bei mehr als einem Reader MAC anpassen
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xAC };
    // UDP Port zum Datenempfang Lox MS -> Arduino
    unsigned int ARDUPORT = 7003;
    
    // IP Lox MS
    IPAddress MSIP(192, 168, 136, 200);
    // UDP Port zum Datenversand Arduino -> Lox MS
    unsigned int MSPORT = 7003;
    
    // Daten-Buffer
    char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
    
    // EthernetUDP Instanz um UDP zu senden/empfangen
    EthernetUDP Udp;
    
    // Programm
    void setup() {
      Serial.begin(9600);
    
      pinMode(greenLed, OUTPUT);
      pinMode(blueLed, OUTPUT);
      pinMode(redLed, OUTPUT);
      pinMode(buzzer, OUTPUT);
      digitalWrite(buzzer, BUZZER_OFF); // stellt sicher das
      digitalWrite(redLed, LED_OFF);
      digitalWrite(greenLed, LED_OFF);
      digitalWrite(blueLed, LED_OFF);
    
      if (!Ethernet.begin(mac)) Serial.println("DHCP fehlgeschlagen");
      else {
    
        Serial.println ("Netzwerkdaten");
        Serial.println ("---------------");
        Serial.print("Arduino MAC: ");
        Serial.print(mac[0], HEX);
        Serial.print(":");
        Serial.print(mac[1], HEX);
        Serial.print(":");
        Serial.print(mac[2], HEX);
        Serial.print(":");
        Serial.print(mac[3], HEX);
        Serial.print(":");
        Serial.print(mac[4], HEX);
        Serial.print(":");
        Serial.println(mac[5], HEX);
        Serial.print("Arduino IP: ");
        Serial.println(Ethernet.localIP());
        Serial.print("Arduino UDP Port: ");
        Serial.println(ARDUPORT);
        Serial.println ("---------------");
        Serial.print ("Miniserver IP: ");
        Serial.println(MSIP);
        Serial.print("Miniserver UDP Port: ");
        Serial.println(MSPORT);
        Serial.println ("---------------");
      }
      Udp.begin(ARDUPORT); // Start UDP
    
      SPI.begin();        // Init SPI bus
      mfrc522.PCD_Init(); // Init MFRC522 Karte
      mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max); // Setzt Antenne auf max. Empfang
    }
    
    void loop() {
    
      // schaut on ein UDP Befehl empfangen wurde
      checkUDP();
    
      if (!strcmp(packetBuffer, "OK"))
      {
        uuid_ok();
      }
      else if (!strcmp(packetBuffer, "NOK"))
      {
        uuid_notok();
      }
      else if (!strcmp(packetBuffer, "SAB"))
      {
        uuid_lock();
      }
      else {
        wait_picc();
      }
    
      // RDIF lesen und Werte bearbeiten
      if ( ! mfrc522.PICC_IsNewCardPresent()) {
        return;
      }
      if ( ! mfrc522.PICC_ReadCardSerial()) {
        return;
      }
      int val1 = (mfrc522.uid.uidByte[0]);
      int val2 = (mfrc522.uid.uidByte[1]);
      int val3 = (mfrc522.uid.uidByte[2]);
      int val4 = (mfrc522.uid.uidByte[3]);
    
      String valA = String(val1, HEX);
      String valB = String(val2, HEX);
      String valC = String(val3, HEX);
      String valD = String(val4, HEX);
    
      uID = valA + valB + valC + valD;
    
      Serial.print("RFID-Key: ");
      Serial.print(uID);
      Serial.println();
      sendUDP(uID);
      mfrc522.PICC_HaltA();
      return;
    }
    
    //empfangene UDP-Befehle auswerten
    void checkUDP()
    {
      // if there's data available, read a packet
      int packetSize = Udp.parsePacket();
      if (packetSize)
      {
        // read the packet into packetBufffer
        Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
      }
      delay(10);
    }
    
    //UDP-Befehl senden
    void sendUDP(String text)
    {
      Udp.beginPacket(MSIP, MSPORT);
      Udp.print(text);
      Udp.endPacket();
      delay(10);
    }
    
    //RFID PIC OK
    // LED gruen geht an, Buzze piep einmal kurz (50ms)
    void uuid_ok() {
      digitalWrite(blueLed, LED_OFF);
      digitalWrite(redLed, LED_OFF);
      digitalWrite(greenLed, LED_ON);
      digitalWrite(buzzer, BUZZER_ON);
      delay(50);
      digitalWrite(buzzer, BUZZER_OFF);
      delay(1000);
      for (int i = 0; i < UDP_TX_PACKET_MAX_SIZE; i++) packetBuffer[i] = 0;
    }
    
    //RFID PIC nicht OK
    // LED rote geht an, Buzze piep zweimal kurz (50ms)
    void uuid_notok() {
      digitalWrite(greenLed, LED_OFF);
      digitalWrite(blueLed, LED_OFF);
      digitalWrite(redLed, LED_ON);
      digitalWrite(buzzer, BUZZER_ON);
      delay(50);
      digitalWrite(buzzer, BUZZER_OFF);
      delay(100);
      digitalWrite(buzzer, BUZZER_ON);
      delay(50);
      digitalWrite(buzzer, BUZZER_OFF);
      delay(1000);
      for (int i = 0; i < UDP_TX_PACKET_MAX_SIZE; i++) packetBuffer[i] = 0;
    }
    
    //Schloss gesperrt
    // LED rot geht an, Buzze piep dreimal lang (250ms)
    void uuid_lock() {
      digitalWrite(greenLed, LED_OFF);
      digitalWrite(blueLed, LED_OFF);
      digitalWrite(redLed, LED_ON);
      digitalWrite(buzzer, BUZZER_ON);
      delay(250);
      digitalWrite(buzzer, BUZZER_OFF);
      delay(50);
      digitalWrite(buzzer, BUZZER_ON);
      delay(250);
      digitalWrite(buzzer, BUZZER_OFF);
      delay(50);
      digitalWrite(buzzer, BUZZER_ON);
      delay(250);
      digitalWrite(buzzer, BUZZER_OFF);
      delay(1000);
      for (int i = 0; i < UDP_TX_PACKET_MAX_SIZE; i++) packetBuffer[i] = 0;
    }
    
    //Wartet auf RFID PIC
    //Grundeinstellung blaue LED ist ein und wartet auf PICC
    void wait_picc() {
      digitalWrite(greenLed, LED_OFF);
      digitalWrite(blueLed, LED_ON);
      digitalWrite(redLed, LED_OFF);
    }





    Wie funktioniert es
    Der Reader wartet auf einen RFID-Picc, die Lesebereitschaft wird mit der blauen LED signalisiert.
    Wird nun ein Picc aufgelegt liest er diesen aus und sendet ihn per UDP an den MiniServer.
    Ist der ausgelesene Key bei einem User hinterlegt sendet der MS per UDP „OK“ an den Arduino zurück.
    Ist der Key nicht hinterlegt, also „Unbekannt“ sendet der MS „NOK“ an den Arduino.
    Wird 5x hinter einander ein falscher Key (Unbekannt) aufgelegt wird das Schloss gesperrt.
    Es muss dann über die Visu wieder freigegeben werden. Die gewünschte Anzahl der Fehlversuche kann im Zähler angepasst werden.

    Nötige Anpassungen
    Arduino Code
    MAC-Adresse (mac)
    Port auf den der Arduino hört (ARDUPORT)
    IP MiniServer (MSIP)
    Port MiniServer (MSPORT)

    Loxone
    Befehlserkennung für User 1 und 2... und so viel User ihr eben anlegen wollt.
    Empfangsport Virtuller-Eingang... Muss gleich MSPORT im Arduino Code sein
    Sendeadresse Virtueller Ausgang ... sieht dann so aus "/dev/udp/ARDUIP/ARDUPORT" z.B. "/dev/udp/192.168.1.2/7000

    Empfehlung
    Wenn euer Router oder DHCP-Server die Möglichkeit hat am besten die vergebene IP-Adresse reservieren lassen.

    Bilder Klicke auf die Grafik für eine vergrößerte Ansicht

Name: 20160110_161132.jpg
Ansichten: 2140
Größe: 19,8 KB
ID: 21163
    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: 20160110_180756.jpg
Ansichten: 1289
Größe: 18,3 KB
ID: 21164
    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: 20160110_183422.jpg
Ansichten: 1266
Größe: 17,9 KB
ID: 21165








    Loxone Datei
    Config ist im Anhang

    Adruino Library
    rfid.zip im Anhang
    Zuletzt geändert von hismastersvoice; 13.01.2016, 17:14.
    Kein Support per PN!
  • Michael Rene Maurer
    LoxBus Spammer
    • 25.08.2015
    • 220

    #2
    TOP!
    Welche Türstation hast du da? Sieht gut aus!
    LG MRM

    Kommentar

    • hismastersvoice
      Supermoderator
      • 25.08.2015
      • 6916

      #3
      Legrand Bticino...
      Hier kann man alle Teile einzeln kaufen, so kann man alles zusammenstellen wie SmartHomer es braucht
      Kein Support per PN!

      Kommentar

      • Gast

        #4
        Danke für das Tutorial.
        Mit welcher Loxone Version hast Du das File erstellt? Ich bekomme die Meldung, dass es mit einer höheren erstellt wurde. Ich habe hier Loxone Config 7.1.12.31

        Kommentar

        • hismastersvoice
          Supermoderator
          • 25.08.2015
          • 6916

          #5
          7.2.12.9 ist meine
          Kein Support per PN!

          Kommentar

          • Gast

            #6
            Ah, die ist aber nicht öffentlich, oder?

            Kommentar


            • hismastersvoice
              hismastersvoice kommentierte
              Kommentar bearbeiten
              Stimmt, habe gerade eine Beta installiert.
              Wenn es nicht geht müsste ich das ganze nochmal mit einer &quot;normalen&quot; machen.
          • Gast

            #7
            Ja, probiere das noch mal bitte. Die Datei hat in der Version 7.1 dann keinen Inhalt.

            Kommentar

            • sonorobby
              LoxBus Spammer
              • 26.08.2015
              • 317

              #8
              stellst du das ins WIKI? Mir fehlt noch wie was zusammengebaut wird, oder hab ich das überlesen? Kommt evtl. wenn die Teile ankommen...

              Kommentar

              • hismastersvoice
                Supermoderator
                • 25.08.2015
                • 6916

                #9
                Steht unter "elektische Schaltung" einfach die Pins miteinander verbinden. (Platine und Drähte)
                Kein Support per PN!

                Kommentar

                • hismastersvoice
                  Supermoderator
                  • 25.08.2015
                  • 6916

                  #10
                  Gast
                  Hab es mal mit der neuesten "normalen" Version gespeichert und hochgeladen, versuch es mal.
                  Kein Support per PN!

                  Kommentar

                  • Gast

                    #11
                    Danke. Jetzt hat es funktioniert.
                    Vielen Dank

                    Kommentar

                    • MarcusS
                      LoxBus Spammer
                      • 25.08.2015
                      • 389

                      #12
                      zu eurer Info. Der durchschnittliche Einbrecher verwendet vermutlich immer noch Schraubendreher und Brecheisen, aber man sollte sollte es halt im Auge behalten.
                      RFID-Transponderkarten, die für die elektronische Zutrittskontrolle genutzt werden, lassen sich Sicherheitsexperten zufolge oft "trivial einfach" klonen.
                      Zuletzt geändert von MarcusS; 14.01.2016, 07:31.
                      DoorPi DIY Türsprechstelle how to

                      Kommentar

                      • hismastersvoice
                        Supermoderator
                        • 25.08.2015
                        • 6916

                        #13
                        Ja alles... Schlösser, Fenster, Türen und auch iButtons

                        Die Frage ist nur wie aufwendig das ganze wird...
                        "Für einen "analytischen Angriff" müsse man Authentifizierungsvorgänge beziehungsweise den dabei stattfinden Kommunikationsaustausch mitlesen"

                        Ich halte es für extrem unrealitisch das jemand so einen Aufwand betreibt um "vielleicht" was zu klauen.
                        Bei den meisten Einfamileinhäusern können die Einbrecher nur erahnen was es zu holen gibt.

                        Zum Thema iButton
                        Auch hier gibt es ähnlich dem RFID eine Datenübertragung die aufgezeichnet werden kann.
                        Mit einem Cloner kann dann ein neuer Schlüssel erstellt werden.
                        z.B. https://blog.danman.eu/cloning-ibutt...w1990-and-avr/
                        Es gibt aber noch unzählige Beiträge dazu im Netz

                        Damit beenden wir das bitte hier...
                        Wenn Gesprächsbedraf besteht bitte neuen Thread aufmachen
                        Kein Support per PN!

                        Kommentar


                        • MarcusS
                          MarcusS kommentierte
                          Kommentar bearbeiten
                          Alles gut. Ich wollte auch keine Grundsatzdiskussion aufmachen. Hinweise geben, mit denen jeder loslaufen kann um sich zu informieren um dann zu einer eigenen Entscheidung zu kommen. Und damit Punkt ;-)
                      • uli
                        LoxBus Spammer
                        • 30.08.2015
                        • 224

                        #14
                        Genial, genau soetwas habe ich gesucht!

                        Sollte die Leseeinheit auch mit diesen Chips klarkommen? https://www.nfc-tag.de/nfc-sticker/8...38mm-4096-byte
                        Dort steht nichts von der Frequenz.

                        Kommentar


                        • Vossi
                          Vossi kommentierte
                          Kommentar bearbeiten
                          Das sind doch NFC-Tags -- das hat meines Wissens nichts mit RFID zu tun. Der Leser oben ist für RFID...

                        • uli
                          uli kommentierte
                          Kommentar bearbeiten
                          Also mit Mobotix funktionieren die Aufkleber und die hat ja offiziell RFID als Standard.
                      • hismastersvoice
                        Supermoderator
                        • 25.08.2015
                        • 6916

                        #15
                        Zitat von uli

                        Sollte die Leseeinheit auch mit diesen Chips klarkommen? https://www.nfc-tag.de/nfc-sticker/8...38mm-4096-byte
                        Dort steht nichts von der Frequenz.
                        Kann ich leider nicht sagen...
                        Aber prinzipiell gegen alle Mifare 13,56MHz Chips.

                        Kein Support per PN!

                        Kommentar

                        Lädt...