From c50c1077dd3b4cbcb34e88f57fdfd393c7af9e31 Mon Sep 17 00:00:00 2001 From: "PC-PAUL\\paulf" Date: Thu, 3 Apr 2025 12:11:38 +0200 Subject: [PATCH] RFID Ok --- AlarmeESP32.ino | 300 ++++++++++++++++++++++++++++-------------------- branchements.h | 4 +- ctrlRfid.h | 0 3 files changed, 176 insertions(+), 128 deletions(-) delete mode 100644 ctrlRfid.h diff --git a/AlarmeESP32.ino b/AlarmeESP32.ino index e99c426..2d1ef5f 100644 --- a/AlarmeESP32.ino +++ b/AlarmeESP32.ino @@ -1,158 +1,206 @@ - #include - #include - #include - #include - #include - #include - #include - #include "PN532_HSU.h" - #include "PN532.h" - #include "NfcAdapter.h" +#include +#include +#include +#include +#include +#include +#include +#include "PN532_HSU.h" +#include "PN532.h" +#include "NfcAdapter.h" +#include "NfcTag.h" +#include - #include "NfcTag.h" - #include +// WiFi Configuration +#define WIFI_SSID "ratio" +#define WIFI_PASSWORD "123456789" - // WiFi Configuration - #define WIFI_SSID "ratio" - #define WIFI_PASSWORD "123456789" +// Firebase Configuration +#define API_KEY "AIzaSyB8qf7aeI7F5l7d1NDhRQrNNLW8aPaOkl4" +#define DATABASE_URL "https://alarmeesp32-2ca19-default-rtdb.europe-west1.firebasedatabase.app" +#define USER_EMAIL "alarm@alarm.bip" +#define USER_PASSWORD "123456" +#define FIREBASE_USE_PSRAM - // Firebase Configuration - #define API_KEY "AIzaSyB8qf7aeI7F5l7d1NDhRQrNNLW8aPaOkl4" - #define DATABASE_URL "https://alarmeesp32-2ca19-default-rtdb.europe-west1.firebasedatabase.app" - #define USER_EMAIL "alarm@alarm.bip" - #define USER_PASSWORD "123456" - #define FIREBASE_USE_PSRAM +// Cooldown en millisecondes pour la vérification NFC +#define NFC_COOLDOWN 1000 - // Déclaration Firebase - FirebaseData fbdo, stream; - FirebaseAuth auth; - FirebaseConfig config; - -//NFC +// Déclaration Firebase +FirebaseData fbdo, stream; +FirebaseAuth auth; +FirebaseConfig config; + +// NFC PN532_HSU pn532hsu(Serial1); -NfcAdapter nfc = NfcAdapter(pn532hsu); +NfcAdapter nfc(pn532hsu); - // Variables Alarme - volatile bool motionDetected = false; - bool armed = false, triggered = false; +// Variables Alarme +volatile bool motionDetected = false; +bool armed = false, triggered = false; - // NTP pour la gestion des logs - WiFiUDP ntpUDP; - NTPClient timeClient(ntpUDP, "pool.ntp.org"); +// NTP pour la gestion des logs +WiFiUDP ntpUDP; +NTPClient timeClient(ntpUDP, "pool.ntp.org"); - // Gestion de l'alarme - void IRAM_ATTR onMotionDetected() { - motionDetected = true; - } +// Variable pour le cooldown NFC +unsigned long lastNfcCheck = 0; - // Ajout de logs Firebase (sans récupérer les données) - void addLog(const char* messageLog) { - timeClient.update(); - char timestampISO[25]; - time_t epochTime = timeClient.getEpochTime(); - strftime(timestampISO, sizeof(timestampISO), "%Y-%m-%dT%H:%M:%SZ", gmtime(&epochTime)); +void IRAM_ATTR onMotionDetected() { + motionDetected = true; +} - FirebaseJson logData; - logData.add("timestamp", timestampISO); - logData.add("sender", "ALARM"); - logData.add("message", messageLog); +void addLog(const char* messageLog) { + timeClient.update(); + char timestampISO[25]; + time_t epochTime = timeClient.getEpochTime(); + strftime(timestampISO, sizeof(timestampISO), "%Y-%m-%dT%H:%M:%SZ", gmtime(&epochTime)); - // Pousser les logs sans vérifier la réponse pour économiser la mémoire - Firebase.RTDB.pushJSON(&fbdo, "/Alarm/logs", &logData); - } + FirebaseJson logData; + logData.add("timestamp", timestampISO); + logData.add("sender", "ALARM"); + logData.add("message", messageLog); - void streamCallback(FirebaseStream data) { - Serial.printf("🔥 Firebase Update - Path: %s\n", data.dataPath().c_str()); + Firebase.RTDB.pushJSON(&fbdo, "/Alarm/logs", &logData); +} - if (data.dataType() == "boolean") { // Vérifie qu'on reçoit bien un booléen - if (data.dataPath() == "/armed") { - armed = data.boolData(); - Serial.printf("🔒 Alarme %s\n", armed ? "activée" : "désactivée"); - addLog(armed ? "Alarme armée" : "Alarme désarmée"); - } - else if (data.dataPath() == "/triggered") { - triggered = data.boolData(); - if (!armed) addLog("Alarme désactivée à distance"); - } +void streamCallback(FirebaseStream data) { + if (data.dataType() == "boolean") { + if (data.dataPath() == "/armed") { + armed = data.boolData(); + addLog(armed ? "Alarme armee" : "Alarme desarmee"); + } else if (data.dataPath() == "/triggered") { + triggered = data.boolData(); + if (!armed) + addLog("Alarme desactivee a distance"); } + } +} + +// Cette fonction interroge Firebase pour vérifier si le badge existe +void handleRFIDTag(String scannedID) { + // Récupérer la liste des badges depuis Firebase + if (!Firebase.RTDB.getJSON(&fbdo, "/Alarm/badges")) { + // En cas d'erreur, on n'intervient pas + return; + } + + FirebaseJson badgesJson = fbdo.jsonObject(); + size_t count = badgesJson.iteratorBegin(); + bool badgeFound = false; + String foundMsg = ""; + + int type; + String key; + String value; + FirebaseJsonData jsonData; + + for (size_t i = 0; i < count; i++) { + if (badgesJson.iteratorGet(i, type, key, value) == 0) { + FirebaseJson badgeObj; + badgeObj.setJsonData(value); + + if (badgeObj.get(jsonData, "id")) { + String badgeID = jsonData.stringValue; + if (badgeID == scannedID) { + if (triggered) { + triggered = false; + Firebase.RTDB.setBool(&fbdo, "/Alarm/state/triggered", false); + } + + badgeFound = true; + FirebaseJsonData nameData; + badgeObj.get(nameData, "name"); + if (armed) { + foundMsg = "Alarme désactivée par " + nameData.stringValue; + } else { + foundMsg = "Alarme activée par " + nameData.stringValue; + } + armed = !armed; + Firebase.RTDB.setBool(&fbdo, "/Alarm/state/armed", armed); + } + } + } + } + badgesJson.iteratorEnd(); + + if (!badgeFound) { + foundMsg = String("Badge inconnu : ") + scannedID; + } + addLog(foundMsg.c_str()); } void processNFCTag() { + // Cooldown pour éviter des vérifications trop fréquentes + if (millis() - lastNfcCheck < NFC_COOLDOWN) { + return; + } + lastNfcCheck = millis(); + if (nfc.tagPresent()) { NfcTag tag = nfc.read(); - Serial.println("Tag détecté !"); - tag.print(); + String uid = tag.getUidString(); + handleRFIDTag(uid); } } - void setup() { - Serial.begin(115200); +void setup() { + Serial.begin(115200); - // Connexion WiFi - WiFi.begin(WIFI_SSID, WIFI_PASSWORD); - while (WiFi.status() != WL_CONNECTED) { - Serial.print("."); - delay(500); - } - Serial.println("\n✅ WiFi connecté !"); + WiFi.begin(WIFI_SSID, WIFI_PASSWORD); + while (WiFi.status() != WL_CONNECTED) { + delay(500); + } + Serial.println("WiFi connecte"); - // Initialisation Firebase - config.api_key = API_KEY; - config.database_url = DATABASE_URL; - auth.user.email = USER_EMAIL; - auth.user.password = USER_PASSWORD; - Firebase.begin(&config, &auth); - Firebase.reconnectWiFi(true); + config.api_key = API_KEY; + config.database_url = DATABASE_URL; + auth.user.email = USER_EMAIL; + auth.user.password = USER_PASSWORD; + Firebase.begin(&config, &auth); + Firebase.reconnectWiFi(true); - // Stream Firebase - if (!Firebase.RTDB.beginStream(&stream, "/Alarm/state")) { - Serial.printf("🔥 Erreur stream: %s\n", stream.errorReason().c_str()); - } - Firebase.RTDB.setStreamCallback(&stream, streamCallback, nullptr); - Firebase.RTDB.setBool(&fbdo, "/Alarm/state/triggered", false); - Firebase.RTDB.setBool(&fbdo, "/Alarm/state/armed", false); + if (!Firebase.RTDB.beginStream(&stream, "/Alarm/state")) { + Serial.printf("Erreur stream: %s\n", stream.errorReason().c_str()); + } + Firebase.RTDB.setStreamCallback(&stream, streamCallback, nullptr); + Firebase.RTDB.setBool(&fbdo, "/Alarm/state/triggered", false); + Firebase.RTDB.setBool(&fbdo, "/Alarm/state/armed", false); + addLog("Alarme connectee"); - addLog("Alarme connectée"); + timeClient.begin(); + Serial1.begin(9600, SERIAL_8N1, RX, TX); + nfc.begin(); + Serial.println("NFC initialise"); - // Configuration NTP - timeClient.begin(); + pinMode(A2, INPUT); + pinMode(D2, OUTPUT); + attachInterrupt(digitalPinToInterrupt(A2), onMotionDetected, RISING); + blinkSlowGreen(); +} - Serial1.begin(9600, SERIAL_8N1, RX, TX); - nfc.begin(); - Serial.println("\n✅ NFC Initialisé"); +void loop() { + Firebase.ready(); + processNFCTag(); - // Configuration des capteurs - pinMode(A2, INPUT); - pinMode(D2, OUTPUT); - attachInterrupt(digitalPinToInterrupt(A2), onMotionDetected, RISING); - + if (armed) { + blinkSlowRed(); + if (motionDetected && !triggered) { + motionDetected = false; + blinkFastRed(); + startSirene(); + Firebase.RTDB.setBool(&fbdo, "/Alarm/state/triggered", true); + triggered = true; + addLog("Mouvement detecte, alarme declenchee"); + } + } else if (!triggered) { + stopSirene(); + if (!armed) blinkSlowGreen(); + } else { + startSirene(); + blinkFastRed(); } - void loop() { - Firebase.ready(); - - if (armed) { - blinkSlowRed(); - if (motionDetected && !triggered) { - motionDetected = false; - Serial.println("🎯 Mouvement détecté !"); - blinkFastRed(); - startSirene(); - Firebase.RTDB.setBool(&fbdo, "/Alarm/state/triggered", true); - triggered = true; - addLog("Mouvement détecté, alarme déclenchée"); - } - } - - if (!triggered) { - stopSirene(); - if (!armed) blinkSlowGreen(); - } else { - startSirene(); - blinkFastRed(); - } - - updateLed(); - updateSirene(); - } + updateLed(); + updateSirene(); +} diff --git a/branchements.h b/branchements.h index 9992349..30fa17b 100644 --- a/branchements.h +++ b/branchements.h @@ -8,7 +8,7 @@ #define D3 32 #define D4 15 #define D5 33 -#define RX 16 -#define TX 17 +#define RX 7 +#define TX 8 #define SCL 22 #define SDA 23 \ No newline at end of file diff --git a/ctrlRfid.h b/ctrlRfid.h deleted file mode 100644 index e69de29..0000000