Проект недоступен для бесплатного скачивания! Если вы заинтересованы в приобретении программной части проекта с функциями, описанными на данной странице, свяжитесь с: martinius96@gmail.com
ESP8266 WiFi RFID NFC RC522 PHP, HTML MySQL AJAX Bootstrap Arduino Ethernet ESP32 SigFox LoRa IoT Eagle

RFID система с онлайн-управлением - Попробуйте онлайн ЗДЕСЬ!!!


администратор:


  • Управляет веб-интерфейсом
  • Просмотр действий в режиме реального времени - прикрепление карты, включая ее адрес и время, когда она была прикреплена к результату проверки: VERIFIED / UNLIMITED.
  • В отчете предлагается 100 новых карточек, и он носит исключительно информативный характер.
  • В разделе «Добавить карту» администратор может подтвердить карту одним щелчком мыши - авторизовать ее, которая была прикреплена, но еще не была авторизована.
  • Если администратору известен адрес карты, которого еще нет в системе, он также может войти в систему вручную.
  • Помимо отображения последних 5 вложений, администратор видит все неавторизованные карты и авторизованные карты, которые были к ним прикреплены, включая даты и время авторизации.
  • На вкладке удаления карты вы можете авторизовать авторизованную карту - карта не будет включена в список неавторизованных карт, она будет назначена там автоматически после ее прикрепления.
  • В последней вкладке - Программа, администратор может просматривать схему считывателя RFID на плате разработки N82MCU NodeMCU, может просматривать и загружать исходный код, загруженный в данный момент в микроконтроллер.
  • Для лучшей переносимости программы NodeMCU также имеется ссылка на библиотеку считывателя RFID RC522, таблицу считывателей и NodeMCU.
  • Возможность войти в систему, отписаться от администратора, открыть дверь из Интернета в случае потери карты и т. д. доступна только в платной версии этого программного обеспечения.
  • пользователь:


  • Использует считыватели RFID, физически прикрепляя тег NFC, тег ключа, карту, браслет.
  • Если проверен подключенный чип, NodeMCU освободит дверь на 5 секунд.
  • Если пользователь не прошел проверку подлинности из-за непроверенного чипа или недоступности проверки сайта, блокировка не разблокируется - она не будет отозвана.
  • Пользователь не проинформирован о том, что он не проверил свой чип как таковой. Его попытка записывается в базу данных при условии, что NodeMCU подключается к сайту, где проверяется карта.
  • Пользователь также может использовать свою карточку банкомата, карточку ISIC или карточку сотрудника, чей физический адрес может прочитать читатель, для проверки необходимо соответствовать стандарту ISO / IEC 14443 А.
  • Принцип открытия замка:

    Технология проекта:

  • PHP - функциональность системы - проверка чипа
  • HTML - графические и функциональные элементы системы - кнопки, щелчки
  • AJAX - динамический вызов PHP-скриптов - данные в реальном времени о прикреплении чипа к считывателю RFID
  • C - Wiring - язык программирования для платы разработки NodeMCU с чипом ESP8266.
  • Бесплатная версия (проверка карты, никаких других функций безопасности):

    Аппаратное обеспечение для проекта:

    ;
  • NodeMCU v2/v3 Lolin
  • RFID RC522 (13.56MHz)
  • Электромагнитные реле - 5 вольт
  • Соленоид для блокировки - 12 вольт / 24 вольт - управляется через реле
  • Исходный код для NodeMCU 1.0 (v2/v3):

    /*|----------------------------------------------------------|*/
    /*|SKETCH PRE RFID SYSTEM S WEB ADMINISTRACIOU  (FUNGUJE)    |*/
    /*|VYHOTOVIL: MARTIN CHLEBOVEC                               |*/
    /*|FB: https://www.facebook.com/martin.s.chlebovec           |*/
    /*|EMAIL: martinius96@gmail.com                              |*/
    /*|Doska: NodeMCU v3 Lolin (v2 compatible)                   |*/
    /*|CORE: 2.5.0 (2.5.2)                                       |*/
    /*|WEB: https://arduino.php5.sk                              |*/
    /*|----------------------------------------------------------|*/
    #include <ESP8266WiFi.h>
    #include <WiFiClientSecure.h>
    #include <SPI.h>
    #include <RFID.h>
    
    const char * ssid = "MenoWifiSiete";
    const char * password = "HesloWifiSiete";
    const char * host = "arduino.php5.sk"; //bez https a www
    const int httpsPort = 443; //https port
    
    const int rele = 16; //GPIO16 == D0
    const char fingerprint[] PROGMEM = "b0 6d 7f 8c 98 78 8e 6e 0a 57 a8 2f 7e d1 40 2a 1e 3f 48 f7";
    #define SS_PIN 4
    #define RST_PIN 5
    RFID rfid(SS_PIN, RST_PIN);
    unsigned long kod;
    void setup() {
      Serial.begin(9600);
      SPI.begin();
      rfid.init();
      pinMode(rele, OUTPUT);
      digitalWrite(rele, HIGH); //hotfix
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi uspesne pripojene");
      Serial.println("IP adresa: ");
      Serial.println(WiFi.localIP());
      Serial.println("Ready");
    }
    
    void loop() {
      if (WiFi.status() != WL_CONNECTED) {
        WiFi.begin(ssid, password);
      }
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      if (rfid.isCard()) {
        if (rfid.readCardSerial()) {
          Serial.println(" ");
          Serial.println("Card found");
          kod = 10000 * rfid.serNum[4] + 1000 * rfid.serNum[3] + 100 * rfid.serNum[2] + 10 * rfid.serNum[1] + rfid.serNum[0];
          Serial.println(kod);
          String kodik = String(kod);
          WiFiClientSecure client;
          Serial.printf("Using fingerprint '%s'\n", fingerprint);
          client.setFingerprint(fingerprint);
          if (client.connect(host, httpsPort)) {
            String url = "/rfid/karta.php?kod=" + kodik;
            //String url = "/rfid/karta.php?kod="+kodik+"&origin=Lolin";
            //String url = "/rfid/karta.php?kod="+kodik+"&origin=Lolin&topsecret=topsecret";
            client.print(String("GET ") + url + " HTTP/1.0\r\n" + "Host: " + host + "\r\n" + "User-Agent: NodeMCU\r\n" + "Connection: close\r\n\r\n");
            while (client.connected()) {
              String line = client.readStringUntil('\n');
              if (line == "\r") {
                break;
              }
            }
            String line = client.readStringUntil('\n');
            if (line == "OK") {
              digitalWrite(rele, LOW); //invertovane spinane rele active LOW
              delay(5500);              //cas otvorenia dveri
              digitalWrite(rele, HIGH); //zatvor zamok
            } else if (line == "NO") {
              digitalWrite(rele, HIGH);
            } else {
              Serial.println("Prosim pockajte s dalsim overenim karty 5 sekund!");
            }
          }
          client.stop();
        }
      }
      rfid.halt();
    }
    

    ESP32 - HTTPS


    /*|----------------------------------------------------------|*/
    /*|SKETCH PRE RFID SYSTEM S WEB ADMINISTRACIOU               |*/
    /*|VYHOTOVIL: MARTIN CHLEBOVEC                               |*/
    /*|FB: https://www.facebook.com/martin.s.chlebovec           |*/
    /*|EMAIL: martinius96@gmail.com                              |*/
    /*|Doska: ESP32 DevKit V1 - V4                               |*/
    /*|CORE: 1.0.0+                                              |*/
    /*|WEB: https://arduino.php5.sk                              |*/
    /*|----------------------------------------------------------|*/
    #include <WiFi.h>
    #include <WiFiClientSecure.h>
    #include <SPI.h>
    #include <RFID.h>
    const char * ssid = "wifi_meno";
    const char * password = "wifi_heslo";
    const char * host = "arduino.php5.sk";
    const int httpsPort = 443; //http port
    const int rele = 17;
    #define SS_PIN 21
    #define RST_PIN 22
    RFID rfid(SS_PIN, RST_PIN);
    unsigned long kod;
    const char* test_root_ca = \
                               "-----BEGIN CERTIFICATE-----\n" \
                               "MIIEsTCCA5mgAwIBAgIQCKWiRs1LXIyD1wK0u6tTSTANBgkqhkiG9w0BAQsFADBh\n" \
                               "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" \
                               "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n" \
                               "QTAeFw0xNzExMDYxMjIzMzNaFw0yNzExMDYxMjIzMzNaMF4xCzAJBgNVBAYTAlVT\n" \
                               "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n" \
                               "b20xHTAbBgNVBAMTFFJhcGlkU1NMIFJTQSBDQSAyMDE4MIIBIjANBgkqhkiG9w0B\n" \
                               "AQEFAAOCAQ8AMIIBCgKCAQEA5S2oihEo9nnpezoziDtx4WWLLCll/e0t1EYemE5n\n" \
                               "+MgP5viaHLy+VpHP+ndX5D18INIuuAV8wFq26KF5U0WNIZiQp6mLtIWjUeWDPA28\n" \
                               "OeyhTlj9TLk2beytbtFU6ypbpWUltmvY5V8ngspC7nFRNCjpfnDED2kRyJzO8yoK\n" \
                               "MFz4J4JE8N7NA1uJwUEFMUvHLs0scLoPZkKcewIRm1RV2AxmFQxJkdf7YN9Pckki\n" \
                               "f2Xgm3b48BZn0zf0qXsSeGu84ua9gwzjzI7tbTBjayTpT+/XpWuBVv6fvarI6bik\n" \
                               "KB859OSGQuw73XXgeuFwEPHTIRoUtkzu3/EQ+LtwznkkdQIDAQABo4IBZjCCAWIw\n" \
                               "HQYDVR0OBBYEFFPKF1n8a8ADIS8aruSqqByCVtp1MB8GA1UdIwQYMBaAFAPeUDVW\n" \
                               "0Uy7ZvCj4hsbw5eyPdFVMA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEF\n" \
                               "BQcDAQYIKwYBBQUHAwIwEgYDVR0TAQH/BAgwBgEB/wIBADA0BggrBgEFBQcBAQQo\n" \
                               "MCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBCBgNVHR8E\n" \
                               "OzA5MDegNaAzhjFodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRHbG9i\n" \
                               "YWxSb290Q0EuY3JsMGMGA1UdIARcMFowNwYJYIZIAYb9bAECMCowKAYIKwYBBQUH\n" \
                               "AgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCwYJYIZIAYb9bAEBMAgG\n" \
                               "BmeBDAECATAIBgZngQwBAgIwDQYJKoZIhvcNAQELBQADggEBAH4jx/LKNW5ZklFc\n" \
                               "YWs8Ejbm0nyzKeZC2KOVYR7P8gevKyslWm4Xo4BSzKr235FsJ4aFt6yAiv1eY0tZ\n" \
                               "/ZN18bOGSGStoEc/JE4ocIzr8P5Mg11kRYHbmgYnr1Rxeki5mSeb39DGxTpJD4kG\n" \
                               "hs5lXNoo4conUiiJwKaqH7vh2baryd8pMISag83JUqyVGc2tWPpO0329/CWq2kry\n" \
                               "qv66OSMjwulUz0dXf4OHQasR7CNfIr+4KScc6ABlQ5RDF86PGeE6kdwSQkFiB/cQ\n" \
                               "ysNyq0jEDQTkfa2pjmuWtMCNbBnhFXBYejfubIhaUbEv2FOQB3dCav+FPg5eEveX\n" \
                               "TVyMnGo=\n" \
                               "-----END CERTIFICATE-----\n";
    WiFiClientSecure client;
    void setup() {
      Serial.begin(115200);
      SPI.begin();
      rfid.init();
      pinMode(rele, OUTPUT);
      digitalWrite(rele, HIGH); //hotfix
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      client.setCACert(test_root_ca);
      Serial.println("");
      Serial.println("WiFi uspesne pripojene");
      Serial.println("IP adresa: ");
      Serial.println(WiFi.localIP());
      Serial.println("Ready");
    }
    
    void loop() {
      if (WiFi.status() != WL_CONNECTED) {
        WiFi.begin(ssid, password);
      }
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      if (rfid.isCard()) {
        if (rfid.readCardSerial()) {
          Serial.println(" ");
          Serial.println("Card found");
          kod = 10000 * rfid.serNum[4] + 1000 * rfid.serNum[3] + 100 * rfid.serNum[2] + 10 * rfid.serNum[1] + rfid.serNum[0];
          Serial.println(kod);
          String kodik = String(kod);
          client.stop();
          if (client.connect(host, httpsPort)) {
            String url = "/rfid/karta.php?kod=" + kodik;
            //String url = "/rfid/karta.php?kod="+kodik+"&origin=ESP32";
            //String url = "/rfid/karta.php?kod="+kodik+"&origin=ESP32&topsecret=topsecret";
            client.print(String("GET ") + url + " HTTP/1.0\r\n" + "Host: " + host + "\r\n" + "User-Agent: ESP32\r\n" + "Connection: close\r\n\r\n");
            while (client.connected()) {
              String line = client.readStringUntil('\n');
              if (line == "\r") {
                break;
              }
            }
            String line = client.readStringUntil('\n');
            if (line == "OK") {
              digitalWrite(rele, LOW); //invertovane spinane rele active LOW
              delay(5500);              //cas otvorenia dveri
              digitalWrite(rele, HIGH); //zatvor zamok
            } else if (line == "NO") {
              digitalWrite(rele, HIGH);
            } else{
              Serial.println("Prosim pockajte s dalsim overenim karty 5 sekund!");
              }  
          }
        }
      }
    
      rfid.halt();
    }
    

    помолвка:


    RC522 NodeMCU
    3.3V 3.3V
    RST D1 (GPIO5)
    GND GND
    MISO D6 (GPIO12)
    MOSI D7 (GPIO13)
    SCK D5 (GPIO14)
    SDA D2 (GPIO4)
    IRQ Не занимается

    реле NodeMCU
    5V VIN / VUSB (адаптер / USB-питание)
    GND GND
    IN D0 (GPIO16)

    реле соленоид
    NO IN
    COM Не занимается
    NC 12/24 DC/AC

    RFID - schematics - ESP8266

    RFID vrátnik - schéma zapojenia: ESP8266 (NodeMCU) s čítačkou RC522

    RFID - schematics - Arduino + Ethernet W5100

    RFID vrátnik - schéma zapojenia: Arduino + Ethernet (W5100) s čítačkou RC522

    RFID - schematics - ESP32

    RFID vrátnik - schéma zapojenia: ESP32 (Devkit) s čítačkou RC522