You are currently viewing Caméra Wi-Fi ESP32-CAM avec Arduino

Configuration de la caméra OV2640

La caméra OV2640 se pilote en utilisant la bibliothèque « esp camera » déjà incluse dans les bibliothèques par défaut de l’ESP32. Pour l’utiliser, il suffit simplement de la déclarer au début de notre programme par l’instruction suivante:

#include <esp_camera.h>

Nous allons regrouper l’initialisation et la configuration de la caméra OV2640 dans une fonction baptisée « InitialiserCamera » :

esp_err_t InitialiserCamera()
{
    // Variables locales de la fonction
    esp_err_t       Retour_L;

    return(Retour_L);
}

L’instruction proposée par la bibliothèque pour l’initialisation de la caméra est la fonction « esp_camera_init » qui prend en paramètre une structure de type « camera_config_t ». Nous commençons par déclarer cette structure avant de la renseigner:

camera_config_t ConfigurationCamera_L;

L’OV2640 étant un périphérique externe au microcontrôleur ESP32, il est nécessaire de préciser le brochage de cette caméra dans la structure. La fiche technique de l’ESP32-CAM du fabricant AI-Thinker nous fournit ces informations page 3. Nous en déduisons les valeurs suivantes:

ConfigurationCamera_L.pin_d0 = 5;
ConfigurationCamera_L.pin_d1 = 18;
ConfigurationCamera_L.pin_d2 = 19;
ConfigurationCamera_L.pin_d3 = 21;
ConfigurationCamera_L.pin_d4 = 36;
ConfigurationCamera_L.pin_d5 = 39;
ConfigurationCamera_L.pin_d6 = 34;
ConfigurationCamera_L.pin_d7 = 35;
ConfigurationCamera_L.pin_xclk = 0;
ConfigurationCamera_L.pin_pclk = 22;
ConfigurationCamera_L.pin_vsync = 25;
ConfigurationCamera_L.pin_href = 23;
ConfigurationCamera_L.pin_sscb_sda = 26;
ConfigurationCamera_L.pin_sscb_scl = 27;
ConfigurationCamera_L.pin_pwdn = 32;

Il est également à préciser que l’entrée « ResetB » (broche C6) de l’OV2640 n’est pas câblée à l’ESP32. On indique à la bibliothèque que cette entrée ne sera pas utilisée par la valeur « -1 » :

ConfigurationCamera_L.pin_reset = -1;

Utilisée en mode esclave, la caméra OV2640 nécessite en entrée un signal d’horloge.  Pour fournir ce signal, nous allons utiliser le générateur de fréquence 0 (PWM0) du microcontrôleur ESP32 à une fréquence de 20 MHz:

ConfigurationCamera_L.ledc_channel = LEDC_CHANNEL_0;
ConfigurationCamera_L.ledc_timer = LEDC_TIMER_0;
ConfigurationCamera_L.xclk_freq_hz = 20000000;

Le format de compression jpeg est choisi avec l’utilisation d’1 seul buffer:

ConfigurationCamera_L.pixel_format = PIXFORMAT_JPEG;
ConfigurationCamera_L.fb_count = 1;

Sur une échelle de 63 (qualité bas) à 0 (meilleur qualité), nous choisissons un niveau de 15:

ConfigurationCamera_L.jpeg_quality = 15;

La caméra est capable d’acquérir des images au format UXGA (1632×1232) cependant afin d’avoir une vidéo fluide sur notre navigateur internet nous abaissons cette résolution au format SVGA (800×600):

ConfigurationCamera_L.frame_size = FRAMESIZE_SVGA;

Maintenant que la structure « ConfigurationCamera_L » est remplie, il reste à lancer l’initialisation de la caméra pour finaliser la fonction « InitialiserCamera » :

Retour_L=esp_camera_init(&ConfigurationCamera_L);
if (Retour_L == ESP_OK)
{
    Serial.printf("La caméra est initialisée\n");
}
else
{
    Serial.printf("Erreur 0x%x lors de l'initialisation de la caméra\n", Retour_L);
}

Lors de l’appel de cette fonction d’initialisation de la caméra dans la fonction « setup » nous choisissons de transmettre le code d’erreur par e-mail si l’initialisation échoue.

Retour_L = InitialiserCamera();
if(Retour_L == ESP_OK)
{
    snprintf(Buffer_L, 200, "<html><body><p><strong>La caméra a démarré avec succès !</strong></p><p>Cliquez sur le lien \"http://%u.%u.%u.%u\" pour vous connecter.</p></body></html>", AdresseIpLocale_G[0], AdresseIpLocale_G[1], AdresseIpLocale_G[2], AdresseIpLocale_G[3]);
}
else
{
    snprintf(Buffer_L, 200, "<html><body><p><strong>Erreur d'initialisation de la caméra !</strong></p><p>L'erreur 0x%x a été rencontrée.</p></body></html>", Retour_L);
}
EnvoyerEmail("Démarrage de la caméra Wi-Fi", Buffer_L);

Après ces différents ajouts de ligne de code, nous arrivons au programme suivant:

// Déclaration des bibliothèques utilisées
#include <WiFi.h>
#include <WiFiClientSecure.h>
#define ENABLE_SMTP
#include <ReadyMail.h>
#include <esp_camera.h>

// Définition des constantes globales
#define PORT_LED_FLASH      4   // Numéro de port auquel est branchée la LED servant de flash.
 
// Déclaration globales
IPAddress AdresseIpLocale_G; // Permet de mémoriser l'adresse IP de la carte ESP32-CAM
 
// Fonction de démarrage, s'exécute une seule fois:
void setup()
{
    // Variables de la fonction
    char Buffer_L[200];
    esp_err_t   Retour_L;

    delay(1000); // Pour faciliter la reconnaissance de l'interface USB par l'ordinateur
    pinMode(PORT_LED_FLASH, OUTPUT); // Initialisation en "sortie" de la broche d'E/S connectée au flash

    WiFi.setAutoReconnect(false);
    WiFi.mode(WIFI_STA); // Mode station

    Serial.begin(115200); // Ouverture du port série à 115200 bauds
    connecterWifi();
    AdresseIpLocale_G = WiFi.localIP(); // Mémorisation de l'adresse actuelle

    Retour_L = InitialiserCamera();
    if(Retour_L == ESP_OK)
    {
        snprintf(Buffer_L, 200, "<html><body><p><strong>La caméra a démarré avec succès !</strong></p><p>Cliquez sur le lien \"http://%u.%u.%u.%u\" pour vous connecter.</p></body></html>", AdresseIpLocale_G[0], AdresseIpLocale_G[1], AdresseIpLocale_G[2], AdresseIpLocale_G[3]);
    }
    else
    {
        snprintf(Buffer_L, 200, "<html><body><p><strong>Erreur d'initialisation de la caméra !</strong></p><p>L'erreur 0x%x a été rencontrée.</p></body></html>", Retour_L);
    }
    EnvoyerEmail("Démarrage de la caméra Wi-Fi", Buffer_L);
}

// Fonction principale du programme, s'exécute en boucle:
void loop()
{
    // Variables de la fonction
    char Buffer_L[200];

    if(WiFi.status()==WL_CONNECTED)
    {  
        // Internet est disponible
        if (WiFi.localIP()!=AdresseIpLocale_G)
        {
            // L'ESP32-CAM vient d'obtenir une nouvelle adresse IP
            AdresseIpLocale_G = WiFi.localIP(); // Mémorisation de l'adresse actuelle
            snprintf(Buffer_L, 200, "<html><body><p><strong>La caméra a changé d'adresse IP ou le flux a été réinitialisé</strong></p><p>Cliquez sur le lien \"http://%u.%u.%u.%u\" pour vous connecter.</p></body></html>", AdresseIpLocale_G[0], AdresseIpLocale_G[1], AdresseIpLocale_G[2], AdresseIpLocale_G[3]);
            EnvoyerEmail("Changement d'adresse IP de la caméra Wi-Fi", Buffer_L);
        }
    }
    else
    {
        // Pas de connexion internet
        WiFi.disconnect();
        connecterWifi();
    }
}

bool connecterWifi(void)
{
    // Constantes de la fonction
    const char* SSID_L = "LiveBox_1324"; // Nom du réseau Wi-Fi
    const char* MOT_DE_PASSE_L = "12345?ABCDE"; // Mot De Passe du réseau

    // Variables de la fonction
    bool Retour_L;
    wl_status_t StatutConnexion_L; // Pour mémoriser l'état de la connexion
    
    Retour_L = false;
    
    Serial.print("Connexion");
    WiFi.begin(SSID_L, MOT_DE_PASSE_L); // Tentative de connexion au point d'accès Wi-Fi

    StatutConnexion_L = WiFi.status(); // Lecture de l'état de la connexion et mémorisation dans la variable "StatutConnexion_L"
    while (StatutConnexion_L != WL_CONNECTED)
    {
        switch(StatutConnexion_L)
        {
            case WL_IDLE_STATUS:
                Serial.print(".");
                break;
            case WL_NO_SSID_AVAIL:
                Serial.println("\nRecherche du point d'accès");
                break;
            case  WL_CONNECT_FAILED:
                Serial.println("\nMot de passe KO ou protocole incompatible");
                break;
            case  WL_CONNECTION_LOST:
                Serial.println("\nConnexion perdue");
                break;
            case WL_DISCONNECTED:
                Serial.println("\nDéconnecté");
                break;
            default:
                Serial.print("\nAutre erreur - Code: ");
                Serial.println(StatutConnexion_L);
                break;
        }
        if(StatutConnexion_L != WL_IDLE_STATUS)
        {
            WiFi.disconnect();
            WiFi.begin(SSID_L, MOT_DE_PASSE_L); // Tentative de connexion au point d'accès Wi-Fi
        }
        digitalWrite(PORT_LED_FLASH, HIGH);
        delay(100);
        digitalWrite(PORT_LED_FLASH, LOW);
        delay(500);
        StatutConnexion_L = WiFi.status(); // Lecture de l'état de la connexion et mémorisation dans la variable "StatutConnexion_L"
    }
    Serial.print("\nConnection OK - RSSI: ");
    Serial.print(WiFi.RSSI());
    Serial.println(" dBm");
    return(Retour_L);
}

bool EnvoyerEmail(const char *pObjet_P, const char *pMessage_P)
{
    // Constantes locales de la fonction
    const char* ADRESSE_EMAIL_EMISSION_L = "votremaildetest@gmail.com";
    const char* NOM_EMETTEUR_L = "Camera Wi-Fi";
    const char* MOT_DE_PASSE_APPLICATION_L = "12345MoteDePasseApplication";
    const char* ADRESSE_SERVEUR_SMTP_L = "smtp.gmail.com";
    const int PORT_SERVEUR_SMTP_L = 465;  // Port SSL utilisé
    const char* ADRESSE_EMAIL_DESTINATAIRE_L = "votremail@gmail.com";

    // Variables locales de la fonction
    WiFiClientSecure ClientSsl_L;
    SMTPClient ClientSmtp_L(ClientSsl_L);
    SMTPMessage DonneesEmail_L;  // Données de l'e-mail à envoye
    bool Retour_L = false;
    char Buffer_L[100];

    // On empêche la vérification du certificat.
    ClientSsl_L.setInsecure();

    Serial.println("Connexion au serveur SMTP...");
    ClientSmtp_L.connect(ADRESSE_SERVEUR_SMTP_L, PORT_SERVEUR_SMTP_L);
    if (!ClientSmtp_L.isConnected())
    {
       Serial.println("Impossible de se connecter au serveur SMTP.");
    }
    else
    {
        Serial.println("Authentification avec mot de passe d'application Gmail.");
        ClientSmtp_L.authenticate(ADRESSE_EMAIL_EMISSION_L, MOT_DE_PASSE_APPLICATION_L, readymail_auth_password);
        if (!ClientSmtp_L.isAuthenticated())
        {
            Serial.println("Erreur lors de l'authentification SMTP.");
        }
        else
        {
            // Construction du message
            snprintf(Buffer_L, 100, "%s <%s>", NOM_EMETTEUR_L, ADRESSE_EMAIL_EMISSION_L);
            DonneesEmail_L.headers.add(rfc822_from, Buffer_L); // Nom et adresse email de l'émetteur
            DonneesEmail_L.headers.add(rfc822_to, ADRESSE_EMAIL_DESTINATAIRE_L);  // Adresse du destinataire
            DonneesEmail_L.headers.add(rfc822_subject, pObjet_P);  // Objet du mail
            DonneesEmail_L.html.body(pMessage_P); // Contenu du message au format HTML

            Serial.println("Envoi du mail.");
            if (!ClientSmtp_L.send(DonneesEmail_L))
            {
                Serial.println("Échec d'envoi de l'email.");
            }
            else
            {
                Retour_L = true;
            }

        }
    }
    ClientSmtp_L.stop();
    return(Retour_L);
}

esp_err_t InitialiserCamera()
{
    // Variables locales de la fonction
    esp_err_t       Retour_L;
    camera_config_t ConfigurationCamera_L;
    // Cablage de la caméra sur l'ESP32-CAM du fabricant AI-Thinker
    ConfigurationCamera_L.pin_d0 = 5;
    ConfigurationCamera_L.pin_d1 = 18;
    ConfigurationCamera_L.pin_d2 = 19;
    ConfigurationCamera_L.pin_d3 = 21;
    ConfigurationCamera_L.pin_d4 = 36;
    ConfigurationCamera_L.pin_d5 = 39;
    ConfigurationCamera_L.pin_d6 = 34;
    ConfigurationCamera_L.pin_d7 = 35;
    ConfigurationCamera_L.pin_xclk = 0;
    ConfigurationCamera_L.pin_pclk = 22;
    ConfigurationCamera_L.pin_vsync = 25;
    ConfigurationCamera_L.pin_href = 23;
    ConfigurationCamera_L.pin_sccb_sda = 26;
    ConfigurationCamera_L.pin_sccb_scl = 27;
    ConfigurationCamera_L.pin_pwdn = 32;
    ConfigurationCamera_L.pin_reset = -1;
    // La génération du signal d'horloge
    ConfigurationCamera_L.ledc_channel = LEDC_CHANNEL_0;
    ConfigurationCamera_L.ledc_timer = LEDC_TIMER_0;
    ConfigurationCamera_L.xclk_freq_hz = 20000000;
    // Compression jpeg
    ConfigurationCamera_L.pixel_format = PIXFORMAT_JPEG;
    ConfigurationCamera_L.grab_mode = CAMERA_GRAB_LATEST;
    ConfigurationCamera_L.fb_count = 1;
    ConfigurationCamera_L.jpeg_quality = 15;
    // Résolution de l'image
    ConfigurationCamera_L.frame_size = FRAMESIZE_SVGA;
    // Lancement de l'initialisation de la caméra
    Retour_L=esp_camera_init(&ConfigurationCamera_L);
    if (Retour_L == ESP_OK)
    {
        Serial.printf("La caméra est initialisée\n");
    }
    else
    {
        Serial.printf("Erreur 0x%x lors de l'initialisation de la caméra\n", Retour_L);
    }
    return(Retour_L);
}

Afin de valider cette nouvelle étape du programme Arduino de caméra Wi-Fi , vous pouvez le compiler puis le transférer dans l’ESP32-CAM.

Lorsque vous visualisez les traces de déverminage, un message « La caméra est initialisée » vous confirme que l’initialisation de la caméra OV260 s’est bien déroulée.

Traces du compte-rendu de l'initialisation de la caméra
Traces du compte-rendu de l’initialisation de la caméra

Maintenant que cette étape est validée, passons à la création du serveur de flux vidéo pour terminer le programme (page suivante).

S’abonner
Notification pour
guest
60 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
bariod
bariod
5 années il y a

Bonjour et félicitations pour ce tuto.
Pourrait-il être utilisé pour détecter la sortie de pelouse (plus de vert) par un robot tondeuse ?
Merci d’avance si vous me répondez.

ach
ach
Répondre à  bariod
4 années il y a

un tuto bien complet, mais j ai une question je souhaite accéder a distance a ma esp32cam .si je me trouve a l extérieur
j aimerai votre aide a ce sujet car je galère a trouver la solution et merci d avance .

Stéphane
Stéphane
5 années il y a

Bonjour Nico,
Waouh, superbe travail!!
Ca va grandement m’aider dans mon projet, terrarium connecté avec capteurs température, hygrométrie, lumière, niveau eau réservoir et camera, le tout sur wifi pour site internet et smartphone…
J’ai fait de la programmation il y a trés trés longtemps et j’ai aucune connaissance en arduino, donc va y avoir du boulot…..
Et ton travail va me fait gagner du temps à un moment donné!!!
MERCI

Weado
Weado
5 années il y a

Génial ce tuto en plus avec toutes les explications associées. Au top !
Je vais tenter d’adapter tout cela pour faire un timelaspe en mode low energy, même si je sais qu’il va falloir du boulot et surtout la question du stockage des images/gif.
Si certain on des idées je suis preneur.

Bruno
5 années il y a

Bonjour
Merci pour votre tuto.
N’étant pas du tout compétent niveau serveur, je me demandais si le flux de la caméra est disponible en local seulement ou bien en « extérieur » également ?
Pourrais-je voir le flux de ma caméra à la maison sur mon ordinateur au travail par exemple ?

Merci
Bruno

khumran
khumran
Répondre à  Nikko
3 années il y a

Bonjour Nico
Votre tuto est un très bon tuto mais comme Bruno j’aimerais pouvoir accéder à la camera quand je suis en déplacement cependant,
je ne sais pas comment déterminer ses
paramètres:
IPAddress AdresseIP_L(192, 168, 0, 130); // Définition de l’adresse IP de la caméra
IPAddress Passerelle_L(192, 168, 0, 1); // Passerelle par défaut de votre sous-réseau
IPAddress SousReseau_L(255, 255, 0, 0); // Masque de votre sous-réseau
et dans tous les cas que j’ai essayé en utilisant le cmd avec la commande ipconfig je ne trouve pas de solution de plus l’envoie de mail ne s’effectue plus comment cela se fait?

AnT0ine
AnT0ine
5 années il y a


Merci pour la suggestion, par contre je me permet une correction car la syntaxe d’après https://www.arduino.cc/en/Reference/WiFiConfig est WiFi.config(ip, dns, gateway); ou WiFi.config(ip, dns, gateway, subnet);
Donc ce serait plutôt, par exemple :
« WiFi.begin(SSID_L, MOT_DE_PASSE_L); » :
IPAddress AdresseIP_L(192, 168, 0, 130); // Définition de l’adresse IP de la caméra
IPAddress ServeurDeNom_L(9, 9, 9, 9); // DNS Quad9
IPAddress Passerelle_L(192, 168, 0, 1); // Passerelle par défaut de votre sous-réseau
IPAddress SousReseau_L(255, 255, 255, 0); // Masque de votre sous-réseau
WiFi.config(AdresseIP_L, ServeurDeNom_L, Passerelle_L, SousReseau_L) // Configuration de l’adresse IP statique

jp D
jp D
5 années il y a

Bonjour,

Ce tuto est très bien fait, progressif, et surtout explicatif, le logiciel est bien détaillé. En un mot c’est pédagogique …. Bravo
J’ai pu mettre en oeuvre une esp-cam venant de Chine sans notice, sans difficulté et en comprenant ce que je faisais. Merci !

JeanDa
JeanDa
5 années il y a

Bonjour Nico,
Superbe tuto, beau boulot.
Je suis enfin arrivé à faire quelque chose avec mon ESP32-CAM
MERCI.

Gérard
Gérard
5 années il y a

Bravo pour votre Tuto si bien détaillé.
J’ai 2 questions :
1) L’utilisation est en mode local je penses, mais voulez vous dire que c’est en mode AP (point d’accès sans internet)?
C’est ce que je cherche à faire pour mon projet, vous pouvez me confirmer cela svp ?
2) L’antenne de l’ESP32-cam est elle déjà soudée à l’achat, car je ne suis vraiment pas doué en soudure…
Vous pouvez me donner le lien de cet ESP32-cam avec l’antenne SOUDÉE si c’est le cas, svp ?
Merci

roro
roro
4 années il y a

bonjour et bravo pour votre travail, une question svp :

est-il possible ( et simple ? ) de réaliser cela : adjoindre un capteur PIR détection d’objet sur la carte « caméra » et si la sortie est a 1 => envoyer une photo tous les 15 s ou minute vers notre adresse mail tant cette entrée PIR est à 1.
merci ( cela serait pour une surveillance contre les cambriolages )
si oui, comment faire ?
encore merci

roro
roro
4 années il y a

merci NICO, je suis impatient de vous lire.
Pour le choix du capteur PIR oui, il y en a une multitude, le HC-SR501 fera très bien l’affaire avec ses 2 potentiomètres ( sensibilité et temps d’activation ) ce dernier nous permettant de limiter le nombre d’envoie de photo & mail (surtout ne pas utiliser avec un capteur LDR, qui détecte en plus le jour/nuit). Je pense placer le dispositif sur un endroit de passage avec un temps PIR faible ( 30s) et prise de photos tous les 10 secondes => donc pour chaque « alarme », cela nous donne donc 3 photos ! je pense que cela est suffisant pour ne pas être inondé de capture non plus.
je pense également, que le gros du travail est déjà fait par vous dans le sujet ci-dessus, mais j’ai beaucoup de mal à comprendre certains passages, mais je cherche . . .
A bientôt, et encore merci pour votre partage.

roro
roro
4 années il y a

NOTA : pour » juste cette application », capteur PIR + envoie d’image sur une adresse mail.
Peut-on se passer du raspberry ? l’ESP camera dispose du wifi, plus la box, donc ? ? ? possible ?
car pour cette application, je n’ai pas l’utilité de la vidéo en live donc aucun flux ( cela doit simplifier des choses )
éventuellement, et cela serait un plus, plus . . . une demande de prise de photo même sans alarme PIR par une commande internet sur une certaine adresse.
je m’excuse d’en demander beaucoup, mais c’est vraiment un sujet qui me tient à cœur et je suppose aussi à d’autres lecteurs.

une autre application « utile » à cette réalisation est de contrôler si mon chat mange bien à sa gamelle lors de mes absences. le dispositif prés de sa patté et clic ! une petite photo ! on aura donc le jour, l’heure que Monsieur le chat vient manger . ( je crois que vous aussi vous avez ce genre d’individus, donc vous me comprenez. )

roro
roro
4 années il y a

excusez, il n’y a pas de raspberry ici ( j’ai confondu avec un autre site ) => c’est parfait ! juste esp et une boite mail.

dominique
dominique
4 années il y a

Salut à tous je suis débutant en électronique svp mais du moins j’ai un projet qui me fascine..en effet j’aimerai renvoyer les flux vidéos de plusieurs esp32cam vers un serveur web hébergé en local(sur une Raspberry) et pouvoir les visualisés avec n’importe quel équipement connecté à ce réseau . j’aimerai également à travers chaque esp envoyé un signal analogique(son) vers le serveur web en même temps que le flux vidéo et ensuite connecter un esp32 sur ce réseau afin d’utiliser sa fonction DAC pour restituer le signal et si possible la vidéo(puisqu’il en possède2). je ne sais pas tout cela sera possible. si oui comment puis je le réaliser ? si non quelles sont les fonctionnalités qui ne peuvent pas être réalisée.. toute forme d’aide sera la bienvenue.
bien à vous…

roro
roro
Répondre à  dominique
4 années il y a

je ne sais pas si cela peux t’aider, mais j’ai ce site également qui traite ce sujet ( celui que j’ai confondu qui utilise un raspberry ) => https://projetsdiy.fr/esp32-cam-aithinker-flash-firmware-test/
avec Home Assistant ou Node Red cela doit répondre à ton projet.
mais ton projet revient je pense à un expert ? cela me parait assez compliquer à réaliser surtout pour un débutant.
( déjà la config d’un raspberry n’est pas simple je trouve  » j’ai mis plusieurs jours à modifier plusieurs fichiers pour le faire fonctionner avec Node red  » node RED utilise le langage particulier (javascript), plus esp32 . . . => bon courage ! ( enfin si tu y arrives  » je l’espère  » fais-en profiter la communauté ) merci

GiBi
GiBi
4 années il y a

Belle pédagogie !

ludovic fritz (esp32 cam)
ludovic fritz (esp32 cam)
4 années il y a

BONJOUR sil vous plait je ne parviens pas a me connecter il Ya un message d’erreur qui apparaît disant qu’une erreur fatale a été produite

ludovic fritz (esp32 cam)
ludovic fritz (esp32 cam)
4 années il y a

voici le message proprement dit
« A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header »

Henri
Henri
3 années il y a

Bonjour, juste une question, quelle est la portée de la caméra ?

Laurent
Laurent
3 années il y a

Bonjour
Bravo pour le tuto!
Quelle est l’autonomie avec 4 piles rechargeables?
Quel est le type des piles?
Merci d’avance

pascal
pascal
3 années il y a

Bonjour Nico,
Très beau boulot.
Par contre, j’ai l’erreur ci dessous et je n’arrive pas à la résoudre :
« Erreur lors de l’envoi d’e-mail:could not connect to server »
Merci si vous avez une idée.

Marechal
Marechal
3 années il y a

Merci. Un grand merci. PAM

thierry
3 années il y a

bonjour , comment -est il possible d’enregistrer le flux vidéo (de petite vidéo bien sur ) ? votre tuto est super !

Hireche abdelhamid
2 années il y a

Bravo !

En zone isolée et en absence de modem wifi , Mon projet serait d’associer la cam a un transmetteur GSM diffusant sur internet , y a t il des pistes ?

Hireche abdelhamid
2 années il y a

Merci enormement pour vos eclairages

Je dispose d’une adresse IP Fixe , j’entame et on verra ce que ca donnera

Hireche abdelhamid
2 années il y a

Merci , c’est bien noté

Nico
Nico
2 années il y a

Bonjour ! Est-ce que c’est possible de créer une mise en page pour la page web ?
Nico

Nico
Nico
Répondre à  Nikko
2 années il y a

Comment faire du coup ?

Nico
Nico
Répondre à  Nikko
2 années il y a

Merci quand même !

Nico

REuMI
REuMI
Répondre à  Nico
2 années il y a

bonjour,
tu as peut etre une solution ici
https://www.youtube.com/watch?v=DDMQbqPUliY

Nico
Nico
Répondre à  REuMI
2 années il y a

Merci ! Cela est très utile !

Nico

SON GOKU
SON GOKU
9 mois il y a

Bonjour et félicitation pour le tuto. Grâce à vous j’ai une meilleure compréhension de l’esp-32 et je suis capable d’utiliser la bibliothèque Wifi.H COMMME un grand.Je rencontre juste un problème au niveau de la définition d’un mot de passe pour les application, cette option ne s’affiche pas dans mon menue malgré que j’ai activé la double validation il y a plusieurs semaines

Vincent
Vincent
6 mois il y a

Bonjour à tous
je trouve ce tuto vraiment remarquable, il a fallu probablement passer beaucoup de temps à le mettre au point.
Malgré le suivi scrupuleux de chaque étape je n’ai pas réussi à afficher une vidéo.
Je n’ai aucun message d’erreur dans le moniteur série, les 2 dernières phrases sont: « Connection OK » et « La caméra est initialisée ».
Dans edge j’ai un écran noir, aucun message d’erreur, dans Firefox j’ai le message suivant: « La connexion avec le serveur a été réinitialisée pendant le chargement de la page. »
Je n’arrive pas à comprendre ,j’ai déconnecté, reconnecté la caméra sur la carte, c’est bien une OV2640, au cas ou, mais aucun changement?
Est ce que quelqu’un aurait eu le même problème que moi? Merci d’avavce

Vincent
Vincent
Répondre à  Nikko
6 mois il y a

Bonjour Nikko
Merci pour la réponse qui m’a permis de poursuivre.
J’ai testé une autre carte ESP32-CAM avec la même caméra, bingo.
Il y a néanmoins quelques points qui posent questions.
Tout d’abord j’ai utilisé l’exemple « CameraWebServer » avec la dernière version de la carte ESP (3.3.0), image correcte.
Par contre avec votre code j’avais une image très mauvaise et une liste E(xxxx) cam_hall: DMA overflaw. Une fois la liste complète editée dans le moniteur série, l’image était figée. J’ai testé une résolution plus faible, une fréquence plus faible rien n’y a fait. J’ai réinstallé votre code avec la version (2.0.9) identique à celle du tuto, cette fois j’ai obtenu une image correcte.
Cependant quelque chose m’intrigue, dans l’onglet de la page le sablier de chargement tourne en permanence sans affecter la vidéo. Ce qui n’est pas le cas avec l’exemple « CameraWebServer ».
A noter également avec la dernière version de la carte il y a un message d’erreur à la compilation concernant la bibliothèque ESP32_MailClient.
J’espère que ces infos seront utiles, merci

Vincent
Vincent
Répondre à  Nikko
6 mois il y a

Erratum: Ne pas tenir dans mon dernier message du sablier qui tourne en permanence, je ne l’ai plus constaté depuis !!!

Vincent
Vincent
Répondre à  Nikko
6 mois il y a

Du nouveau encore, avec tous les essais que je fait j’en perd mon latin.
ne pas tenir de l’erratum, désolé !

Pour résumé:

Avec la dernière version version 3.3.0:

Avec l’exemple CameraWebServer, ma carte fonctionne très bien, l’image est
correcte et stable.
Votre code ne fonctionne pas, l’image est de mauvaise qualité. Le moniteur série donne l’erreur suivante de ce type:

Guru Meditation Error: Core 1 panic’ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC : 0x400014e8 PS : 0x00060830 A0 : 0x800d133c A1 : 0x3ffb96d0
A2 : 0xa341aa26 A3 : 0xa341aa24 A4 : 0x000000ff A5 : 0x0000ff00
A6 : 0x00ff0000 A7 : 0xff000000 A8 : 0x00000000 A9 : 0x00000001
A10 : 0x00000001 A11 : 0x00060823 A12 : 0x00060820 A13 : 0x00000020
A14 : 0x00000000 A15 : 0x00000000 SAR : 0x0000000a EXCCAUSE: 0x0000001c
EXCVADDR: 0xa341aa24 LBEG : 0x4000c2e0 LEND : 0x4000c2f6 LCOUNT : 0xffffffff
ELF file SHA256: 0000000000000000
Backtrace: 0x400014e8:0x3ffb96d0 0x400d1339:0x3ffb96e0 0x400d136d:0x3ffb9700 0x400d0509:0x3ffb9720 0x40089792:0x3ffb9750

Suivi des lignes de message ……. cam_hal: DMA overflow

Avec l’avant dernière version 3.2.1

Votre code fonctionnent très bien. L’image est correcte mais avec une stabilité perturbée, si la caméra bouge régulièrement, l’image se fige de temps en temps (le buffer?)
A noter que j’ai supprimé toutes les lignes de code concernant l’envoi de mail et la bibliothèque associée qui est source d’erreur au moins avec la 3.3.0.

Voilà j’espère que mon message est clair et qu’il vous sera utile
Merci encore pour votre aide

Brassart Rudy
Brassart Rudy
Répondre à  Nikko
5 mois il y a

Je viens de finir le montage et la programmation finale et c’est magnifique, ca fonctionne a merveille. Merci Nicolas pour ce travail remarquable et ces explications a la portée de tous. Je vais pouvoir m’affairer a la suite de mon projet et je ne manquerais pas de vous en faire profiter quand il sera finalisé.
Encore une fois un grand merci pour le temps que vous consacrez a l’arduino et a ce partage de connaissances