Pastebin
Retrouvez, créez et partagez vos snippets en temps réel.
Rechercher un Pastebin
Aucun paste trouvé.
Créer un paste
Pastebin
Blog
2154554
#include "addons/TokenHelper.h" #include "addons/RTDBHelper.h" #include <WiFi.h> #include <Adafruit_BMP280.h> // Assurez-vous d'avoir installé cette librairie // ---------------------------------------------------------------------- // --- ⚙️ VOS INFORMATIONS D'IDENTIFICATION --- // ---------------------------------------------------------------------- // 1. Réseau Wi-Fi #define WIFI_SSID "othman" #define WIFI_PASSWORD "77778888" // 2. Projet Firebase #define API_KEY "AIzaSyDl1Q7C4O5Z0S_gET4c3x2BMKSFdufw6j4" // 3. Utilisateur pour l'authentification (doit exister dans Firebase Authentication) #define USER_EMAIL "jacob@jacob.fr" #define USER_PASSWORD "123456789" // 4. URL de la Realtime Database // >>> REMPLACER AVEC VOTRE URL DE BASE DE DONNÉES <<< #define DATABASE_URL "https://esp32-projet-b367d-default-rtdb.europe-west1.firebasedatabase.app/" // ---------------------------------------------------------------------- // --- 🌎 DÉFINITIONS DES OBJETS & VARIABLES --- // ---------------------------------------------------------------------- // Définition des objets Firebase FirebaseData fbdo; FirebaseAuth auth; FirebaseConfig config; // Variable pour sauvegarder l'UID de l'utilisateur après connexion String uid; // Variables pour les chemins de la base de données String databasePath; String tempPath; String humPath; String presPath; // Objet et variables du capteur BME280 Adafruit_BMP280 bme; // I2C address 0x76 (par défaut) float temperature; float humidity; float pressure; // Variables pour la minuterie (envoi des données toutes les 3 minutes) unsigned long sendDataPrevMillis = 0; unsigned long timerDelay = 180000; // 3 minutes = 180 000 ms // ---------------------------------------------------------------------- // --- 💡 FONCTIONS D'INITIALISATION --- // ---------------------------------------------------------------------- // Initialisation du capteur BME280 void initBME() { // L'adresse I2C 0x76 est l'adresse par défaut si la broche SDO est à la masse (GND) if (!bme.begin(0x76)) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } Serial.println("BME280 initialized."); } // Initialisation de la connexion WiFi void initWiFi() { Serial.print("Connecting to WiFi .."); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { Serial.print('.'); delay(1000); } Serial.println(); Serial.print("Connected! IP address: "); Serial.println(WiFi.localIP()); } // ---------------------------------------------------------------------- // --- 📤 FONCTION D'ENVOI À FIREBASE --- // ---------------------------------------------------------------------- // Écrit une valeur float dans la base de données void sendFloat(String path, float value) { if (Firebase.RTDB.setFloat(&fbdo, path.c_str(), value)) { Serial.print("Writing value: "); Serial.print(value); Serial.print(" on path: "); Serial.println(path); Serial.println("PASSED"); } else { Serial.println("FAILED"); Serial.println("REASON: " + fbdo.errorReason()); } } // ---------------------------------------------------------------------- // --- 🚀 SETUP --- // ---------------------------------------------------------------------- void setup() { Serial.begin(115200); Serial.println(); initBME(); initWiFi(); // Configuration de Firebase config.api_key = API_KEY; auth.user.email = USER_EMAIL; auth.user.password = USER_PASSWORD; config.database_url = DATABASE_URL; Firebase.reconnectWiFi(true); fbdo.setResponseSize(4096); // Assigner la fonction de rappel pour le statut du token config.token_status_callback = tokenStatusCallback; // Initialiser la librairie Firebase Firebase.begin(&config, &auth); // Attendre que l'UID de l'utilisateur soit récupéré (après authentification) Serial.println("Getting User UID"); while ((auth.token.uid) == "") { Serial.print('.'); delay(1000); } // Sauvegarder et afficher l'UID uid = auth.token.uid.c_str(); Serial.print("User UID: "); Serial.println(uid); // Mise à jour du chemin de base de données (ex: /UsersData/ABCxyz123...) databasePath = "/UsersData/" + uid; // Définition des chemins complets pour les lectures du capteur // Chemin final: /UsersData/<user_uid>/sensor/<type> tempPath = databasePath + "/sensor/temperature"; humPath = databasePath + "/sensor/humidity"; presPath = databasePath + "/sensor/pressure"; Serial.println("Database paths defined."); } // ---------------------------------------------------------------------- // --- 🔁 LOOP --- // ---------------------------------------------------------------------- void loop() { // Vérifier si Firebase est prêt et si le temps imparti s'est écoulé if (Firebase.ready() && (millis() - sendDataPrevMillis > timerDelay)) { sendDataPrevMillis = millis(); // 1. Lire les dernières valeurs du capteur temperature = bme.readTemperature(); // La pression est lue en Pascals (Pa), on la convertit en hectoPascals (hPa) en divisant par 100 pressure = bme.readPressure() / 100.0F; Serial.println("\n--- New Readings ---"); Serial.printf("Temp: %.2f °C, Hum: %.2f %%, Pres: %.2f hPa\n", temperature, humidity, pressure); // 2. Envoyer les lectures à Firebase sendFloat(tempPath, temperature); sendFloat(humPath, humidity); sendFloat(presPath, pressure); } }
Créé il y a 1 mois.