Dans ce guide, vous apprendrez à prendre et à télécharger une photo sur Firebase Storage à l'aide de l'ESP32-CAM. Vous allez créer un projet Firebase avec Storage qui vous permet de stocker vos fichiers. Ensuite, vous pouvez accéder à votre console Firebase pour visualiser les images ou créer une application Web pour les afficher (nous le ferons dans un futur tutoriel). L'ESP32-CAM sera programmé à l'aide de l'IDE Arduino.
Remarque : ce projet est compatible avec n'importe quel Carte caméra ESP32 avec la caméra OV2640 . Vous devez juste vous assurer que vous utilisez le bon brochage pour la carte que vous utilisez.
Qu'est-ce que Firebase ?

Firebase est une 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, le stockage, etc.
Aperçu sur le projet
Ce guide simple montre comment prendre des photos avec l'ESP32-CAM et les envoyer vers Firebase Storage. L'ESP32-CAM prend une photo et l'envoie à Firebase à chaque réinitialisation (appuyez sur le bouton RST). L'idée est d'ajouter une sorte de déclencheur qui pourrait être utile pour vos projets, comme un capteur de mouvement PIR ou un bouton-poussoir, par exemple.

- Lorsque l'ESP32 s'exécute pour la première fois, il prend une nouvelle photo et l'enregistre dans le système de fichiers (SPIFFS) ;
- L'ESP32-CAM se connecte à Firebase en tant qu'utilisateur avec e-mail et mot de passe ;< /li>
- L'ESP32-CAM envoie l'image au stockage Firebase ;
- Après cela, vous pouvez accéder à votre console Firebase pour afficher les images ;
- Plus tard, vous pouvez créez une application Web à laquelle vous pouvez accéder de n'importe où pour afficher les images ESP32-CAM (nous créerons cela dans un futur tutoriel).
Contenu
Voici un résumé des étapes à suivre pour créer ce projet.
- Créer un projet Firebase
- Définir les méthodes d'authentification
- Créer un compartiment de stockage
- Obtenir la clé API du projet
- ESP32-CAM Envoyer des images au stockage Firebase
1) Créer un projet Firebase
1) Aller à Firebase et connectez-vous à l'aide d'un compte Google Compte.
2) Cliquez sur Commencer puis Ajouter un projet pour créer un nouveau projet.
3) Donnez un nom à votre projet, par exemple : Demo ESP Firebase.

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

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 doivent connaître l'identité d'un utilisateur. En d'autres termes, il s'occupe de la connexion et de l'identification des utilisateurs (dans ce cas, l'ESP32-CAM). 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.

2) Select the Option Email/Password.

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

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

5) Maintenant, vous devez ajouter un utilisateur. Toujours dans l'onglet Authentification, sélectionnez l'onglet Utilisateurs en haut. Cliquez ensuite sur Ajouter un 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 aux fichiers de stockage. 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.

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

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) Créer un compartiment de stockage
1) Dans la barre latérale de gauche, cliquez sur Stockage , puis sur Commencer.

2) Utilisez les règles de sécurité par défaut : cliquez sur Suivant.

3) Sélectionnez votre emplacement de stockage : il doit être le plus proche de votre pays.

4) Attendez quelques secondes pendant qu'il crée le bucket de stockage.

5) Le compartiment de stockage est maintenant configuré. Copiez l'ID du bucket de stockage, car vous en aurez besoin plus tard (copiez uniquement la section mise en évidence par un rectangle rouge, comme indiqué ci-dessous).

4) Obtenir la clé API du projet
Pour vous connecter à votre projet Firebase à l'aide de l'ESP32-CAM, 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 de gauche, cliquez sur Paramètres du projet.

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

5) ESP32-CAM - Envoyer des images au stockage Firebase
Avant de poursuivre le didacticiel, assurez-vous de vérifier les prérequis suivants.
Installer le module complémentaire ESP32
Nous allons programmer la carte ESP32-CAM à l'aide de l'IDE Arduino. Vous avez donc besoin de l'IDE Arduino installé ainsi que du module complémentaire ESP32. Suivez le tutoriel suivant pour l'installer, si vous ne l'avez pas déjà fait.
- Installation de la carte ESP32 dans l'IDE Arduino (Mac instructions OS X et Linux
Installation de la bibliothèque client ESP Firebase
La bibliothèque Firebase-ESP-Client fournit plusieurs exemples pour s'interfacer avec les services Firebase. Il fournit un exemple qui montre comment envoyer des fichiers à Firebase Storage. Notre code sera basé sur cet exemple. Donc, vous devez vous assurer que cette bibliothèque est installée.
Installation – Code VS + PlatformIO
Si vous utilisez VS Code avec l'extension PlatformIO, 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.

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

Modifiez également la vitesse du moniteur à 115200 en ajoutant la ligne suivante au fichier platformio.ini de votre projet :
monitor_speed = 115200
Installation – Arduino IDE
Si vous utilisez Arduino IDE, suivez les étapes suivantes pour installer la bibliothèque.
- Accédez à Croquis > ; Inclure la bibliothèque > ; Gérer les bibliothèques
- Recherchez Firebase ESP Client et installez Firebase Arduino Client Library for ESP8266 and ESP32 by Mobitz.< /li>

Maintenant, vous êtes prêt à commencer à programmer la carte ESP32-CAM pour envoyer des images à Firebase Storage.
ESP32-CAM Envoyer des images à Firebase – Code
Copiez le code suivant dans votre IDE Arduino ou dans le fichier main.cpp si vous utilisez VS Code. Il prend une photo et l'envoie à Firebase lors du premier démarrage.
#include "WiFi.h"
#include "esp_camera.h"
#include "Arduino.h"
#include "soc/soc.h" // Désactiver les problèmes de baisse de tension
#include "soc/rtc_cntl_reg.h" // Désactiver les problèmes de baisse de tension
#include "driver/rtc_io.h"
#include <SPIFFS.h>
#include <FS.h>
#include <Firebase_ESP_Client.h>
//Provide the token generation process info.
#include <addons/TokenHelper.h>
//Remplacer par vos identifiants réseau
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// Insérer la clé API du projet Firebase
#define API_KEY "REPLACE_WITH_YOUR_FIREBASE_PROJECT_API_KEY"
// Insérer l'e-mail autorisé et le mot de passe correspondant
#define USER_EMAIL "REPLACE_WITH_THE_AUTHORIZED_USER_EMAIL"
#define USER_PASSWORD "REPLACE_WITH_THE_AUTHORIZED_USER_PASSWORD"
// Insérer l'ID de bucket de stockage Firebase, par exemple bucket-name.appspot.com
#define STORAGE_BUCKET_ID "REPLACE_WITH_YOUR_STORAGE_BUCKET_ID"
// Nom du fichier photo à enregistrer dans SPIFFS
#define FILE_PHOTO "/data/photo.jpg"
// Broches du module de caméra OV2640 (CAMERA_MODEL_AI_THINKER)
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
boolean takeNewPhoto = true;
//Définir les objets de données Firebase
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig configF;
bool taskCompleted = false;
// Vérifie si la capture de photo a réussi
bool checkPhoto( fs::FS &fs ) {
File f_pic = fs.open( FILE_PHOTO );
unsigned int pic_sz = f_pic.size();
return ( pic_sz > 100 );
}
// Capturez une photo et enregistrez-la dans SPIFFS
void capturePhotoSaveSpiffs( void ) {
camera_fb_t * fb = NULL; // pointer
bool ok = 0;// Booléen indiquant si la photo a été prise correctement
do {
// Prendre une photo avec l'appareil photo
Serial.println("Taking a photo...");
fb = esp_camera_fb_get();
if (!fb) {
Serial.println("La capture de l'appareil photo a échoué");
return;
}
// Nom du fichier image
Serial.printf("Nom du fichier image: %sn", FILE_PHOTO);
File file = SPIFFS.open(FILE_PHOTO, FILE_WRITE);
// Insertion des données dans le fichier photo
if (!file) {
Serial.println("Impossible d'ouvrir le fichier en mode écriture");
}
else {
file.write(fb->buf, fb->len); // payload (image), payload length
Serial.print("The picture has been saved in ");
Serial.print(FILE_PHOTO);
Serial.print(" - Size: ");
Serial.print(file.size());
Serial.println(" bytes");
}
// Close the file
file.close();
esp_camera_fb_return(fb);
// vérifie si le fichier a été correctement enregistré dans SPIFFS
ok = checkPhoto(SPIFFS);
} while ( !ok );
}
void initWiFi(){
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
}
void initSPIFFS(){
if (!SPIFFS.begin(true)) {
Serial.println("Une erreur s'est produite lors du montage de SPIFFS");
ESP.restart();
}
else {
delay(500);
Serial.println("SPIFFS monté avec succès");
}
}
void initCamera(){
// OV2640 camera module
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
if (psramFound()) {
config.frame_size = FRAMESIZE_UXGA;
config.jpeg_quality = 10;
config.fb_count = 2;
} else {
config.frame_size = FRAMESIZE_SVGA;
config.jpeg_quality = 12;
config.fb_count = 1;
}
// Camera init
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("L'initialisation de la caméra a échoué avec une erreur 0x%x", err);
ESP.restart();
}
}
void setup() {
// Port série à des fins de débogage
Serial.begin(115200);
initWiFi();
initSPIFFS();
// Éteint le 'détecteur de baisse de tension'
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
initCamera();
//Firebase
// Affectez la clé API
configF.api_key = API_KEY;
//Attribuez les identifiants de connexion de l'utilisateur
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
// Attribuez la fonction de rappel pour la tâche de génération de jeton de longue durée
configF.token_status_callback = tokenStatusCallback; //see addons/TokenHelper.h
Firebase.begin(&configF, &auth);
Firebase.reconnectWiFi(true);
}
void loop() {
if (takeNewPhoto) {
capturePhotoSaveSpiffs();
takeNewPhoto = false;
}
delay(1);
if (Firebase.ready() && !taskCompleted){
taskCompleted = true;
Serial.print("Uploading picture... ");
// Le type MIME doit être valide pour éviter le problème de téléchargement.
//Les systèmes de fichiers pour flash et SD/SDMMC peuvent être modifiés dans FirebaseFS.h.
if (Firebase.Storage.upload(&fbdo, STORAGE_BUCKET_ID /* Firebase Storage bucket id */, FILE_PHOTO /* path to local file */, mem_storage_type_flash /* memory storage type, mem_storage_type_flash and mem_storage_type_sd */, FILE_PHOTO /* path of remote file stored in the bucket */, "image/jpeg" /* mime type */)){
Serial.printf("nDownload URL: %sn", fbdo.downloadURL().c_str());
}
else{
Serial.println(fbdo.errorReason());
}
}
}
Vous devez insérer vos informations d'identification réseau, l'ID de compartiment de stockage et la clé API du projet pour que le projet fonctionne.
Cette esquisse était basée sur un exemple de base fourni par la bibliothèque. Vous trouverez d'autres exemples ici.
Fonctionnement du code
Continuez à lire pour savoir comment fonctionne le code .
Libraries
Tout d'abord, incluez les bibliothèques requises.
#include "WiFi.h"
#include "esp_camera.h"
#include "Arduino.h"
#include "soc/soc.h" // Disable brownout problems
#include "soc/rtc_cntl_reg.h" // Disable brownout problems
#include "driver/rtc_io.h"
#include <SPIFFS.h>
#include <FS.h>
#include <Firebase_ESP_Client.h>
// Fournissez les informations sur le processus de génération de jeton.
#include <addons/TokenHelper.h>
Identifiants réseau
Insérez vos informations d'identification réseau dans les variables suivantes afin que l'ESP puisse se connecter à Internet et communiquer avec Firebase.
//Remplacer par vos identifiants réseau
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
Clé API du projet Firebase
Insérez la clé API de votre projet Firebase.
// Insert Firebase project API Key
#define API_KEY "REPLACE_WITH_YOUR_FIREBASE_PROJECT_API_KEY."
E-mail et mot de passe de l'utilisateur
Insérez l'adresse e-mail autorisée et le mot de passe correspondant.
#define USER_EMAIL "REPLACE_WITH_THE_AUTHORIZED_USER_EMAIL"
#define USER_PASSWORD "REPLACE_WITH_THE_AUTHORIZED_USER_PASSWORD"
ID du compartiment de stockage Firebase
Insérez l'ID du bucket de stockage Firebase, par exemple bucket-name.appspot.com. Dans mon cas, il s'agit de esp-firebase-demo.appspot.com.
define STORAGE_BUCKET_ID "REPLACE_WITH_YOUR_STORAGE_BUCKET_ID"
Chemin de l'image
La variable FILE_PHOTO définit le chemin SPIFFS où l'image sera enregistrée. Il sera enregistré avec le nom photo.jpg sous le dossier data.
#define FILE_PHOTO "/data/photo.jpg"
Définition des broches ESP32-CAM
Les lignes suivantes définissent les broches ESP32-CAM. C'est la définition du module ESP32-CAM AI-Thinker. Si vous utilisez un autre module ESP32-CAM, vous devez modifier la définition de la broche.
// Broches du module de caméra OV2640 (CAMERA_MODEL_AI_THINKER)
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
Autres variables
La variable takeNewPhoto vérifie s'il est temps de prendre une nouvelle photo. Nous allons le définir sur true, afin qu'il prenne une photo lors de la première exécution du tableau.
boolean takeNewPhoto = true;
Ensuite, nous définissons les objets de données de configuration Firebase.
//Définir les objets de données Firebase
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig configF;
La taskCompleted est une variable booléenne qui vérifie si nous nous sommes connectés avec succès à Firebase.
bool taskCompleted = false;
checkPhoto() Function
La fonction checkPhoto() vérifie si la photo a bien été prise et enregistrée dans SPIFFS.
// Vérifie si la capture de photo a réussi
bool checkPhoto( fs::FS &fs ) {
File f_pic = fs.open( FILE_PHOTO );
unsigned int pic_sz = f_pic.size();
return ( pic_sz > 100 );
}
capturePhotoSaveSpiffs() Function
La fonction capturePhotoSaveSpiffs() prend une photo et l'enregistre dans le système de fichiers ESP32.
// Capturez une photo et enregistrez-la dans SPIFFS
void capturePhotoSaveSpiffs( void ) {
camera_fb_t * fb = NULL; // pointer
bool ok = 0; // Booléen indiquant si la photo a été prise correctement
do {
// Prendre une photo avec l'appareil photo
Serial.println("Taking a photo...");
fb = esp_camera_fb_get();
if (!fb) {
Serial.println("La capture de l'appareil photo a échoué");
return;
}
// Nom du fichier image :
Serial.printf("Nom du fichier image : %sn", FILE_PHOTO);
File file = SPIFFS.open(FILE_PHOTO, FILE_WRITE);
// Insertion des données dans le fichier photo
if (!file) {
Serial.println("Impossible d'ouvrir le fichier en mode écriture");
}
else {
file.write(fb->buf, fb->len); // payload (image), payload length
Serial.print("La photo a été enregistrée dans ");
Serial.print(FILE_PHOTO);
Serial.print(" - Size: ");
Serial.print(file.size());
Serial.println(" bytes");
}
// Close the file
file.close();
esp_camera_fb_return(fb);
// vérifie si le fichier a été correctement enregistré dans SPIFFS
ok = checkPhoto(SPIFFS);
} while ( !ok );
}
initWiFi() Function
The initWiFi()la fonction initialise le Wi-Fi.
void initWiFi(){
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
}
initSPIFFS() Function
The initSPIFFS() La fonction initialise le système de fichiers SPIFFS.
void initSPIFFS(){
if (!SPIFFS.begin(true)) {
Serial.println("Une erreur s'est produite lors du montage de SPIFFS");
ESP.restart();
}
else {
delay(500);
Serial.println("SPIFFS monté avec succès");
}
}
initCamera() Function
The initCamera() la fonction initialise l'ESP32-CAM.
void initCamera(){
// OV2640 camera module
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
if (psramFound()) {
config.frame_size = FRAMESIZE_UXGA;
config.jpeg_quality = 10;
config.fb_count = 2;
} else {
config.frame_size = FRAMESIZE_SVGA;
config.jpeg_quality = 12;
config.fb_count = 1;
}
// Camera init
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("L'initialisation de la caméra a échoué avec une erreur 0x%x", err);
ESP.restart();
}
}
setup()
In the setup(), initialisez le moniteur série, le Wi-Fi, SPIFFS et la caméra.
// Port série à des fins de débogage
Serial.begin(115200);
initWiFi();
initSPIFFS();
// Éteint le 'détecteur de baisse de tension'
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
initCamera();
Ensuite, attribuez les paramètres suivants aux objets de configuration Firebase.
// Affecte la clé API
configF.api_key = API_KEY;
//Attribuez les identifiants de connexion de l'utilisateur
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
// Attribuez la fonction de rappel pour la tâche de génération de jeton de longue durée
configF.token_status_callback = tokenStatusCallback; //see addons/TokenHelper.h
Enfin, initialisez Firebase.
Firebase.begin(&configF, &auth);
Firebase.reconnectWiFi(true);
loop()
Dans la boucle(), prenez une nouvelle photo et enregistrez-la dans le système de fichiers.
if (takeNewPhoto) {
capturePhotoSaveSpiffs();
takeNewPhoto = false;
}
Enfin, envoyez l'image à Firebase.
if (Firebase.ready() && !taskCompleted){
taskCompleted = true;
Serial.print("Téléchargement de l'image... ");
// Le type MIME doit être valide pour éviter le problème de téléchargement.
//Les systèmes de fichiers pour flash et SD/SDMMC peuvent être modifiés dans FirebaseFS.h.
if (Firebase.Storage.upload(&fbdo, STORAGE_BUCKET_ID /* Firebase Storage bucket id */, FILE_PHOTO /* path to local file */, mem_storage_type_flash /* memory storage type, mem_storage_type_flash and mem_storage_type_sd */, FILE_PHOTO /* path of remote file stored in the bucket */, "image/jpeg" /* mime type */)){
Serial.printf("nDownload URL: %sn", fbdo.downloadURL().c_str());
}
else{
Serial.println(fbdo.errorReason());
}
}
La commande qui envoie réellement l'image est Firebase.Storage.upload():
Firebase.Storage.upload(&fbdo, STORAGE_BUCKET_ID, FILE_PHOTO, mem_storage_type_flash, FILE_PHOTO, "image/jpeg")
Cette fonction renvoie une variable booléenne indiquant le succès de l'opération.
Il accepte comme deuxième argument, l'ID de compartiment de stockage. Ensuite, le chemin où le fichier est enregistré ; le type de stockage (il peut s'agir de SPIFFS ou de carte SD*) ; le chemin où le fichier sera enregistré dans le stockage Firebase ; et enfin, le type mime.
*nous n'avons pas pu faire fonctionner cet exemple avec la carte ESP32-CAM + microSD. Si quelqu'un connaît une solution, merci de la partager.
Démonstration
Après avoir inséré les informations d'identification requises, téléchargez le code sur votre ESP32-CAM.
Après avoir téléchargé le code, ouvrez le moniteur série à un débit en bauds de 115200. Appuyez sur le bouton RST embarqué ESP32-CAM.
Il tentera de prendre une photo et l'enverra à Firebase Storage.

Maintenant, accédez à votre console Firebase et sélectionnez l'onglet Stockage. Il devrait y avoir un dossier appelé data qui contient votre image.

Vous pouvez vérifier certaines métadonnées sur l'image et l'afficher en taille réelle. Vous pouvez également accéder à l'image en accédant à l'URL de téléchargement imprimée sur le moniteur série.

Résumé
Dans ce guide, vous avez appris à créer un projet Firebase avec Storage. Firebase Storage vous permet de stocker des fichiers sur le cloud. Ensuite, vous pouvez accéder à ces fichiers en accédant à la console Firebase, ou vous pouvez créer une application Web pour afficher ces fichiers (nous le ferons dans un futur tutoriel).
Nous avons montré un exemple simple sur l'envoi d'une photo prise avec l'ESP32-CAM vers le stockage Firebase. L'exemple est aussi simple que possible afin que vous puissiez comprendre les bases. L'idée est de modifier le projet pour rendre quelque chose d'utile, comme prendre une photo et la télécharger sur le stockage Firebase lorsqu'un mouvement est détecté, lorsqu'une porte s'ouvre ou lorsque vous appuyez sur un bouton.