# NFC University Gate Access System 🎓🚗 System kontroli dostępu do bramy lub drzwi na uczelni, wykorzystujący **Elektroniczną Legitymację Studencką (ELS)** oraz komunikację online z bazą danych MySQL. ## 📝 Opis projektu Projekt umożliwia autoryzację wjazdu na teren uczelni za pomocą standardowych legitymacji studenckich (standard NFC/RFID 13.56MHz). System nie przechowuje listy uprawnionych osób lokalnie na urządzeniu, lecz każdorazowo odpytuje serwer bazy danych, co pozwala na natychmiastowe nadawanie lub odbieranie uprawnień. ## ✨ Funkcje systemu * **Autoryzacja Online:** Weryfikacja kart ELS w czasie rzeczywistym poprzez API PHP i bazę danych MySQL. * **Tryb Hybrydowy (Offline Cache):** System zapamiętuje 10 ostatnio autoryzowanych kart w pamięci nieulotnej (NVS). Brama otworzy się nawet w przypadku awarii sieci WiFi lub serwera. * **Zarządzanie Czasowe:** Możliwość blokowania dostępu po wygaśnięciu ważności legitymacji bezpośrednio w bazie danych. * **Bezpieczeństwo (API Key):** Każde zapytanie z ESP32 do serwera jest autoryzowane unikalnym kluczem, co zapobiega nieautoryzowanym próbom otwarcia bramy. * **Zapis Logów:** Serwer automatycznie rejestruje datę i godzinę każdego użycia karty (pole `last_entry` w bazie). * **Niskie Opóźnienie:** Dzięki optymalizacji kodu, czas od zbliżenia karty do reakcji przekaźnika wynosi zazwyczaj poniżej 500ms. ## 🏗 Architektura systemu 1. **ESP32**: Odczytuje unikalny numer (UID) karty zbliżeniowej. 2. **API (PHP)**: Skrypt pośredniczący, który odbiera UID od ESP32 i komunikuje się z bazą danych. 3. **Baza Danych (MySQL)**: Przechowuje informacje o studentach, ich numerach UID oraz ważności uprawnień. 4. **Przekaźnik**: Fizycznie zwiera styki w sterowniku bramy po otrzymaniu pozytywnej weryfikacji. ## 🛠 Wymagania sprzętowe - **Mikrokontroler**: ESP32 (lub ESP8266 z poprawkami w kodzie). - **Czytnik NFC**: MFRC522 (RC522) lub PN532. - **Moduł przekaźnika**: 1-kanałowy (Low/High level trigger). - **Zasilanie**: 5V/12V (zależnie od sterownika bramy). - **Pozostałe**: Diody LED (status), rezystory, przewody połączeniowe. ## 💻 Struktura bazy danych Wykonaj poniższe zapytanie SQL, aby przygotować bazę danych: ```sql CREATE TABLE students ( id INT AUTO_INCREMENT PRIMARY KEY, card_uid VARCHAR(20) UNIQUE NOT NULL, full_name VARCHAR(100), student_id_number VARCHAR(15), is_active BOOLEAN DEFAULT 1, expiry_date DATE, last_entry TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` ## 🚀 Instalacja i Konfiguracja 1. Serwer (Backend) Skopiuj pliki z folderu /server na swój hosting/serwer. Skonfiguruj połączenie z bazą danych w pliku db_config.php. Dodaj testowy rekord (UID swojej legitymacji) do tabeli students. 2. Urządzenie (Firmware) Otwórz projekt w Arduino IDE lub PlatformIO. Zainstaluj biblioteki: MFRC522 oraz HTTPClient. W pliku głównym uzupełnij dane: SSID i Password Twojej sieci WiFi. API_URL (adres do Twojego skryptu PHP). Wgraj program na ESP32. ## 🔌 Schemat połączeń (Pinout) Poniższa tabela przedstawia połączenie czytnika RFID-RC522 z mikrokontrolerem ESP32: | Moduł RC522 | ESP32 (GPIO) | Opis | |:---:|:---:|:---| | **VCC** | 3.3V | Zasilanie (UWAGA: Nie podłączać pod 5V!) | | **RST** | GPIO 22 | Reset | | **GND** | GND | Masa | | **MISO** | GPIO 19 | Master In Slave Out (SPI) | | **MOSI** | GPIO 23 | Master Out Slave In (SPI) | | **SCK** | GPIO 18 | Serial Clock (SPI) | | **SDA (SS)**| GPIO 5 | Chip Select (SPI) | **Elementy dodatkowe:** * **Przekaźnik (Relay):** Sygnał sterujący podłączony do **GPIO 2**. * **Dioda LED (Opcjonalnie):** GPIO 4 (sygnalizacja otwarcia). ## 🔒 Bezpieczeństwo HTTPS: Zaleca się hostowanie skryptu API na serwerze z certyfikatem SSL. API KEY: Warto dodać nagłówek autoryzacji w zapytaniach HTTP, aby uniemożliwić ręczne wywoływanie skryptu z przeglądarki. Fail-safe: System w przypadku braku połączenia z siecią pozostaje w trybie zamkniętym. ## 📄 Licencja Projekt udostępniony na licencji MIT. Możesz go dowolnie modyfikować na potrzeby własnych projektów edukacyjnych.