samedi 18 janvier 2020

ESP32-CAM: première utilisation avec l'IDE Arduino


L'ESP32-CAM est carte offerte à prix très modique (moins de 10 euros) qui comporte un microcontrôleur ESP32 et une caméra OV2640. Une des caractéristiques les plus intéressantes de l'ESP32 étant la possibilité de communiquer en WiFi, une utilisation évidente de l'ESP-32 CAM consiste à transmettre en direct des images vidéo par WiFi (caméra de surveillance, etc.).

En plus d'une caméra OV2640, le module est équipé d'un lecteur de cartes micro SD qui pourra éventuellement servir à stocker des images ou des séquences vidéo.

Si vous êtes déjà familier avec les modules ESP-32 conventionnels, vous remarquerez toutefois que le module ESP32-CAM ne comporte aucun connecteur USB: pour programmer le microcontrôleur, vous devez utiliser un convertisseur USB-Série fonctionnant à un niveau logique de 3,3 V.

De plus, puisque la caméra accapare un certain nombre d'entrées/sorties du microcontrôleur, les broches GPIO disponibles sont beaucoup moins nombreuses que sur un module ESP-32 conventionnel (il n'y en a que 8, et 6 d'entre elles sont déjà connectées au lecteur de carte SD).

Le module que j'ai reçu était déjà assemblé: nul besoin de souder soi-même les connecteurs, ni même de connecter la caméra.

Dans ce court tutoriel, je vous explique comment, dans les minutes suivant la réception de mon module ESP32-CAM, j'ai pu utiliser un exemple fourni avec l'IDE Arduino pour diffuser en direct sur une page web la vidéo captée par la caméra.

Connexions de l'ESP32-CAM au convertisseur USB-série

Pour programmer mon module ESP32-CAM, j'ai utilisé un convertisseur USB-série qui fonctionne à un niveau logique de 3,3 V.


Pour la phase de programmation, les connexions étaient les suivantes:

  • Sortie 5 V du convertisseur USB-série:  Entrée 5 V de l'ESP32-CAM
  • Broche GND du convertisseur USB-série: Broche GND de l'ESP32-CAM
  • Broche TXD du convertisseur USB-série: Broche UDR de l'ESP32-CAM
  • Broche RXD du convertisseur USB-série: Broche UDT de l'ESP32-CAM
  • Broche IO0 branchée à GND



Le module est donc alimenté en 5 V pendant la programmation (je n'ai pas testé, mais j'ai lu sur des forums de discussion que certaines personnes ont eu des problèmes en tentant de programmer sous une alimentation de 3,3 V).

L'information transite de l'ordinateur vers le microcontrôleur (TXD / UDR) et du microcontrôleur vers l'ordinateur (RXD / UDT) à un niveau logique de 3,3 V (si votre convertisseur USB-série est muni d'un commutateur permettant de sélectionner le niveau logique, veillez à le régler à 3,3 V).

Pour mettre l'ESP32-CAM en mode programmation, il faut que la broche IO0 (ou GPIO 0) soit reliée à la masse (GND); on appuie ensuite sur le bouton "reset". Pour exécuter le programme, on débranche la broche IO0 et on appuie à nouveau sur le bouton "reset".

Après quelques heures de développement sur cette carte, j'ai bricolé un rudimentaire support en carton qui permet de maintenir la caméra à un angle pertinent tout en laissant le bouton "reset" facilement accessible. De plus, j'ai placé un interrupteur entre la broche IO0 et la masse pour éviter de devoir sans cesse débrancher et rebrancher un fil.





Réglages de l'IDE Arduino

Les cartes de la famille ESP32 ne sont pas incluses par défaut avec l'IDE Arduino; il faut les installer en passant par le "Gestionnaire de cartes". Si ce n'est pas déjà fait, vous trouverez la marche à suivre détaillée dans ce précédant billet.


Parmi les nombreuses cartes ESP32 disponibles, vous sélectionnez "AI Thinker ESP32-CAM". (À vrai dire, rien sur mon module ou sur la description offerte par le vendeur ne mentionne "AI Thinker", mais ce choix a fonctionné correctement.)

Vous ouvrez ensuite l'exemple "CameraWebServer" (Menu Fichier - Exemples - ESP32 - Camera - CameraWebServer).


Par défaut, le sketch est réglé pour être utilisé avec le modèle WROVER: utilisez plutôt la ligne 14 "#define CAMERA_MODEL_AI_THINKER".

De plus, écrivez les paramètres de votre réseau WiFi aux lignes 18 et 19.


Après vous être assuré que la broche IO0 est reliée à la masse GND et appuyé sur le bouton "reset", vous pouvez maintenant verser le sketch dans votre ESP32.


Si tout se passe bien, vous devriez voir, au bout de quelques dizaines de secondes, un message indiquant la réussite du téléversement.



Pour démarrer le programme, vous débranchez le fil reliant la broche IO0 à la masse et appuyez sur le bouton "reset".

Le moniteur série affiche l'adresse IP qui permettra de visionner l'image dans un navigateur web.


On copie cette adresse dans le navigateur web de notre choix. Dans la page web qui s'affiche, il s'agit de cliquer sur le bouton "Start Stream" pour que l'image captée par le module ESP32-CAM s'affiche à l'écran. Plusieurs contrôles situés à la gauche de la fenêtre permettent de modifier les caractéristiques de l'image.




En ce qui me concerne, cette première exploration du module ESP32-CAM s'est effectué sans le moindre pépin. J'espère bien, dans un proche avenir, apprendre à personnaliser les programmes pour, par exemple, enregistrer des images sur une carte SD, etc.

À lire également

D'autres articles sur l'ESP32-CAM:  un web server minimaliste , enregistrer des photos sur la carte microSD, time-lapse avec ESP32-CAMles LEDs de l'ESP32-CAM, mouvement panoramique avec servomoteur.

Mon article sur sur le module caméra du Raspberry Pi, et la liste des articles impliquant l'ESP32.

Yves Pelletier (TwitterFacebook)

10 commentaires:

  1. Bonjour,
    Merci pour votre partage et pour sa clarté.
    Est-il possible d'utiliser un arduino uno r3 après avoir ôté son processeur de ses broches pour remplacer le convertisseur USB-Série ?
    Merci.

    RépondreSupprimer
  2. Bonjour Yves,
    très bon tuto, j'espère que vous serez plus chanceux que moi ! J'en ai commandé plusieurs chez Ali et je peux vous dire que j'ai eu à boire et à manger ! Je n'ai jamais réussi à téléverser dans un , l'autre il falait l'alimenter par la pin VCC au lieu de 5V..
    Votre caméra était déjà branché vous dites ? Quelle chance ! Certains fournissent des caméras grand angle avec mais pas le la librairie avec bien sur du coup, ne fonctionne pas..
    Bref attention à vos achat :) !

    RépondreSupprimer
    Réponses
    1. le problème vient souvent des FTDI232...Si vous mettez le Jumper sur 3V, le Vcc sur le connecteur du FTDI232 va se retrouver en 3.3V et la CAM ne fonctionnera pas.
      Alors certains branchent le Vcc trop faible sur le Vcc de la CAM, mais c'est également trop juste, et alors apparait l'erreur brownout detector.....
      Alors les mêmes ont modifié le soft pour disabler le brownout detector, mais c'est pas la bonne solution.

      La CAM marche tres bien avec le logiciel donné dans les exemples de l'ESP32, sans modification et comme expliqué dans ce tuto. Il faut mettre le jumper du FTDI en 3V, MAIS alimenter la CAM en 5V sur son entrée 5V ( repiquer du 5V sur le coté du FTDI232, en soudant un fil là ou c'est marqué 5V )

      Supprimer
  3. attention, certains FTDI232, quand on met le jumper sur 3.3V, sortent également 3.3V sur la pin VCC.
    La programmation semble bien se passer, mais la CAM au final ne fonctionne pas

    plein de messages dans le moniteur serie
    load:0x2fff0004,len:192
    ho 0 tail 12 room 4
    load:0x50570054,len:340787284
    1162 mmu set 00010000, pos 00010000
    1162 mmu set 00020000, pos 00020000
    1162 mmu set 00030000, pos 00030000
    1162 mmu set 00040000, pos 00040000
    1162 mmu set 00050000, pos 00050000

    au lieu du

    ets Jun 8 2016 00:22:57

    rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    configsip: 0, SPIWP:0xee
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:DIO, clock div:1
    load:0x3fff0018,len:4
    load:0x3fff001c,len:1216
    ho 0 tail 12 room 4
    load:0x40078000,len:9720
    ho 0 tail 12 room 4
    load:0x40080400,len:6352
    entry 0x400806b8

    .
    WiFi connected
    Starting web server on port: '80'
    Starting stream server on port: '81'
    Camera Ready! Use 'http://192.168.1.33' to connect




    RépondreSupprimer
    Réponses
    1. Bonjour. J'ai un problème similaire : téléversement OK , page web s'ouvre OK , mais écran noir en provenance de la camera...


      23:23:33.014 -> ets Jun 8 2016 00:22:57
      23:23:33.014 ->
      23:23:33.014 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
      23:23:33.014 -> flash read err, 1000
      23:23:33.014 -> ets_main.c 371
      23:23:33.340 -> ets Jun 8 2016 00:22:57
      23:23:33.340 ->
      23:23:33.340 -> rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
      23:23:33.387 -> configsip: 0, SPIWP:0xee
      23:23:33.387 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
      23:23:33.387 -> mode:DIO, clock div:1
      23:23:33.387 -> load:0x3fff0018,len:4
      23:23:33.387 -> load:0x3fff001c,len:1216
      23:23:33.387 -> ho 0 tail 12 room 4
      23:23:33.387 -> load:0x40078000,len:9720
      23:23:33.387 -> ho 0 tail 12 room 4
      23:23:33.387 -> load:0x40080400,len:6352
      23:23:33.387 -> entry 0x400806b8
      23:23:35.395 ->
      23:23:36.706 -> .
      23:23:36.706 -> WiFi connected
      23:23:36.706 -> Starting web server on port: '80'
      23:23:36.706 -> Starting stream server on port: '81'
      23:23:36.706 -> Camera Ready! Use 'http://192.168.X.XX' to connect

      L'avez-vous solutionné dans votre cas ?
      Cordialement.

      Supprimer
  4. Bjr, aujourd’hui je me lance, je m’appuie bcp bcp sur votre billet a ce sujet merci encore

    RépondreSupprimer
  5. Bonjour, bravo pour la clarté de vos explications.
    Je voulais savoir une personne entrer l adresse sur un pc à l autre bout de la terre il pouvait voir image ou bien faut il être sur le même wifi que celui de la caméra est donc dans la même maison.
    Merci
    JR B

    RépondreSupprimer
  6. bonjour j'ai comme messages Brownout detector was triggered
    14:28:29.892 ->
    14:28:29.892 -> ets Jun 8 2016 00:22:57
    14:28:29.892 ->
    14:28:29.892 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    14:28:29.892 -> configsip: 0, SPIWP:0xee
    14:28:29.892 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    14:28:29.892 -> mode:DIO, clock div:1
    14:28:29.892 -> load:0x3fff0018,len:4
    14:28:29.892 -> load:0x3fff001c,len:1100
    14:28:29.945 -> load:0x40078000,len:9232
    14:28:29.945 -> load:0x40080400,len:6400
    14:28:29.945 -> entry 0x400806a8

    en utilisant les base
    par contre elle fonctionne avec un autre programme ou je n'ai que l'image mai aucun réglages

    RépondreSupprimer
  7. Aidez s'il vous plaît , j'ai pu téléverser le code ,dans le Moniteur série je reçois des informations mais le esp n'affiche IP , aucune connections .Que faire ?

    RépondreSupprimer
  8. Hi, I'm starting with ESP32 and I'd like to use a CAM, but I need to rotate the image 90 degrees. Please advise where in the code and how to edit please? Thank you

    RépondreSupprimer