#include <WiFi.h>
#include <HTTPClient.h>
// --------------------------
// SECTION 1 : Configuration des LEDs
// --------------------------
// Les broches des LEDs sont définies ici
#define LED_1_PIN 22 // LED 1 connectée au GPIO 22
#define LED_2_PIN 23 // LED 2 connectée au GPIO 23
// --------------------------
// SECTION 2 : Configuration Wi-Fi et Firebase
// --------------------------
// Paramètres nécessaires pour connecter l'ESP32 au Wi-Fi et à Firebase
#define FIREBASE_HOST "zoro-1be8e-default-rtdb.europe-west1.firebasedatabase.app" // Hôte Firebase
#define FIREBASE_AUTH "AIzaSyB5Id7dbLL326RTHvMnuHGpsB7xyCB4cbo" // Clé d'authentification Firebase
#define WIFI_SSID "Wokwi-GUEST" // Nom du réseau Wi-Fi
#define WIFI_PASSWORD "" // Mot de passe Wi-Fi (vide pour le réseau Wokwi)
// Variables pour stocker les états des LEDs
bool led1State = false; // État actuel de LED 1
bool led2State = false; // État actuel de LED 2
// --------------------------
// SECTION 3 : Initialisation (Setup)
// --------------------------
void setup() {
// Initialisation de la communication série pour le débogage
Serial.begin(115200);
// Configurer les broches des LEDs comme sortie
pinMode(LED_1_PIN, OUTPUT);
pinMode(LED_2_PIN, OUTPUT);
// Connexion au réseau Wi-Fi
Serial.println("Connexion au Wi-Fi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
// Attendre que la connexion soit établie
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connexion en cours...");
}
Serial.println("Connecté au Wi-Fi !");
}
// --------------------------
// SECTION 4 : Boucle principale (Loop)
// --------------------------
void loop() {
// Lire les états des LEDs depuis Firebase via HTTP GET
getLedStatesFromFirebase();
// Mise à jour des LEDs en fonction des états récupérés
digitalWrite(LED_1_PIN, led1State ? HIGH : LOW);
digitalWrite(LED_2_PIN, led2State ? HIGH : LOW);
// Attendre 2 secondes avant la prochaine lecture
delay(2000);
}
// --------------------------
// SECTION 5 : Récupération des états des LEDs depuis Firebase
// --------------------------
/*
* Cette fonction utilise une requête HTTP GET pour lire les données depuis Firebase.
* Format GET :
* - L'URL contient les paramètres comme une chaîne de requête.
* - Exemple : https://[FIREBASE_HOST]/.json?auth=[FIREBASE_AUTH]
* - La réponse est au format JSON contenant les données des LEDs.
*/
void getLedStatesFromFirebase() {
// Construire l'URL complète pour accéder aux données
String url = String("https://") + FIREBASE_HOST + "/.json?auth=" + FIREBASE_AUTH;
// Démarrer une requête HTTP GET
HTTPClient http;
http.begin(url); // Initialiser avec l'URL cible
int httpResponseCode = http.GET(); // Envoyer la requête GET
// Vérifier si la requête a réussi
if (httpResponseCode > 0) {
// Obtenir la réponse sous forme de texte
String payload = http.getString();
Serial.println("Réponse Firebase : " + payload);
// Analyser la réponse pour extraire les états des LEDs
if (payload.indexOf("\"Led_1\":true") != -1) {
led1State = true; // LED 1 doit être allumée
} else if (payload.indexOf("\"Led_1\":false") != -1) {
led1State = false; // LED 1 doit être éteinte
}
if (payload.indexOf("\"Led_2\":true") != -1) {
led2State = true; // LED 2 doit être allumée
} else if (payload.indexOf("\"Led_2\":false") != -1) {
led2State = false; // LED 2 doit être éteinte
}
// Afficher les états des LEDs sur le moniteur série
Serial.print("État de LED 1 : ");
Serial.println(led1State);
Serial.print("État de LED 2 : ");
Serial.println(led2State);
} else {
// En cas d'erreur, afficher le code de réponse
Serial.println("Erreur lors de la requête Firebase !");
Serial.println("Code HTTP : " + String(httpResponseCode));
}
// Terminer la requête HTTP
http.end();
}