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).

Ce contenu a été publié dans Arduino, ESP32-CAM. Vous pouvez le mettre en favoris avec ce permalien.

2 réponses à Caméra Wi-Fi ESP32-CAM avec Arduino

  1. bariod dit :

    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.

    • Nico dit :

      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à 😉

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *