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

La connexion au point d’accès Wi-Fi

Dans cette étape, nous nous concentrons sur  la connexion de notre module ESP32-CAM au point d’accès Wi-Fi et sur l’affichage de l’état de la connexion.

Comme d’habitude, nous démarrons l’écriture du logiciel par l’ossature de code Arduino suivante:

// Fonction de démarrage, s'exécute une seule fois:
void setup()
{

}

// Fonction principale du programme, s'exécute en boucle:
void loop()
{

}

Bibliothèque nécessaire

La bibliothèque nécessaire pour la connexion au point d’accès est la librairie “WiFi” de l’ESP32 que nous déclarons par les lignes:

// Déclaration des bibliothèques utilisées
#include <WiFi.h>

Les informations d’utilisation de cette librairie sont disponibles à ce lien.

Connexion au point d’accès Wi-Fi

Vos identifiants de connexion Wi-Fi sont à définir dans la fonction “setup”.  Pour cet article, je prends l’exemple de “LiveBox_1324” comme nom de réseau Wi-Fi (SSID) et “12345?ABCDE” comme mot de passe.

C’est à vous de modifier ces 2 lignes de code pour y insérer vos identifiants Wi-Fi :

    // 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

La fonction Arduino permettant d’initialiser le module Wi-Fi puis de lancer la connexion au point d’accès est la méthode “begin” de l’objet “WiFi” :

WiFi.begin(SSID_L, MOT_DE_PASSE_L); // Tentative de connexion au point d'accès Wi-Fi

Pour vérifier l’état de la connexion nous utilisons la méthode “status” de l’objet “WiFi” et stockons l’état de connexion lu dans la variable “StatutConnexion_L” :

    StatutConnexion_L = WiFi.status(); // Lecture de l'état de la connexion et mémorisation dans la variable "StatutConnexion_L"

La variable “StatutConnexion_L” de type “wl_status_t”  est à déclarer préalablement comme suit:

    // Variables de la fonction
    wl_status_t StatutConnexion_L;

Trois valeurs de retour nous intéressent particulièrement, les codes de retour:

  • “WL_NO_SSID_AVAIL” lorsque le SSID est introuvable,
  • “WL_CONNECT_FAILED” qui signale un mauvais mot de passe renseigné,
  • “WL_CONNECTED” une fois la connexion Wi-Fi est établie avec succès.

Nous voulons que le programme reste dans une boucle d’attente tant que l’état de la connexion lu différe de l’une des 3 valeurs de code retour listées. Vous utilisez pour cela l’instruction de boucle  “while” ainsi que l’instruction “delay” pour l’attente d’une demi-seconde entre 2 vérifications de l’état de la connexion:

while ((StatutConnexion_L != WL_NO_SSID_AVAIL)&&(StatutConnexion_L != WL_CONNECTED)&&(StatutConnexion_L != WL_CONNECT_FAILED))
 {
        delay(500);
        StatutConnexion_L = WiFi.status(); // Lecture de l'état de la connexion et mémorisation dans la variable "StatutConnexion_L"
 }

Une fois sortie de cette boucle, des traces de déverminages sont envoyées à travers le port série en utilisant:

  • l’instruction “Serial.Begin” pour l’ouverture de la liaison série avec l’ordinateur,
  • l’instruction “Serial.println” pour la transmission des traces elles-mêmes.
Serial.begin(115200); // Ouverture du port série à 115200 bauds

// Affichage du résultat de la tentative de connexion
if (StatutConnexion_L == WL_CONNECTED)
{
    Serial.println("Connection OK");
}
else if (StatutConnexion_L == WL_NO_SSID_AVAIL)
{
    Serial.println("SSID introuvable");
}
else if (StatutConnexion_L == WL_CONNECT_FAILED)
{
    Serial.println("Mot de passe KO");
}
else
{
    Serial.println("Autre erreur");
}

Lors de son utilisation sur alimentation autonome, il n’y aura pas d’ordinateur pour lire les traces transmises sur le port série du module. Nous devons donc utiliser un autre moyen pour afficher l’état de la connexion Wi-FI.

Pour rappel, l’ESP32-CAM possède une LED embarquée très puissante servant de flash pour les photos et les vidéos. Cette LED est routée sur la sortie numérique 4 de l’ESP32-CAM:

Emplacement du flash embarqué sur la carte de développement ESP32-CAM

Aussi je vous propose d’utiliser le flash de l’ESP32-CAM pour signaler que le module n’est pas connecté à internet.

Pour cela, nous commençons par définir l’alias  “PORT_LED_FLASH” pour désigner la sortie numérique du flash.

// Définition des constantes globales
#define PORT_LED_FLASH      4   // Numéro de port auquel est branchée la LED servant de flash.

N’oublions pas d’indiquer ensuite au microcontrôleur ESP32 que nous voulons utiliser la broche d’entrée/sortie du flash en mode sortie (“OUTPUT”). Ceci se réalise à l’aide l’instruction  “pinmode” :

pinMode(PORT_LED_FLASH, OUTPUT);

L’allumage du flash s’effectue par une demande de positionnement de la sortie à l’état allumé (“HIGH”) et son extinction par une demande de positionnement de la sortie à l’état éteint (“LOW”). Le fonction Arduino permettant d’effectuer ce changement d’état de la sortie Arduino est la fonction digitalWrite”  .

Nous utiliserons la fonction delay”  après avoir modifié l’état allumé/éteint du flash pour marquer une pause permettant la visualisation de l’état du flash.

Le clignotement du flash s’effectue par l’écriture des lignes suivantes ajoutées à 2 endroits du code:

  • Dans la boucle d’attente de connexion au point d’accès Wi-Fi
  • Dans la fonction principale du programme pour signaler du signal Wi-Fi
 digitalWrite(PORT_LED_FLASH, HIGH);
 delay(100);
 digitalWrite(PORT_LED_FLASH, LOW);
 delay(500);

La partie dédiée à la connexion au point d’accès Wi-Fi de notre programme est terminée, voici une synthèse (attention aux identifiants qui sont les vôtres) :

// Déclaration des bibliothèques utilisées
#include <WiFi.h>

// Définition des constantes globales
#define PORT_LED_FLASH      4   // Numéro de port auquel est branchée la LED servant de flash.
 
// Fonction de démarrage, s'exécute une seule fois:
void setup()
{
    // 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
    wl_status_t StatutConnexion_L; // Pour mémoriser l'état de la connexion

    pinMode(PORT_LED_FLASH, OUTPUT); // Initialisation en "sortie" de la broche d'E/S connectée au flash
    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_NO_SSID_AVAIL)&&(StatutConnexion_L != WL_CONNECTED)&&(StatutConnexion_L != WL_CONNECT_FAILED))
    {
        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.begin(115200); // Ouverture du port série à 115200 bauds

    // Affichage du résultat de la tentative de connexion
    if (StatutConnexion_L == WL_CONNECTED)
    {
        Serial.println("Connection OK");
    }
    else if (StatutConnexion_L == WL_NO_SSID_AVAIL)
    {
        Serial.println("SSID introuvable");
    }
    else if (StatutConnexion_L == WL_CONNECT_FAILED)
    {
        Serial.println("Mot de passe KO");
    }
    else
    {
        Serial.println("Autre erreur");
    }
}

// Fonction principale du programme, s'exécute en boucle:
void loop()
{
    if(WiFi.status()==WL_CONNECTED)
    {  
        // Internet est disponible
    }
    else
    {
        // Pas de connexion internet
        digitalWrite(PORT_LED_FLASH, HIGH);
        delay(100);
        digitalWrite(PORT_LED_FLASH, LOW);
        delay(200);
    }
}

Afin de vérifier que vous arrivez bien à connecter votre module ESP32-CAM au point d’accès Wi-Fi,  je vous invite à compiler ce programme puis à le transférer. Lorsque vous mettez ensuite l’ESP32-CAM en mode “exécution de programme” vous devez obtenir un clignotement du flash au démarrage qui s’éteint au bout de quelques secondes.

Visualisation des traces de déverminage

Pour visualiser les traces de déverminage envoyées à travers le port série, vous pouvez utiliser le terminal série intégré à l’Arduino IDE. Pour cela, dans le menu “Outils” sélectionnez “Moniteur série”:

Lancer le "Moniteur série" de l'Arduino IDE

Afin que les traces soient lisibles, la vitesse de communication d’ordinateur doit correspondre à celle du microcontrôleur, soit 115200 bauds.

Traces du compte-rendu de connexion au point d'accès Wi-Fi

Si le message “Connexion OK” s’afficher en bas de l’écran vous pouvez passer à l’étape suivante qui décrit l’envoi d’un e-mail sous Arduino (page suivante).

S’abonner
Notification pour
guest
49 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
bariod
bariod
3 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
2 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
3 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
3 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
3 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
1 année 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
3 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
3 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
3 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
3 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
3 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
3 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
3 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
3 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
3 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
3 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
3 années il y a

Belle pédagogie !

ludovic fritz (esp32 cam)
ludovic fritz (esp32 cam)
2 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)
2 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
1 année il y a

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

Laurent
Laurent
1 année 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
1 année 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
1 année il y a

Merci. Un grand merci. PAM

thierry
1 année 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
1 année 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
1 année 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
1 année il y a

Merci , c’est bien noté

Nico
Nico
5 mois 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
5 mois il y a

Comment faire du coup ?

Nico
Nico
Répondre à  Nikko
5 mois il y a

Merci quand même !

Nico

REuMI
REuMI
Répondre à  Nico
5 mois il y a

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

Nico
Nico
Répondre à  REuMI
5 mois il y a

Merci ! Cela est très utile !

Nico