RFID Ok
This commit is contained in:
parent
afeaa3dd57
commit
c50c1077dd
116
AlarmeESP32.ino
116
AlarmeESP32.ino
@ -8,7 +8,6 @@
|
|||||||
#include "PN532_HSU.h"
|
#include "PN532_HSU.h"
|
||||||
#include "PN532.h"
|
#include "PN532.h"
|
||||||
#include "NfcAdapter.h"
|
#include "NfcAdapter.h"
|
||||||
|
|
||||||
#include "NfcTag.h"
|
#include "NfcTag.h"
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
|
|
||||||
@ -23,6 +22,9 @@
|
|||||||
#define USER_PASSWORD "123456"
|
#define USER_PASSWORD "123456"
|
||||||
#define FIREBASE_USE_PSRAM
|
#define FIREBASE_USE_PSRAM
|
||||||
|
|
||||||
|
// Cooldown en millisecondes pour la vérification NFC
|
||||||
|
#define NFC_COOLDOWN 1000
|
||||||
|
|
||||||
// Déclaration Firebase
|
// Déclaration Firebase
|
||||||
FirebaseData fbdo, stream;
|
FirebaseData fbdo, stream;
|
||||||
FirebaseAuth auth;
|
FirebaseAuth auth;
|
||||||
@ -30,7 +32,7 @@
|
|||||||
|
|
||||||
// NFC
|
// NFC
|
||||||
PN532_HSU pn532hsu(Serial1);
|
PN532_HSU pn532hsu(Serial1);
|
||||||
NfcAdapter nfc = NfcAdapter(pn532hsu);
|
NfcAdapter nfc(pn532hsu);
|
||||||
|
|
||||||
// Variables Alarme
|
// Variables Alarme
|
||||||
volatile bool motionDetected = false;
|
volatile bool motionDetected = false;
|
||||||
@ -40,12 +42,13 @@ NfcAdapter nfc = NfcAdapter(pn532hsu);
|
|||||||
WiFiUDP ntpUDP;
|
WiFiUDP ntpUDP;
|
||||||
NTPClient timeClient(ntpUDP, "pool.ntp.org");
|
NTPClient timeClient(ntpUDP, "pool.ntp.org");
|
||||||
|
|
||||||
// Gestion de l'alarme
|
// Variable pour le cooldown NFC
|
||||||
|
unsigned long lastNfcCheck = 0;
|
||||||
|
|
||||||
void IRAM_ATTR onMotionDetected() {
|
void IRAM_ATTR onMotionDetected() {
|
||||||
motionDetected = true;
|
motionDetected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ajout de logs Firebase (sans récupérer les données)
|
|
||||||
void addLog(const char* messageLog) {
|
void addLog(const char* messageLog) {
|
||||||
timeClient.update();
|
timeClient.update();
|
||||||
char timestampISO[25];
|
char timestampISO[25];
|
||||||
@ -57,46 +60,98 @@ NfcAdapter nfc = NfcAdapter(pn532hsu);
|
|||||||
logData.add("sender", "ALARM");
|
logData.add("sender", "ALARM");
|
||||||
logData.add("message", messageLog);
|
logData.add("message", messageLog);
|
||||||
|
|
||||||
// Pousser les logs sans vérifier la réponse pour économiser la mémoire
|
|
||||||
Firebase.RTDB.pushJSON(&fbdo, "/Alarm/logs", &logData);
|
Firebase.RTDB.pushJSON(&fbdo, "/Alarm/logs", &logData);
|
||||||
}
|
}
|
||||||
|
|
||||||
void streamCallback(FirebaseStream data) {
|
void streamCallback(FirebaseStream data) {
|
||||||
Serial.printf("🔥 Firebase Update - Path: %s\n", data.dataPath().c_str());
|
if (data.dataType() == "boolean") {
|
||||||
|
|
||||||
if (data.dataType() == "boolean") { // Vérifie qu'on reçoit bien un booléen
|
|
||||||
if (data.dataPath() == "/armed") {
|
if (data.dataPath() == "/armed") {
|
||||||
armed = data.boolData();
|
armed = data.boolData();
|
||||||
Serial.printf("🔒 Alarme %s\n", armed ? "activée" : "désactivée");
|
addLog(armed ? "Alarme armee" : "Alarme desarmee");
|
||||||
addLog(armed ? "Alarme armée" : "Alarme désarmée");
|
} else if (data.dataPath() == "/triggered") {
|
||||||
}
|
|
||||||
else if (data.dataPath() == "/triggered") {
|
|
||||||
triggered = data.boolData();
|
triggered = data.boolData();
|
||||||
if (!armed) addLog("Alarme désactivée à distance");
|
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() {
|
void processNFCTag() {
|
||||||
|
// Cooldown pour éviter des vérifications trop fréquentes
|
||||||
|
if (millis() - lastNfcCheck < NFC_COOLDOWN) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
lastNfcCheck = millis();
|
||||||
|
|
||||||
if (nfc.tagPresent()) {
|
if (nfc.tagPresent()) {
|
||||||
NfcTag tag = nfc.read();
|
NfcTag tag = nfc.read();
|
||||||
Serial.println("Tag détecté !");
|
String uid = tag.getUidString();
|
||||||
tag.print();
|
handleRFIDTag(uid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
|
|
||||||
// Connexion WiFi
|
|
||||||
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
|
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
|
||||||
while (WiFi.status() != WL_CONNECTED) {
|
while (WiFi.status() != WL_CONNECTED) {
|
||||||
Serial.print(".");
|
|
||||||
delay(500);
|
delay(500);
|
||||||
}
|
}
|
||||||
Serial.println("\n✅ WiFi connecté !");
|
Serial.println("WiFi connecte");
|
||||||
|
|
||||||
// Initialisation Firebase
|
|
||||||
config.api_key = API_KEY;
|
config.api_key = API_KEY;
|
||||||
config.database_url = DATABASE_URL;
|
config.database_url = DATABASE_URL;
|
||||||
auth.user.email = USER_EMAIL;
|
auth.user.email = USER_EMAIL;
|
||||||
@ -104,50 +159,43 @@ void processNFCTag() {
|
|||||||
Firebase.begin(&config, &auth);
|
Firebase.begin(&config, &auth);
|
||||||
Firebase.reconnectWiFi(true);
|
Firebase.reconnectWiFi(true);
|
||||||
|
|
||||||
// Stream Firebase
|
|
||||||
if (!Firebase.RTDB.beginStream(&stream, "/Alarm/state")) {
|
if (!Firebase.RTDB.beginStream(&stream, "/Alarm/state")) {
|
||||||
Serial.printf("🔥 Erreur stream: %s\n", stream.errorReason().c_str());
|
Serial.printf("Erreur stream: %s\n", stream.errorReason().c_str());
|
||||||
}
|
}
|
||||||
Firebase.RTDB.setStreamCallback(&stream, streamCallback, nullptr);
|
Firebase.RTDB.setStreamCallback(&stream, streamCallback, nullptr);
|
||||||
Firebase.RTDB.setBool(&fbdo, "/Alarm/state/triggered", false);
|
Firebase.RTDB.setBool(&fbdo, "/Alarm/state/triggered", false);
|
||||||
Firebase.RTDB.setBool(&fbdo, "/Alarm/state/armed", false);
|
Firebase.RTDB.setBool(&fbdo, "/Alarm/state/armed", false);
|
||||||
|
addLog("Alarme connectee");
|
||||||
|
|
||||||
addLog("Alarme connectée");
|
|
||||||
|
|
||||||
// Configuration NTP
|
|
||||||
timeClient.begin();
|
timeClient.begin();
|
||||||
|
|
||||||
Serial1.begin(9600, SERIAL_8N1, RX, TX);
|
Serial1.begin(9600, SERIAL_8N1, RX, TX);
|
||||||
nfc.begin();
|
nfc.begin();
|
||||||
Serial.println("\n✅ NFC Initialisé");
|
Serial.println("NFC initialise");
|
||||||
|
|
||||||
// Configuration des capteurs
|
|
||||||
pinMode(A2, INPUT);
|
pinMode(A2, INPUT);
|
||||||
pinMode(D2, OUTPUT);
|
pinMode(D2, OUTPUT);
|
||||||
attachInterrupt(digitalPinToInterrupt(A2), onMotionDetected, RISING);
|
attachInterrupt(digitalPinToInterrupt(A2), onMotionDetected, RISING);
|
||||||
|
|
||||||
blinkSlowGreen();
|
blinkSlowGreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
Firebase.ready();
|
Firebase.ready();
|
||||||
|
processNFCTag();
|
||||||
|
|
||||||
if (armed) {
|
if (armed) {
|
||||||
blinkSlowRed();
|
blinkSlowRed();
|
||||||
if (motionDetected && !triggered) {
|
if (motionDetected && !triggered) {
|
||||||
motionDetected = false;
|
motionDetected = false;
|
||||||
Serial.println("🎯 Mouvement détecté !");
|
|
||||||
blinkFastRed();
|
blinkFastRed();
|
||||||
startSirene();
|
startSirene();
|
||||||
Firebase.RTDB.setBool(&fbdo, "/Alarm/state/triggered", true);
|
Firebase.RTDB.setBool(&fbdo, "/Alarm/state/triggered", true);
|
||||||
triggered = true;
|
triggered = true;
|
||||||
addLog("Mouvement détecté, alarme déclenchée");
|
addLog("Mouvement detecte, alarme declenchee");
|
||||||
}
|
}
|
||||||
}
|
} else if (!triggered) {
|
||||||
|
|
||||||
if (!triggered) {
|
|
||||||
stopSirene();
|
stopSirene();
|
||||||
if (!armed) blinkSlowGreen();
|
if (!armed)
|
||||||
|
blinkSlowGreen();
|
||||||
} else {
|
} else {
|
||||||
startSirene();
|
startSirene();
|
||||||
blinkFastRed();
|
blinkFastRed();
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#define D3 32
|
#define D3 32
|
||||||
#define D4 15
|
#define D4 15
|
||||||
#define D5 33
|
#define D5 33
|
||||||
#define RX 16
|
#define RX 7
|
||||||
#define TX 17
|
#define TX 8
|
||||||
#define SCL 22
|
#define SCL 22
|
||||||
#define SDA 23
|
#define SDA 23
|
Loading…
x
Reference in New Issue
Block a user