91 lines
14 KiB
C++
91 lines
14 KiB
C++
#include <Arduino.h>
|
|
#include <SPI.h>
|
|
#include <MFRC522.h>
|
|
#include <WiFi.h>
|
|
#include <HTTPClient.h>
|
|
|
|
// --- KONFIGURACJA WIFI I API ---
|
|
const char* ssid = "TWOJA_NAZWA_WIFI";
|
|
const char* password = "TWOJE_HASLO_WIFI";
|
|
const String serverUrl = "http://twoja-domena.pl/check_access.php";
|
|
const String apiKey = "MojeTajneHaslo123";
|
|
|
|
// --- KONFIGURACJA PINÓW ---
|
|
#define RST_PIN 22
|
|
#define SS_PIN 5
|
|
#define RELAY_PIN 2 // Pin przekaźnika (Brama)
|
|
|
|
MFRC522 mfrc522(SS_PIN, RST_PIN);
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
SPI.begin();
|
|
mfrc522.PCD_Init();
|
|
|
|
pinMode(RELAY_PIN, OUTPUT);
|
|
digitalWrite(RELAY_PIN, HIGH); // Stan spoczynkowy (większość modułów)
|
|
|
|
// Połączenie z WiFi
|
|
WiFi.begin(ssid, password);
|
|
Serial.print("Łączenie z WiFi...");
|
|
while (WiFi.status() != WL_CONNECTED) {
|
|
delay(500);
|
|
Serial.print(".");
|
|
}
|
|
Serial.println("\nPołączono z siecią!");
|
|
Serial.println("Gotowy do odczytu kart ELS...");
|
|
}
|
|
|
|
void loop() {
|
|
// Sprawdzenie czy karta jest obecna
|
|
if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) {
|
|
return;
|
|
}
|
|
|
|
// Konwersja UID na String (HEX)
|
|
String uidString = "";
|
|
for (byte i = 0; i < mfrc522.uid.size; i++) {
|
|
uidString += String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "");
|
|
uidString += String(mfrc522.uid.uidByte[i], HEX);
|
|
}
|
|
uidString.toUpperCase();
|
|
|
|
Serial.println("\n--- Wykryto kartę ---");
|
|
Serial.println("UID: " + uidString);
|
|
|
|
// Weryfikacja online
|
|
if (WiFi.status() == WL_CONNECTED) {
|
|
HTTPClient http;
|
|
String requestUrl = serverUrl + "?uid=" + uidString + "&key=" + apiKey;
|
|
|
|
Serial.println("Weryfikacja w bazie danych...");
|
|
http.begin(requestUrl);
|
|
int httpCode = http.GET();
|
|
|
|
if (httpCode > 0) {
|
|
String payload = http.getString();
|
|
Serial.println("Serwer odpowiedział: " + payload);
|
|
|
|
if (payload == "ALLOW") {
|
|
Serial.println(">>> DOSTĘP PRZYZNANY <<<");
|
|
digitalWrite(RELAY_PIN, LOW); // Aktywacja przekaźnika
|
|
delay(2000); // Czas otwarcia bramy
|
|
digitalWrite(RELAY_PIN, HIGH); // Dezaktywacja
|
|
} else {
|
|
Serial.println(">>> DOSTĘP ODMÓWIONY <<<");
|
|
}
|
|
} else {
|
|
Serial.printf("Błąd HTTP: %s\n", http.errorToString(httpCode).c_str());
|
|
}
|
|
http.end();
|
|
} else {
|
|
Serial.println("Błąd: Brak połączenia z WiFi!");
|
|
}
|
|
|
|
// Zatrzymanie komunikacji z kartą
|
|
mfrc522.PICC_HaltA();
|
|
mfrc522.PCD_StopCrypto1();
|
|
|
|
delay(1000); // Zapobieganie wielokrotnemu odczytowi tej samej karty
|
|
}
|
|
|