Caméra Wi-Fi ESP32-CAM avec Arduino

Caméra Wi-Fi ESP32-CAM avec Arduino

Cet article détaille la programmation de l’ESP32-CAM à l’aide d’Arduino pour la réalisation d’une caméra Wi-Fi autonome transmettant son flux vidéo sur votre navigateur internet.

Exemple d'utilisation de la caméra Wi-Fi  ESP32-CAM avec Arduino

Au niveau matériel, ce projet de Caméra Wi-Fi avec Arduino repose sur le module ESP32-CAM du fabriquant AI-Thinker (fiche technique) qui est équipé de la caméra OV2640 (fiche technique).

Au niveau logiciel, cet article décrit de façon simple et détaillée les différentes étapes d’écriture du programme Arduino permettant d’utiliser l’ESP32-CAM comme caméra Wi-Fi distante.

Le comportement de la caméra sera le suivant:

  1. Connexion au point d’accès Wi-Fi en utilisant les paramètres de connexion renseignés dans le code logiciel. Le module ESP32-CAM fait clignoter son flash tant que la connexion Wi-Fi n’est pas établie ou bien si celle-ci est perdue.
  2. Démarrage de la caméra.
  3. Envoi d’un e-mail contenant le lien internet permettant la visualisation du flux vidéo à travers un navigateur internet.

La transmission du flux vidéo par Wi-Fi est exigeante en terme de performances, aussi nous utilisons la configuration matérielle avec antenne externe. Pour plus d’information sur la configuration des antennes, je vous invite à vous reporter à l’article « Comment programmer l’ESP32-CAM avec l’Arduino IDE ? » .

Programmation de l’ESP32-CAM

Matériel nécessaire pour la programmation de l’ESP32-CAM

Pour la programmation de l’ESP32-CAM, vous avez besoin de :

Module ESP32-CAM avec antenne externe de Espressif Convertisseur USB/TTL CP2102 Platine d'essai 830 points
Carte ESP32-CAM avec antenne externe Convertisseur USB/TTL (CP2102 par exemple) Platine d’essai
   
Câbles    

Câblage pour la programmation de l’ESP32-CAM

Le câblage pour la programmation de l’ESP32-CAM, est décrit dans l’article « Comment programmer l’ESP32-CAM avec l’Arduino IDE ?« .

Les étapes de la réalisation du projet « Caméra Wi-Fi ESP32-CAM avec Arduino »

Afin de faciliter sa compréhension, la réalisation du projet est découpé 5 étapes:

  1. Présentation du projet (page 1).
  2. Connexion au point d’accès Wi-Fi (page 2).
  3. Envoi d’un e-mail avec l’adresse du futur serveur internet (page 3).
  4. Configuration de la caméra OV2640 (page 4).
  5. Fin du programme avec la création du serveur de flux vidéo (page 5).

Commençons par la connexion au point d’accès Wi-Fi,  rendez-vous page suivante.

Cet article a 8 commentaires

  1. bariod

    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.

    1. Nico

      Bonjour,
      Merci pour ce retour

      Effectivement, en disposant la caméra verticalement à quelques centimètres du sol, l’image sera plus ou moins remplie de vert en fonction de la hauteur de pousse de l’herbe.
      Une solution de programme de « détection de sortie de tondeuse » réalisé avec l’ESP32-CAM est d’effectuer les actions suivantes :
      • Prendre 1 photo par jour
      • Analyser la quantité de pixels verts de l’image à partir d’un algorithme
      • Déclencher le robot tondeuse au-delà d’un certain niveau de « verdure » de la photo
      Et voilà 😉

  2. Stéphane

    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

  3. Weado

    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.

  4. Bruno

    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

    1. Nico

      Bonsoir Bruno,

      Par défaut le serveur de flux vidéo n’est disponible qu’en local. Cependant il est possible de le rendre accessible depuis l’extérieur (internet) par les 2 opérations suivantes:
      – Utilisation d’une IP fixe par l’ESP32-CAM
      – Configuration du point d’accès Wi-Fi pour qu’il effectue une redirection de port (port forwarding) entre l’adresse publique du point d’accès et l’adresse privée de l’ESP32-CAM.

      Pour l’utilisation d’une adresse IP fixe par l’ESP32-CAM il suffit d’ajouter les lignes de code suivantes en les adaptant aux caractéristiques de votre réseau local avant l’appel à « 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 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
      WiFi.config(AdresseIP_L, Passerelle_L, SousReseau_L) // Configuration de l’adresse IP statique

  5. AnT0ine

    @Nico
    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

    1. Nico

      Bonsoir AnTOine,
      La bibliothèque Wi-Fi utilisée dans ce projet est celle du fabricant de la carte ESP32. La bibliothèque d’ « Espressif Systems » n’est pas documentée mais très proche de la bibliothèque « WiFi library ». C’est pourquoi je fournis page 2 de cet article un renvoi vers cette dernière.
      Cependant la commande « WiFi.begin » diffère entre ces 2 bibliothèques. En examinant le header « ETH.h » situé dans ton répertoire Arduino (« C:\Users\Nico\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi\src\ETH.h » pour moi) tu verras que la syntaxe de la méthode « config » est:
      bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = (uint32_t)0x00000000, IPAddress dns2 = (uint32_t)0x00000000);
      Les serveur de noms (optionnels) sont donc bien les derniers arguments.
      Merci AnTOine pour ta réaction, cela a permis d’apporter plus de précison.

Laisser un commentaire