Caméra ESP32 S3 - Envoyer une photo par email quand un mouvement est détecté
Ce tutoriel vous explique comment faire une caméra ESP32 S3 qui vous envoie un email avec une photo quand quelqu'un passe devant elle. Un capteur de mouvement PIR surveille la pièce, la caméra prend la photo, et l'ESP32 S3 l'envoie directement dans votre boîte mail. Vous n'avez besoin ni d'un compte Telegram, ni d'un service cloud, ni d'une adresse IP publique.

Ce que vous allez construire :
- Une caméra ESP32 S3 avec un capteur de mouvement PIR
- Un email avec la photo dans le message, chaque fois que le capteur voit un mouvement
- Un temps de silence, pour qu'un seul visiteur ne remplisse pas votre boîte mail
- Une caméra que tout le monde peut lire, car tout le monde a une adresse email
Matériel nécessaire
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
※ Note:
La carte caméra ESP32 S3 a 40 broches, mais le bornier à vis et la carte d'extension ont 44 broches. Elles fonctionnent quand même ensemble. Placez la carte caméra au centre de la carte 44 broches, pour que 2 broches restent libres du côté gauche et 2 broches restent libres du côté droit.
Le bornier à vis vous permet de connecter des fils avec un tournevis, sans soudure. La carte d'extension vous donne des connecteurs faciles pour une breadboard.
Email ou Telegram ?
Les deux envoient la photo sur votre téléphone. Ils sont bons dans des domaines différents :
| Telegram | ||
|---|---|---|
| Travail de configuration | Créer un mot de passe d'application | Créer un bot et trouver un ID de chat |
| Vitesse | 5 à 15 secondes | 2 à 4 secondes |
| Qualité de la photo | Taille complète, affichée dans le message | Telegram peut la rendre plus petite |
| Garde les anciennes photos | Oui, votre boîte mail garde tout | Oui, mais le chat devient long |
| Fonctionne pour tout le monde | Oui, tout le monde a un email | Seulement les personnes qui utilisent Telegram |
| Taille du code | Plus grande, elle a besoin d'une bibliothèque | Plus petite |
L'email est le meilleur choix quand vous voulez la photo en taille complète et un historique que vous pouvez rechercher plus tard. Voir aussi le tutoriel Caméra ESP32 S3 - Envoyer une photo sur Telegram lors d'une détection de mouvement.
À propos du mot de passe d'application
Votre mot de passe Gmail normal ne fonctionne pas ici. Google le bloque pour les petits appareils. Vous devez créer un mot de passe spécial à 16 lettres, appelé un mot de passe d'application.
- Créez un nouveau compte Gmail seulement pour vos projets. N'utilisez pas le compte avec lequel vous lisez vos vrais emails.
- Connectez-vous au nouveau compte.
- Allez sur votre compte Google.
- Ouvrez la section Sécurité.

- Activez la validation en 2 étapes. Sans elle, Google ne vous laisse pas créer de mot de passe d'application.
- Ouvrez la page des mots de passe d'application Google et créez un nouveau mot de passe d'application. Vous pouvez lui donner n'importe quel nom, par exemple ESP32 S3 Camera.

- Cliquez sur le bouton Créer. Google affiche 16 lettres en quatre groupes :

- Gardez ces 16 lettres. Vous en aurez besoin dans le code à l'étape suivante.
※ Note:
Écrivez les 16 lettres sans espaces dans le code : abcdefghijklmnop
※ Note:
Google change l'apparence de ces pages de temps en temps. Si vous ne trouvez pas "App Passwords" avec les étapes ci-dessus, cherchez sur internet "How to get Google App Passwords" pour voir la méthode la plus récente.
※ Note:
Un mot de passe d'application donne accès à toute la boîte mail de ce compte. C'est pourquoi nous utilisons un nouveau compte seulement pour les projets. Gardez le mot de passe secret, et ne le mettez jamais sur un site web ou sur GitHub. Vous pouvez le supprimer à tout moment sur la même page Google, et l'ESP32 S3 arrête simplement d'envoyer.
Vous utilisez une autre entreprise d'email ? Alors changez seulement ces deux lignes :
| Entreprise | Serveur SMTP | Port |
|---|---|---|
| Gmail | smtp.gmail.com | 465 |
| Outlook / Hotmail | smtp.office365.com | 587 |
| Yahoo | smtp.mail.yahoo.com | 465 |
À propos du capteur de mouvement PIR
Un capteur de mouvement PIR voit la chaleur d'un corps humain. PIR signifie "Passive InfraRed" (infrarouge passif). Quand un corps chaud bouge devant lui, la broche OUT passe à HIGH.

Pourquoi ce projet utilise un capteur
Le mouvement est trouvé par le capteur PIR, pas par la caméra. Cela compte, car un capteur PIR répond seulement à la chaleur d'un corps. Une personne ou un animal le déclenche. Une lampe qui s'allume, un nuage qui passe devant le soleil, ou un rideau qui bouge dans le vent ne le déclenche pas.
C'est pourquoi un capteur vous envoie beaucoup moins d'emails pour rien.
| Façon de trouver le mouvement | Ce qui le déclenche | Pièce supplémentaire | Fausses alertes |
|---|---|---|---|
| Capteur PIR (ce tutoriel) | La chaleur d'un corps | Un capteur | Presque aucune |
| La caméra qui se regarde elle-même | Tout changement dans l'image | Aucune | Lampes, nuages, vent, sauf si vous travaillez contre eux |
Voulez-vous trouver le mouvement sans aucun capteur, en utilisant seulement les images de la caméra ? Voir le tutoriel Caméra ESP32 S3 - Détecter le mouvement sans capteur. Cette méthode n'a besoin d'aucune pièce supplémentaire, et elle voit aussi des choses froides comme un colis ou une voiture, que le capteur PIR ne voit jamais. Le prix est plus de code, et plus de travail pour ignorer la lumière et le vent.
※ Note:
Voulez-vous le meilleur des deux ? Utilisez le capteur et l'image ensemble, et envoyez l'email seulement quand les deux sont d'accord. Alors un corps chaud doit être présent et quelque chose doit vraiment avoir changé dans l'image.
Spécifications clés
| Élément | Valeur |
|---|---|
| Alimentation | 5V |
| Sortie | 3.3V HIGH quand il voit un mouvement, LOW quand il ne voit rien |
| Distance | 3 à 7 mètres (vous pouvez la changer) |
| Angle | environ 110° |
| Temps de préchauffage | 30 à 60 secondes après la mise sous tension |
Le capteur a deux petites vis oranges. Tournez la vis de délai de temps complètement vers la gauche, pour que la sortie reste HIGH seulement environ 3 secondes.
Pour plus de détails sur le capteur de mouvement, voir le tutoriel ESP32 S3 - Capteur de mouvement.
Schéma de câblage entre le capteur de mouvement PIR et l'ESP32 S3
Connectez le capteur de mouvement PIR à votre ESP32 S3 avec trois fils de raccordement.

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
| Broche du capteur PIR | Broche ESP32 S3 |
|---|---|
| VCC | 5V |
| GND | GND |
| OUT | GPIO21 |
Notes de sécurité
Le capteur PIR a besoin de 5V sur sa broche VCC, pas de 3.3V. Avec 3.3V, il semble fonctionner, mais il donne de mauvais signaux. Sa broche OUT donne 3.3V, ce qui est correct pour l'ESP32 S3.
La caméra utilise les GPIO4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17 et 18. N'utilisez pas ces broches pour le capteur. Le GPIO21 est libre, nous l'utilisons donc.
Installer la bibliothèque ESP Mail Client
La bibliothèque ESP Mail Client parle au serveur d'email pour vous.
- Ouvrez l'Arduino IDE.
- Cliquez sur l'icône Libraries dans la barre de gauche.
- Tapez ESP Mail Client dans la zone de recherche.
- Trouvez la bibliothèque de Mobizt et cliquez sur INSTALL.
- Search for ESP Mail Client created by Mobizt and click the Install button.
Réglages de l'Arduino IDE pour la caméra ESP32 S3
La caméra ne fonctionne pas avec les réglages par défaut de l'Arduino IDE. Vous devez changer certains éléments dans le menu Tools avant de téléverser le code.
| Élément du menu Tools | Sélectionnez ceci |
|---|---|
| Board | ESP32S3 Dev Module |
| Flash Size | 16MB (128Mb) |
| PSRAM | OPI PSRAM |
| Partition Scheme | Huge APP (3MB No OTA/1MB SPIFFS) |
| CPU Frequency | 240MHz (WiFi) |
| USB Mode | Hardware CDC and JTAG |
| Upload Mode | UART0 / Hardware CDC |
| Upload Speed | 921600 |
| USB CDC On Boot | Enabled |
※ Note:
Partition Scheme doit être Huge APP pour ce projet. La bibliothèque d'email est grande, et le code ne rentre pas dans la partition normale.
Comment envoyer une photo par email
- Incluez la bibliothèque en haut de votre code.
- Mettez votre compte email dans un Session_Config.
※ Note:
Le serveur d'email a aussi besoin de la bonne heure, sinon il refuse le message. Le code demande l'heure à un serveur NTP pour vous avec config.time.ntp_server.
- Écrivez le message.
Dans l'email, pas en dessous
Il y a deux façons de mettre une photo dans un email, et elles ont l'air très différentes quand le message arrive :
| Façon | Méthode dans le code | À quoi ça ressemble |
|---|---|---|
| Pièce jointe | message.addAttachment(att); | Une petite boîte grise de fichier sous le texte. Vous devez cliquer dessus pour voir la photo. |
| Dans l'email | message.addInlineImage(att); | La photo est grande, dans le message lui-même. Vous la voyez tout de suite. |
Pour une caméra de sécurité, dans l'email est bien mieux. Vous ouvrez le message sur votre téléphone et vous voyez le visiteur immédiatement, sans avoir à cliquer.
Deux choses sont nécessaires pour cela :
- Le corps de l'email doit être en HTML, pas en texte simple
- Le nom dans <img src="..."> doit correspondre au nom de fichier de l'image

※ Note:
Vous voulez les deux, pour pouvoir aussi enregistrer facilement le fichier ? Alors ajoutez la même image deux fois, une fois avec addInlineImage() et une fois avec addAttachment().
- Écrivez le corps de l'email en HTML, et mettez-y un <img>.
- Mettez la photo dans l'email avec addInlineImage(). La photo vient directement de la mémoire, elle n'a donc jamais besoin d'être enregistrée d'abord sur une carte.
※ Note:
Le nom dans src="photo.jpg" doit être exactement le même que att.descr.filename. C'est ainsi que le programme d'email sait quelle image appartient à quel endroit. Changez l'un des deux et vous obtenez une boîte vide au lieu de la photo.
※ Note:
blob signifie "les données sont déjà en mémoire". La caméra vous donne fb->buf et fb->len, et la bibliothèque envoie exactement ces octets.
- Connectez-vous et envoyez.
※ Note:
Appelez toujours smtp.closeSession(). Si vous laissez la connexion ouverte, le serveur d'email refuse bientôt les nouveaux messages.
Code ESP32 S3
Changez votre WiFi, votre adresse email et votre mot de passe d'application en haut du code. Le temps de silence est de 60 secondes, car un email prend plus de temps qu'un message de chat. Pour le changer, changez la ligne #define QUIET_TIME 60000.
Étapes rapides
- Nouveau sur ESP32 S3 ? Complétez d'abord notre guide ESP32 S3 - Premiers pas.
- Créez votre mot de passe d'application Google. Voir les étapes ci-dessus.
- Installez la bibliothèque ESP Mail Client.
- Débranchez le câble USB, puis câblez le capteur PIR comme dans le tableau ci-dessus.
- Tournez la vis de délai de temps du capteur complètement vers la gauche.
- Copiez le code ci-dessus et collez-le dans l'Arduino IDE.
- Changez WIFI_SSID, WIFI_PASSWORD, SENDER_EMAIL, SENDER_PASSWORD et RECEIVER_EMAIL.
※ Note:
- SENDER_EMAIL doit être un compte Gmail, le nouveau que vous avez créé pour vos projets.
- SENDER_PASSWORD est le mot de passe d'application à 16 lettres, pas le mot de passe du compte.
- RECEIVER_EMAIL peut être n'importe quel type d'adresse email. Cela peut aussi être la même adresse, pour que la caméra s'écrive à elle-même.
- Changez les réglages dans le menu Tools. Voir le tableau ci-dessus.
- Compilez et téléversez le code sur la carte ESP32 S3 en cliquant sur le bouton Upload dans l'Arduino IDE.

- Ouvrez le Serial Monitor dans l'Arduino IDE.

- Appuyez une fois sur le bouton RESET, puis quittez la pièce pendant 30 secondes.
- Revenez et marchez devant la caméra. L'email arrive en quelques secondes.

Serial Monitor
Les relevés suivants ont été capturés en 2026 :
※ Note:
Vous voulez voir chaque étape que fait le serveur d'email ? Changez smtp.debug(0) en smtp.debug(1). Le Serial Monitor affiche alors toute la conversation, ce qui aide beaucoup quand quelque chose ne va pas.
Dépannage
Le Serial Monitor affiche Cannot connect avec Username and Password not accepted.
Vous avez utilisé votre mot de passe Gmail normal. Créez un mot de passe d'application et utilisez celui-là, sans espaces.
Le Serial Monitor affiche une erreur de certificat ou de temps.
La carte a la mauvaise heure, elle ne peut donc pas vérifier le serveur. Assurez-vous que la carte accède à internet, car l'heure vient d'un serveur NTP.
L'email arrive, mais la photo est une boîte vide.
Le nom dans src="photo.jpg" et le nom dans att.descr.filename ne sont pas les mêmes. Ils doivent correspondre exactement.
La photo est toujours un petit fichier sous le texte.
Vous avez utilisé addAttachment(). Changez-le en addInlineImage(), et assurez-vous que le corps est message.html.content, pas seulement message.text.content.
L'email n'arrive jamais, mais le Serial Monitor dit qu'il a été envoyé.
Regardez dans le dossier Spam. Le premier message d'un nouvel expéditeur y atterrit souvent. Marquez-le comme "non spam" une fois, et les suivants iront dans votre boîte de réception.
Le Serial Monitor affiche Connection error avec Outlook.
Outlook utilise le port 587, pas 465. Changez SMTP_PORT en 587.
Le téléversement échoue avec "text section exceeds available space".
Réglez Partition Scheme sur Huge APP dans le menu Tools. La bibliothèque d'email est grande.
Le capteur voit un mouvement tout le temps.
Attendez une minute complète après le démarrage, tournez la vis de sensibilité un peu vers la gauche, et vérifiez que VCC est bien sur 5V.
Je reçois trop d'emails.
Augmentez QUIET_TIME de 60000 à 300000 (cinq minutes).
Le Serial Monitor n'affiche rien après les messages de démarrage.
Si votre câble USB est dans le port nommé UART, réglez USB CDC On Boot sur Disabled. S'il est dans le port nommé USB, réglez-le sur Enabled.
Applications
L'email n'a besoin d'aucune application spéciale, donc n'importe qui peut recevoir les photos, sur n'importe quel téléphone et n'importe quel ordinateur. Voici des projets pratiques que vous pouvez construire avec ce code :
- Caméra de sécurité domestique avec alertes email : Recevez une photo en taille complète dans votre boîte mail quand quelqu'un entre.
- Registre de livraison de colis : Gardez un email daté pour chaque livraison à votre porte.
- Bureau après les heures : Envoyez les photos vers une boîte mail partagée que plusieurs personnes peuvent lire.
- Surveillance de maison de vacances : Surveillez une maison vide, et gardez chaque photo comme registre.
- Caméra faune sauvage avec rapports : Recevez un email quand des animaux entrent dans votre jardin la nuit.
- Portail de ferme et grange : Surveillez un lieu loin de votre maison, et gardez les emails comme preuve.
- Registre d'alarme de magasin : Chaque photo a une date et une heure, donc cela fonctionne comme un simple journal de bord.
- Surveillance de la chambre de bébé : Recevez une photo quand votre enfant sort de son lit.
- Atelier et salle des machines : Sachez qui est entré dans la pièce pendant que les machines fonctionnaient.
- Preuve pour assurance : Une boîte mail pleine de photos datées est facile à rechercher et facile à montrer plus tard.
Vidéo
Regardez la vidéo pas à pas de ce projet ESP32 S3 ci-dessous.
Défis
- Débutant : Changez le sujet et le texte de l'email avec vos propres mots.
- Intermédiaire : Envoyez l'email à deux personnes en même temps avec un second message.addRecipient().
- Avancé : Enregistrez aussi chaque photo sur la carte microSD, pour garder une copie même quand internet est en panne. Voir le tutoriel Caméra ESP32 S3 - Enregistrer une photo sur carte SD lors d'une détection de mouvement.