ESP32/ESP8266 Firebase : envoyer BME280 à la base de données en temps réel

ESP32/ESP8266 Firebase : envoyer BME280 à la base de données en temps réel

Dans ce guide, vous apprendrez à envoyer des lectures de capteurs BME280 à la base de données en temps réel Firebase à l’aide des cartes ESP32 ou ESP8266 NodeMCU. La carte ESP s’authentifiera en tant qu’utilisateur avec un e-mail et un mot de passe, et vous ajouterez des règles de sécurité de base de données pour sécuriser vos données. Les cartes seront programmées à l’aide du noyau Arduino.

ESP32 ESP8266 NodeMCU Firebase Envoyer les lectures du capteur BME280 à la base de données en temps réel

Voici la partie 2 de ce projet : ESP32/ESP8266 : Application Web Firebase pour afficher les lectures de capteurs (avec authentification)

Autres tutoriels Firebase avec l’ESP32/ESP8266 qui pourraient vous intéresser :

Qu’est-ce que Firebase ?

Logo Firebase

Firebase est la plate-forme de développement d’applications mobiles de Google qui vous aide à créer, améliorer et développer votre application. Il dispose de nombreux services utilisés pour gérer les données de n’importe quelle application Android, IOS ou Web comme l’authentification, la base de données en temps réel, l’hébergement, etc.

Aperçu du projet

Le diagramme suivant montre une vue d’ensemble de haut niveau du projet que nous allons construire.

Présentation du projet Firebase ESP32 ESP8266 NodeMCU
  1. L’ESP32/ESP8266 s’authentifie en tant qu’utilisateur avec e-mail et mot de passe (cet utilisateur doit être défini sur les méthodes d’authentification Firebase) ;
  2. Après l’authentification, l’ESP obtient l’UID de l’utilisateur ;
  3. La base de données est protégée par des règles de sécurité. L’utilisateur ne peut accéder qu’aux nœuds de la base de données sous le nœud avec son UID d’utilisateur. Après avoir obtenu l’UID de l’utilisateur, l’ESP peut publier des données dans la base de données ;
  4. L’ESP envoie la température, l’humidité et la pression à la base de données.

Voici les principales étapes pour mener à bien ce projet :

  1. Créer un projet Firebase
  2. Définir les méthodes d’authentification
  3. Obtenir la clé API du projet
  4. Configurer la base de données en temps réel
  5. Configurer les règles de sécurité de la base de données
  6. ESP32/ESP8266 Envoyer des lectures de capteur à la base de données en temps réel

Vous pouvez continuer avec le projet Firebase de ce didacticiel précédent ou créer un nouveau projet. Si vous utilisez le projet Firebase de ce tutoriel précédent, vous pouvez passer à la section 4) Configurer la base de données en temps réel car les méthodes d’authentification sont déjà configurées.

Préparation de l’IDE Arduino

Pour ce tutoriel, nous allons programmer les cartes ESP32 et ESP8266 en utilisant le noyau Arduino. Assurez-vous donc que le module complémentaire ESP32 ou ESP8266 est installé dans votre IDE Arduino :

Si vous souhaitez programmer les cartes ESP en utilisant VS Code avec l’extension PlatformIO, suivez plutôt le tutoriel suivant :

1) Créer un projet Firebase

1) Aller à Base de feu et connectez-vous à l’aide d’un compte Google.

2) Cliquez sur Démarrer, puis sur Ajouter un projet pour créer un nouveau projet.

3) Donnez un nom à votre projet, par exemple ESP Firebase Demo.

Créer le nom du projet Firebase

4) Désactivez l’option Activer Google Analytics pour ce projet car il n’est pas nécessaire et cliquez sur Créer un projet.

Configurer le projet Firebase pour ESP32 et ESP8266 Étape 2

5) La configuration de votre projet prendra quelques secondes. Ensuite, cliquez sur Continuer quand c’est prêt.

6) Vous serez redirigé vers la page de votre console Project.

2) Définir les méthodes d’authentification

Pour autoriser l’authentification avec e-mail et mot de passe, vous devez d’abord définir des méthodes d’authentification pour votre application.

« La plupart des applications ont besoin de connaître l’identité d’un utilisateur. En d’autres termes, il se charge de se connecter et d’identifier les utilisateurs (dans ce cas, l’ESP32 ou l’ESP8266). Connaître l’identité d’un utilisateur permet à une application d’enregistrer en toute sécurité les données de l’utilisateur dans le cloud et de fournir la même expérience personnalisée sur tous les appareils de l’utilisateur. Pour en savoir plus sur les méthodes d’authentification, vous pouvez lire la documentation.

1) Dans la barre latérale gauche, cliquez sur Authentification puis sur Commencer.

Authentification du projet Firebase

2) Sélectionnez l’option E-mail/Mot de passe.

Sélection de l'authentification Firebase avec e-mail/mot de passe

3) Activez cette méthode d’authentification et cliquez sur Enregistrer.

Activer l'authentification par e-mail/mot de passe Firebase

4) L’authentification avec e-mail et mot de passe doit maintenant être activée.

Authentification Firebase avec e-mail/mot de passe activé

5) Maintenant, vous devez ajouter un utilisateur. Dans l’onglet Authentification, sélectionnez l’onglet Utilisateurs en haut. Ensuite, cliquez sur Ajouter un utilisateur.

Authentification Firebase Ajouter un nouvel utilisateur

6) Ajoutez une adresse e-mail pour l’utilisateur autorisé. Il peut s’agir de l’e-mail de votre compte Google ou de tout autre e-mail. Vous pouvez également créer un e-mail pour ce projet spécifique. Ajoutez un mot de passe qui vous permettra de vous connecter à votre application et d’accéder à la base de données. N’oubliez pas de sauvegarder le mot de passe dans un endroit sûr car vous en aurez besoin plus tard. Lorsque vous avez terminé, cliquez sur Ajouter un utilisateur.

Authentification Firebase Ajouter un utilisateur avec e-mail et mot de passe

7) Un nouvel utilisateur a été créé avec succès et ajouté au tableau Utilisateurs.

Tableau des utilisateurs Firebase

Notez que Firebase crée un UID unique pour chaque utilisateur enregistré. L’UID de l’utilisateur nous permet d’identifier l’utilisateur et de garder une trace de l’utilisateur pour fournir ou refuser l’accès au projet ou à la base de données. Il y a aussi une colonne qui enregistre la date de la dernière connexion. Pour le moment, il est vide car nous ne nous sommes pas encore connectés avec cet utilisateur.

3) Obtenir la clé API du projet

Pour s’interfacer avec votre projet Firebase à l’aide des cartes ESP32 ou ESP8266, vous devez obtenir la clé API de votre projet. Suivez les étapes suivantes pour obtenir la clé API de votre projet.

1) Dans la barre latérale gauche, cliquez sur Paramètres du projet.

Paramètres du projet Firebase

2) Copiez la clé API Web dans un endroit sûr, car vous en aurez besoin plus tard.

Clé API Web des paramètres du projet Firebase

4) Configurer la base de données en temps réel

Maintenant, créons une base de données en temps réel et configurons des règles de base de données pour notre projet.

1) Dans la barre latérale gauche, cliquez sur Base de données en temps réel, puis cliquez sur Créer une base de données.

Projet Firebase Créer une base de données en temps réel

2) Sélectionnez l’emplacement de votre base de données. Il devrait être le plus proche de votre emplacement.

Configurer la base de données en temps réel firebase ESP32 ESP8266 Sélectionner l'emplacement

3) Configurez des règles de sécurité pour votre base de données. Vous pouvez sélectionner Démarrer en mode test. Nous allons modifier les règles de la base de données dans un instant.

Configurer la base de données en temps réel firebase ESP32 ESP8266 Définir les règles de sécurité

4) Votre base de données est maintenant créée. Vous devez copier et enregistrer l’URL de la base de données, mise en évidence dans l’image suivante, car vous en aurez besoin plus tard dans votre code ESP32/ESP8266.

URL de la base de données du projet Firebase

5) Configurer les règles de sécurité de la base de données

Maintenant, configurons les règles de la base de données. Dans l’onglet Base de données en temps réel, sélectionnez l’onglet Règles en haut. Ensuite, cliquez sur Modifier les règles, copiez les règles suivantes, puis cliquez sur Publier.

// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
  "rules": {
    "UsersData": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}
Base de données en temps réel créant des règles

Ces règles accordent l’accès à un nœud correspondant à l’UID de l’utilisateur authentifié. Cela garantit que chaque utilisateur authentifié ne peut accéder qu’à ses propres données. Cela signifie que l’utilisateur ne peut accéder qu’aux nœuds qui se trouvent sous un nœud avec son UID utilisateur correspondant. S’il existe d’autres données publiées sur la base de données, pas sous un nœud avec l’UID des utilisateurs, cet utilisateur ne peut pas accéder à ces données.

Par exemple, imaginez que notre UID utilisateur soit RjO3taAzMMXBB2Xmir2LQ. Avec nos règles de sécurité, il peut lire et écrire des données dans la base de données sous le nœud UsersData/RjO3taAzMMXBB2Xmir2LQ.

Vous comprendrez mieux comment cela fonctionne lorsque vous commencerez à travailler avec l’ESP32/ESP8266.

6) ESP32/ESP8266 envoient des lectures de capteur à la base de données en temps réel

Dans cette section, nous allons programmer les cartes ESP32 ou ESP8266 pour effectuer les tâches suivantes :

  1. Authentifiez-vous en tant qu’utilisateur avec e-mail et mot de passe (l’utilisateur que vous avez configuré dans cette section);
  2. Envoyez les lectures des capteurs à la base de données en temps réel en tant qu’utilisateur autorisé.

Pièces requises

Pour ce projet, vous avez besoin des pièces suivantes* :

* vous pouvez également tester le projet avec des valeurs aléatoires au lieu des lectures de capteur, ou vous pouvez utiliser n’importe quel autre capteur que vous connaissez.

Vous pouvez utiliser les liens précédents ou accéder directement à MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

1679706023 284 ESP32ESP8266 Firebase envoyer BME280 a la base de donnees en

Diagramme schématique

Dans ce didacticiel, nous allons envoyer les lectures du capteur BME280 à la base de données en temps réel Firebase. Vous devez donc câbler le capteur BME280 à votre carte. Suivez l’un des diagrammes schématiques suivants.

ESP32 avec BME280

Nous allons utiliser la communication I2C avec le module de capteur BME280. Pour cela, câblez le capteur aux broches ESP32 SCL (GPIO 22) et SDA (GPIO 21) par défaut, comme indiqué dans le schéma suivant.

Circuit de schéma de câblage de pression d'humidité de capteur ESP32 BME280

Vous ne connaissez pas le BME280 avec l’ESP32 ? Lisez ce tutoriel : ESP32 avec capteur BME280 utilisant Arduino IDE (pression, température, humidité).

ESP8266 avec BME280

Nous allons utiliser la communication I2C avec le module de capteur BME280. Pour cela, câblez le capteur aux broches ESP8266 SDA (GPIO 4) et SCL (GPIO 5), comme indiqué dans le schéma suivant.

ESP8266 NodeMCU BME280 Capteur Température Humidité Pression Schéma de câblage Circuit

Vous ne connaissez pas le BME280 avec l’ESP8266 ? Lisez ce tutoriel : ESP8266 avec BME280 en utilisant Arduino IDE (pression, température, humidité).

Installation des bibliothèques

Pour ce projet, vous devez installer les bibliothèques suivantes :

Installation de bibliothèques – VS Code

Suivez les instructions suivantes si vous utilisez VS Code avec l’extension PlatformIO.

Installer la bibliothèque client Firebase-ESP

Il existe une librairie avec plein d’exemples pour utiliser Firebase avec l’ESP32 : le Bibliothèque Firebase-ESP-Client. Cette bibliothèque est compatible avec les cartes ESP32 et ESP8266.

Cliquez sur l’icône PIO Home et sélectionnez l’onglet Bibliothèques. Recherchez « Firebase ESP Client ». Sélectionnez la bibliothèque client Firebase Arduino pour ESP8266 et ESP32.

Installer Firebase ESP Client Library VS Code

Ensuite, cliquez sur Ajouter au projet et sélectionnez le projet sur lequel vous travaillez.

Ajouter la bibliothèque client Firebase ESP au projet VS Code

Installer la bibliothèque BME280

Dans l’onglet Bibliothèques, recherchez BME280. Sélectionnez la bibliothèque Adafruit BME280.

Recherche de code PlatformIO VS pour la bibliothèque BME280

Ensuite, cliquez sur Ajouter au projet et sélectionnez le projet sur lequel vous travaillez.

PlatformIO avec VS Code Ajouter une bibliothèque au projet

Changez également la vitesse du moniteur à 115200 en ajoutant la ligne suivante au fichier platformio.ini de votre projet :

monitor_speed = 115200

Installation – Arduino IDE

Suivez cette section si vous utilisez Arduino IDE.

Vous devez installer les bibliothèques suivantes :

Accédez à Sketch > Inclure la bibliothèque > Gérer les bibliothèques, recherchez les noms des bibliothèques et installez les bibliothèques.

Pour la bibliothèque client Firebase, sélectionnez la bibliothèque client Firebase Arduino pour ESP8266 et ESP32.

Installez la bibliothèque client Firebase Arduino pour ESP8266 et ESP32 par Mobitz

Maintenant, vous êtes prêt à commencer à programmer les cartes ESP32 et ESP8266 pour interagir avec la base de données.

Envoyer les lectures du capteur au code de la base de données en temps réel

Copiez le code suivant dans votre IDE Arduino ou dans le fichier main.cpp si vous utilisez VS Code.

Vous devez insérer vos informations d’identification réseau, la clé API du projet, l’URL de la base de données, ainsi que l’adresse e-mail et le mot de passe de l’utilisateur autorisé.

/*
  Rui Santos
  Complete project details at our blog: https://Raspberryme.com/esp32-esp8266-firebase-bme280-rtdb/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/

#include <Arduino.h>
#if defined(ESP32)
  #include <WiFi.h>
#elif defined(ESP8266)
  #include <ESP8266WiFi.h>
#endif
#include <Firebase_ESP_Client.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

// Provide the token generation process info.
#include "addons/TokenHelper.h"
// Provide the RTDB payload printing info and other helper functions.
#include "addons/RTDBHelper.h"

// Insert your network credentials
#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"

// Insert Firebase project API Key
#define API_KEY "REPLACE_WITH_YOUR_PROJECT_API_KEY"

// Insert Authorized Email and Corresponding Password
#define USER_EMAIL "REPLACE_WITH_THE_USER_EMAIL"
#define USER_PASSWORD "REPLACE_WITH_THE_USER_PASSWORD"

// Insert RTDB URLefine the RTDB URL
#define DATABASE_URL "REPLACE_WITH_YOUR_DATABASE_URL"

// Define Firebase objects
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;

// Variable to save USER UID
String uid;

// Variables to save database paths
String databasePath;
String tempPath;
String humPath;
String presPath;

// BME280 sensor
Adafruit_BME280 bme; // I2C
float temperature;
float humidity;
float pressure;

// Timer variables (send new readings every three minutes)
unsigned long sendDataPrevMillis = 0;
unsigned long timerDelay = 180000;

// Initialize BME280
void initBME(){
  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
}

// Initialize WiFi
void initWiFi() {
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
  Serial.println();
}

// Write float values to the database
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 the following path: ");
    Serial.println(path);
    Serial.println("PASSED");
    Serial.println("PATH: " + fbdo.dataPath());
    Serial.println("TYPE: " + fbdo.dataType());
  }
  else {
    Serial.println("FAILED");
    Serial.println("REASON: " + fbdo.errorReason());
  }
}

void setup(){
  Serial.begin(115200);

  // Initialize BME280 sensor
  initBME();
  initWiFi();

  // Assign the api key (required)
  config.api_key = API_KEY;

  // Assign the user sign in credentials
  auth.user.email = USER_EMAIL;
  auth.user.password = USER_PASSWORD;

  // Assign the RTDB URL (required)
  config.database_url = DATABASE_URL;

  Firebase.reconnectWiFi(true);
  fbdo.setResponseSize(4096);

  // Assign the callback function for the long running token generation task */
  config.token_status_callback = tokenStatusCallback; //see addons/TokenHelper.h

  // Assign the maximum retry of token generation
  config.max_token_generation_retry = 5;

  // Initialize the library with the Firebase authen and config
  Firebase.begin(&config, &auth);

  // Getting the user UID might take a few seconds
  Serial.println("Getting User UID");
  while ((auth.token.uid) == "") {
    Serial.print('.');
    delay(1000);
  }
  // Print user UID
  uid = auth.token.uid.c_str();
  Serial.print("User UID: ");
  Serial.println(uid);

  // Update database path
  databasePath = "/UsersData/" + uid;

  // Update database path for sensor readings
  tempPath = databasePath + "/temperature"; // --> UsersData/<user_uid>/temperature
  humPath = databasePath + "/humidity"; // --> UsersData/<user_uid>/humidity
  presPath = databasePath + "/pressure"; // --> UsersData/<user_uid>/pressure
}

void loop(){
  // Send new readings to database
  if (Firebase.ready() && (millis() - sendDataPrevMillis > timerDelay || sendDataPrevMillis == 0)){
    sendDataPrevMillis = millis();

    // Get latest sensor readings
    temperature = bme.readTemperature();
    humidity = bme.readHumidity();
    pressure = bme.readPressure()/100.0F;

    // Send readings to database:
    sendFloat(tempPath, temperature);
    sendFloat(humPath, humidity);
    sendFloat(presPath, pressure);
  }
}

Afficher le code brut

Comment fonctionne le code

Continuez à lire pour savoir comment le code fonctionne ou passez à la section de démonstration.

Inclure les bibliothèques

Tout d’abord, incluez les bibliothèques requises. La librairie WiFi.h pour connecter l’ESP32 à internet (ou la librairie ESP8266WiFi.h pour la carte ESP8266), la librairie Firebase_ESP_Client.h pour interfacer les cartes avec Firebase, et les Wire, Adafruit_Sensor, et Adafruit_BME280 pour s’interfacer avec le BME280 capteur.

#include <Arduino.h>
#if defined(ESP32)
  #include <WiFi.h>
#elif defined(ESP8266)
  #include <ESP8266WiFi.h>
#endif
#include <Firebase_ESP_Client.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

Vous devez également inclure les éléments suivants pour que la bibliothèque Firebase fonctionne.

// Provide the token generation process info.
#include "addons/TokenHelper.h"
// Provide the RTDB payload printing info and other helper functions.
#include "addons/RTDBHelper.h"

Informations d’identification réseau

Incluez vos informations d’identification réseau dans les lignes suivantes afin que vos cartes puissent se connecter à Internet en utilisant votre réseau local.

// Insert your network credentials
#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"

Clé API du projet Firebase, utilisateur Firebase et URL de la base de données

Insérez votre Clé API du projet Firebase– celui que vous avez dans cette section.

#define API_KEY "REPLACE_WITH_YOUR_PROJECT_API_KEY"

Insérez le email autorisé et le mot de passe correspondant—ce sont les détails de l’utilisateur que vous avez ajouté dans cette section.

// Insert Authorized Email and Corresponding Password
#define USER_EMAIL "REPLACE_WITH_THE_USER_EMAIL"
#define USER_PASSWORD "REPLACE_WITH_THE_USER_PASSWORD"

Insérez votre URL de la base de données dans la ligne suivante :

// Insert RTDB URLefine the RTDB URL
#define DATABASE_URL "REPLACE_WITH_YOUR_DATABASE_URL"

Objets Firebase et autres variables

La ligne suivante définit un objet FirebaseData.

FirebaseData fbdo;

La ligne suivante définit un objet FirebaseAuth nécessaire à l’authentification.

FirebaseAuth auth;

Enfin, la ligne suivante définit un objet FirebaseConfig requis pour les données de configuration.

FirebaseConfig config;

La variable uid sera utilisée pour enregistrer l’UID de l’utilisateur. Nous pouvons obtenir l’UID de l’utilisateur après l’authentification.

String uid;

Les variables suivantes seront utilisées pour enregistrer les nœuds vers lesquels nous enverrons les lectures des capteurs. Nous mettrons à jour ces variables plus tard dans le code lorsque nous obtiendrons l’UID de l’utilisateur.

// Variables to save database paths
String databasePath;
String tempPath;
String humPath;
String presPath;

Ensuite, créez un objet Adafruit_BME280 appelé bme. Cela crée automatiquement un objet capteur sur les broches I2C par défaut ESP32 ou ESP8266.

Adafruit_BME280 bme; // I2C

Les variables suivantes contiendront les relevés de température, d’humidité et de pression du capteur.

float temperature;
float humidity;
float pressure;

Temporisation

Les variables sendDataPrevMillis et timerDelay permettent de vérifier le délai entre chaque envoi. Dans cet exemple, nous fixons le temps de retard à 3 minutes (18 000 millisecondes). Une fois que vous avez testé ce projet et vérifié que tout fonctionne comme prévu, nous vous recommandons d’augmenter le délai.

// Timer variables (send new readings every three minutes)
unsigned long sendDataPrevMillis = 0;
unsigned long timerDelay = 180000;

initBME()

La fonction initBME() initialise la bibliothèque BME280 à l’aide de l’objet bme créé précédemment. Ensuite, vous devez appeler cette bibliothèque dans le setup().

void initBME(){
  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
}

initWiFi()

La fonction initWiFi() connecte votre ESP à Internet en utilisant les informations d’identification réseau fournies. Vous devez appeler cette fonction plus tard dans le setup() pour initialiser le WiFi.

// Initialize WiFi
void initWiFi() {
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
  Serial.println();
}

Envoyer des données à la base de données

Pour stocker des données sur un nœud spécifique de la base de données en temps réel Firebase, vous pouvez utiliser les fonctions suivantes : set, setInt, setFloat, setDouble, setString, setJSON, setArray, setBlob et setFile.

Ces fonctions renvoient une valeur booléenne indiquant le succès de l’opération, qui sera vraie si toutes les conditions suivantes sont remplies :

  • Le serveur renvoie le code d’état HTTP 200
  • Les types de données mis en correspondance entre la requête et la réponse

Seules les fonctions setBlob et setFile qui font une demande silencieuse au serveur Firebase, donc aucune réponse de charge utile n’est renvoyée.

En savoir plus : ESP32 : Premiers pas avec Firebase (base de données en temps réel)

Dans notre exemple, nous enverrons des variables flottantes, nous devons donc utiliser la fonction setFloat() comme suit.

Firebase.RTDB.setFloat(&fbdo, "DATABASE_NODE", VALUE)

Le deuxième argument fait référence au nœud de la base de données (variable char) auquel nous voulons envoyer les données. Le troisième argument est les données que nous voulons envoyer (variable flottante).

Comme nous devrons envoyer trois valeurs flottantes, nous avons créé une fonction – la fonction sendFloat() qui accepte le chemin du nœud et la valeur comme arguments.

// Write float values to the database
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 the following path: ");
    Serial.println(path);
    Serial.println("PASSED");
    Serial.println("PATH: " + fbdo.dataPath());
    Serial.println("TYPE: " + fbdo.dataType());
  }
  else {
    Serial.println("FAILED");
    Serial.println("REASON: " + fbdo.errorReason());
  }
}

Plus tard, nous appellerons cette fonction dans la boucle () pour envoyer les lectures des capteurs.

installation()

Dans setup(), initialisez le moniteur série à des fins de débogage à un débit en bauds de 115 200.

Serial.begin(115200);

Appelez la fonction initBME() pour initialiser le capteur BME280.

initBME();

Appelez la fonction initWiFi() pour initialiser le WiFi.

initWiFi();

Attribuez la clé API à la configuration Firebase.

config.api_key = API_KEY;

Les lignes suivantes attribuent l’adresse e-mail et le mot de passe à l’objet d’authentification Firebase.

auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;

Attribuez l’URL de la base de données à l’objet de configuration Firebase.

config.database_url = DATABASE_URL;

Ajoutez ce qui suit à l’objet de configuration.

// Assign the callback function for the long running token generation task
config.token_status_callback = tokenStatusCallback; //see addons/TokenHelper.h

// Assign the maximum retry of token generation
config.max_token_generation_retry = 5;

Initialisez la bibliothèque Firebase (authentification) avec les paramètres de configuration et d’authentification que nous avons définis précédemment.

// Initialize the library with the Firebase authen and config
Firebase.begin(&config, &auth);

Après avoir initialisé la bibliothèque, nous pouvons obtenir l’UID de l’utilisateur en appelant auth.token.uid. Obtenir l’UID de l’utilisateur peut prendre un certain temps, nous ajoutons donc une boucle while qui attend jusqu’à ce que nous l’obtenions.

// Getting the user UID might take a few seconds
Serial.println("Getting User UID");
while ((auth.token.uid) == "") {
  Serial.print('.');
  delay(1000);
}

Enfin, nous sauvegardons l’UID de l’utilisateur dans la variable uid et l’imprimons dans le Serial Monitor.

uid = auth.token.uid.c_str();
Serial.print("User UID: ");
Serial.print(uid);

Après avoir obtenu l’UID de l’utilisateur, nous pouvons mettre à jour les chemins des nœuds de la base de données pour inclure l’UID de l’utilisateur. C’est ce que nous faisons dans les lignes suivantes.

// Update database path for sensor readings
tempPath = databasePath + "/temperature"; // --> UsersData/<user_uid>/temperature
humPath = databasePath + "/humidity"; // --> UsersData/<user_uid>/humidity
presPath = databasePath + "/pressure"; // --> UsersData/<user_uid>/pressure

boucle()

Dans la boucle(), vérifiez s’il est temps d’envoyer de nouvelles lectures :

if (Firebase.ready() && (millis() - sendDataPrevMillis > timerDelay || sendDataPrevMillis == 0)){
  sendDataPrevMillis = millis();

Si c’est le cas, obtenez les dernières lectures du capteur du capteur BME280 et enregistrez-les sur les variables de température, d’humidité et de pression.

// Get latest sensor readings
temperature = bme.readTemperature();
humidity = bme.readHumidity();
pressure = bme.readPressure()/100.0F;

Enfin, appelez la fonction sendFloat() pour envoyer les nouvelles lectures à la base de données. Passez en arguments le chemin du nœud et la valeur.

// Send readings to database:
sendFloat(tempPath, temperature);
sendFloat(humPath, humidity);
sendFloat(presPath, pressure);

Manifestation

Téléchargez le code précédent sur votre tableau. Le code est compatible avec les cartes ESP32 et ESP8266. N’oubliez pas d’insérer vos informations d’identification réseau, la clé API du projet, l’URL de la base de données, l’adresse e-mail de l’utilisateur et le mot de passe correspondant.

Après avoir téléchargé le code, appuyez sur le bouton RST de la carte pour qu’elle commence à exécuter le code. Il doit s’authentifier auprès de Firebase, obtenir l’UID de l’utilisateur et envoyer immédiatement de nouvelles lectures à la base de données.

Ouvrez le moniteur série à un débit en bauds de 115200 et vérifiez que tout fonctionne comme prévu.

Démonstration du moniteur série Arduino IDE

De plus, accédez à la base de données en temps réel sur l’interface de votre projet Firebase et vérifiez que les nouvelles lectures sont enregistrées. Notez qu’il enregistre les données sous un nœud avec le propre UID d’utilisateur – c’est un moyen de restreindre l’accès à la base de données.

Démonstration du moniteur série Arduino IDE

Et c’est tout. Vous avez réussi à envoyer les lectures des capteurs à la base de données en temps réel Firebase et vous avez protégé les données à l’aide de règles de base de données.

Conclusion

Dans ce didacticiel, vous avez appris à authentifier l’ESP32/ESP8266 en tant qu’utilisateur avec une adresse e-mail et un mot de passe, à envoyer des lectures de capteurs à la base de données et à configurer des règles de sécurité pour protéger votre base de données et restreindre l’accès.

Dans la PARTIE 2, nous allons créer une application Web Firebase avec authentification (connexion avec e-mail et mot de passe) qui affiche les lectures des capteurs enregistrées dans la base de données. Seul un utilisateur connecté autorisé peut accéder aux données. Plus tard, vous pourrez modifier ce projet pour afficher toutes sortes de données et restreindre ou autoriser l’accès aux données à des utilisateurs spécifiques.

Nous espérons que vous avez trouvé ce tutoriel utile.

>> Passez à la partie 2 : ESP32/ESP8266 : application Web Firebase pour afficher les lectures des capteurs (avec authentification)

Si vous aimez les projets Firebase, veuillez consulter notre nouvel eBook. Nous sommes sûrs que vous l’aimerez :

Apprenez-en plus sur l’ESP32 et l’ESP8266 avec nos ressources :

Merci d’avoir lu.

Cette vidéo vous emmène dans l’histoire de Raspberry Pi :

YouTube video